Skip to contentSkip to conversation

package/websocketpp: fix build with C++20

PATCH In review Michael Nosthoff via buildroot 2 participants 5 messages Nov 3, 2023 – Nov 8, 2023

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 package/websocketpp: fix build with C++20

websocketpp had some ill-formed usage of template parameters which was finally removed in C++20. Hence build fails when building with C++20 support enabled.

The patch is already in the develop branch but no new release was done.

---
 .../websocketpp/0001-fix_cpp20_build.patch    | 108 ++++++++++++++++++
 1 file changed, 108 insertions(+)
 create mode 100644 package/websocketpp/0001-fix_cpp20_build.patch
package/websocketpp/0001-fix_cpp20_build.patch new file +108 -0
new file mode 100644
index 0000000000..77b2292051
@@ -0,0 +1,108 @@
+From 3197a520eb4c1e4754860441918a5930160373eb Mon Sep 17 00:00:00 2001
+From: Peter Thorson <[email protected]>
+Date: Tue, 29 Jun 2021 09:13:12 -0500
+Subject: [PATCH] [core] Remove the use of simple template ids as they have
+ been removed in c++20.
+ https://timsong-cpp.github.io/cppwp/n4861/diff.cpp17.class#2 references #991
+
+Signed-off-by: Michael Nosthoff <[email protected]>
+Upstream: https://github.com/zaphoyd/websocketpp/commit/3197a520eb4c1e4754860441918a5930160373eb
+---
+ websocketpp/endpoint.hpp              |  2 +-
+ websocketpp/logger/basic.hpp          | 14 +++++++-------
+ websocketpp/roles/server_endpoint.hpp |  6 +++---
+ 3 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/websocketpp/endpoint.hpp b/websocketpp/endpoint.hpp
+index 825eaa46d..10f525689 100644
+--- a/websocketpp/endpoint.hpp
++++ b/websocketpp/endpoint.hpp
+@@ -111,7 +111,7 @@ class endpoint : public config::transport_type, public config::endpoint_base {
+ 
+ 
+     /// Destructor
+-    ~endpoint<connection,config>() {}
++    ~endpoint() {}
+ 
+     #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
+         // no copy constructor because endpoints are not copyable
+diff --git a/websocketpp/logger/basic.hpp b/websocketpp/logger/basic.hpp
+index 84514130e..4c9d83649 100644
+--- a/websocketpp/logger/basic.hpp
++++ b/websocketpp/logger/basic.hpp
+@@ -58,33 +58,33 @@ namespace log {
+ template <typename concurrency, typename names>
+ class basic {
+ public:
+-    basic<concurrency,names>(channel_type_hint::value h =
++    basic(channel_type_hint::value h =
+         channel_type_hint::access)
+       : m_static_channels(0xffffffff)
+       , m_dynamic_channels(0)
+       , m_out(h == channel_type_hint::error ? &std::cerr : &std::cout) {}
+ 
+-    basic<concurrency,names>(std::ostream * out)
++    basic(std::ostream * out)
+       : m_static_channels(0xffffffff)
+       , m_dynamic_channels(0)
+       , m_out(out) {}
+ 
+-    basic<concurrency,names>(level c, channel_type_hint::value h =
++    basic(level c, channel_type_hint::value h =
+         channel_type_hint::access)
+       : m_static_channels(c)
+       , m_dynamic_channels(0)
+       , m_out(h == channel_type_hint::error ? &std::cerr : &std::cout) {}
+ 
+-    basic<concurrency,names>(level c, std::ostream * out)
++    basic(level c, std::ostream * out)
+       : m_static_channels(c)
+       , m_dynamic_channels(0)
+       , m_out(out) {}
+ 
+     /// Destructor
+-    ~basic<concurrency,names>() {}
++    ~basic() {}
+ 
+     /// Copy constructor
+-    basic<concurrency,names>(basic<concurrency,names> const & other)
++    basic(basic<concurrency,names> const & other)
+      : m_static_channels(other.m_static_channels)
+      , m_dynamic_channels(other.m_dynamic_channels)
+      , m_out(other.m_out)
+@@ -97,7 +97,7 @@ class basic {
+ 
+ #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_
+     /// Move constructor
+-    basic<concurrency,names>(basic<concurrency,names> && other)
++    basic(basic<concurrency,names> && other)
+      : m_static_channels(other.m_static_channels)
+      , m_dynamic_channels(other.m_dynamic_channels)
+      , m_out(other.m_out)
+diff --git a/websocketpp/roles/server_endpoint.hpp b/websocketpp/roles/server_endpoint.hpp
+index 4a5865eff..04fee18f9 100644
+--- a/websocketpp/roles/server_endpoint.hpp
++++ b/websocketpp/roles/server_endpoint.hpp
+@@ -75,11 +75,11 @@ class server : public endpoint<connection<config>,config> {
+     }
+ 
+     /// Destructor
+-    ~server<config>() {}
++    ~server() {}
+ 
+ #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
+     // no copy constructor because endpoints are not copyable
+-    server<config>(server<config> &) = delete;
++    server(server<config> &) = delete;
+ 
+     // no copy assignment operator because endpoints are not copyable
+     server<config> & operator=(server<config> const &) = delete;
+@@ -87,7 +87,7 @@ class server : public endpoint<connection<config>,config> {
+ 
+ #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_
+     /// Move constructor
+-    server<config>(server<config> && o) : endpoint<connection<config>,config>(std::move(o)) {}
++    server(server<config> && o) : endpoint<connection<config>,config>(std::move(o)) {}
+ 
+ #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
+     // no move assignment operator because of const member variables
Signature · 6 lines
2.34.1

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#1 lore raw
Quoted 11 lines · On Fri, 3 Nov 2023 12:16:12 +0100 Michael Nosthoff via buildroot…

websocketpp had some ill-formed usage of template parameters which was finally removed in C++20. Hence build fails when building with C++20 support enabled.

The patch is already in the develop branch but no new release was done.

---
 .../websocketpp/0001-fix_cpp20_build.patch    | 108 ++++++++++++++++++
 1 file changed, 108 insertions(+)
 create mode 100644 package/websocketpp/0001-fix_cpp20_build.patch

Since there are no autobuilder failures for this, could you provide a defconfig that reproduces the build issue?

Best regards,

Thomas

Signature · 7 lines
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#2 lore raw

Hi Thomas,

Quoted 7 lines · Thomas Petazzoni

On Fri, 3 Nov 2023 12:16:12 +0100
Michael Nosthoff via buildroot <[email protected]> wrote:

Since there are no autobuilder failures for this, could you provide a defconfig that reproduces the build issue?

Since this is a Header Only Lib and we only have one other package depending on it I don't think there is a defconfig which provokes this.

I stumbled across this issue when I started bumping an internal project to C++20. This issue triggered quite some bug reports in the project [0] and there are backports to other package managers like vcpkg [1] and conan [2].

So, as buildroot is in this case also more or less acting like a package manager when generating the SDK I thought it makes sense to apply this patch here as well.

Regards,
Michael

[0] https://github.com/zaphoyd/websocketpp/pull/1060
[1] https://github.com/microsoft/vcpkg/pull/23669
[2] https://github.com/conan-io/conan-center-index/pull/15295

Quoted 8 lines

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

#3 lore raw
In reply to Michael Nosthoff via buildroot

Hello Michael,

Quoted 11 lines · On Fri, 3 Nov 2023 12:16:12 +0100 Michael Nosthoff via buildroot…

websocketpp had some ill-formed usage of template parameters which was finally removed in C++20. Hence build fails when building with C++20 support enabled.

The patch is already in the develop branch but no new release was done.

---
 .../websocketpp/0001-fix_cpp20_build.patch    | 108 ++++++++++++++++++
 1 file changed, 108 insertions(+)
 create mode 100644 package/websocketpp/0001-fix_cpp20_build.patch

Thanks a lot, I have extended the commit log with the very useful details you provided as a reply to my question, and applied to master. Thanks!

Thomas

Signature · 7 lines
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#4 lore raw
Quoted 18 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Thomas" == Thomas Petazzoni via buildroot <[email protected]> writes:

Hello Michael,

Quoted 11 lines · On Fri, 3 Nov 2023 12:16:12 +0100 Michael Nosthoff via buildroot…

websocketpp had some ill-formed usage of template parameters which was finally removed in C++20. Hence build fails when building with C++20 support enabled.

The patch is already in the develop branch but no new release was done.

---
.../websocketpp/0001-fix_cpp20_build.patch | 108 ++++++++++++++++++

1 file changed, 108 insertions(+)

create mode 100644 package/websocketpp/0001-fix_cpp20_build.patch

Quoted 3 lines

Thanks a lot, I have extended the commit log with the very useful details you provided as a reply to my question, and applied to master. Thanks!

Committed to 2023.02.x and 2023.08.x, thanks.

Signature · 5 lines
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot