buildroot.busybox.net archive mirror
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/1] package/libsigrok: fix C++ build with glibmm 2.68
@ 2022-01-08 23:02 Fabrice Fontaine
  2022-01-09 22:46 ` Arnout Vandecappelle
  0 siblings, 1 reply; 2+ messages in thread
From: Fabrice Fontaine @ 2022-01-08 23:02 UTC (permalink / raw)
  To: buildroot; +Cc: Bartosz Golaszewski, Fabrice Fontaine

cxx bindings are, silently, disabled since bump of glibmm to version
2.68.2 in commit dddb65efbdf2c7952f22a1e51009f17f1676db4a resulting in
the following build failure with pulseview:

--   Package 'libsigrokcxx', required by 'virtual:world', not found

Fixes:
 - http://autobuild.buildroot.org/results/ebb73892fd7471de4f0c109554dfdc65b93d3dcf

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 .../libsigrok/0001-Support-glibmm-2.68.patch  | 129 ++++++++++++++++++
 package/libsigrok/libsigrok.mk                |   3 +
 2 files changed, 132 insertions(+)
 create mode 100644 package/libsigrok/0001-Support-glibmm-2.68.patch

diff --git a/package/libsigrok/0001-Support-glibmm-2.68.patch b/package/libsigrok/0001-Support-glibmm-2.68.patch
new file mode 100644
index 0000000000..14d14ec406
--- /dev/null
+++ b/package/libsigrok/0001-Support-glibmm-2.68.patch
@@ -0,0 +1,129 @@
+From 31ad5ec50ec0c9cc7a92f009925c5f58aecdcce1 Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Thu, 30 Dec 2021 14:58:11 +0100
+Subject: [PATCH] Support glibmm 2.68
+
+Support glibmm 2.68 which has been released one year ago and is the
+first stable release in the glibmm-2.68 ABI series:
+https://gitlab.gnome.org/GNOME/glibmm/-/blob/2.68.2/NEWS
+
+As TimeVal is not available with glibmm 2.68, use DateTime which is
+available since version 2.26
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+[Upstream status:
+https://sourceforge.net/p/sigrok/mailman/message/37410614]
+---
+ README                                             |  2 +-
+ bindings/cxx/classes.cpp                           | 13 ++++++-------
+ bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp |  4 ++--
+ bindings/cxx/libsigrokcxx.pc.in                    |  2 +-
+ configure.ac                                       |  7 ++++++-
+ 5 files changed, 16 insertions(+), 12 deletions(-)
+
+diff --git a/README b/README
+index 768c8ca2..2515f059 100644
+--- a/README
++++ b/README
+@@ -63,7 +63,7 @@ Requirements for the C++ bindings:
+  - doxygen (required for building the bindings, not only for C++ API docs!)
+  - graphviz (optional, only needed for the C++ API docs)
+  - Python (2 or 3) executable (development files are not needed)
+- - glibmm-2.4 (>= 2.32.0)
++ - glibmm-2.4 (>= 2.32.0) or glibmm-2.68 (>= 2.68.0)
+ 
+ Requirements for the Python bindings:
+ 
+diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp
+index f9f79273..de600d03 100644
+--- a/bindings/cxx/classes.cpp
++++ b/bindings/cxx/classes.cpp
+@@ -287,12 +287,12 @@ shared_ptr<UserDevice> Context::create_user_device(
+ 		default_delete<UserDevice>{}};
+ }
+ 
+-shared_ptr<Packet> Context::create_header_packet(Glib::TimeVal start_time)
++shared_ptr<Packet> Context::create_header_packet(Glib::DateTime start_time)
+ {
+ 	auto header = g_new(struct sr_datafeed_header, 1);
+ 	header->feed_version = 1;
+-	header->starttime.tv_sec = start_time.tv_sec;
+-	header->starttime.tv_usec = start_time.tv_usec;
++	header->starttime.tv_sec = start_time.to_unix();
++	header->starttime.tv_usec = start_time.get_microsecond();
+ 	auto packet = g_new(struct sr_datafeed_packet, 1);
+ 	packet->type = SR_DF_HEADER;
+ 	packet->payload = header;
+@@ -1154,11 +1154,10 @@ int Header::feed_version() const
+ 	return _structure->feed_version;
+ }
+ 
+-Glib::TimeVal Header::start_time() const
++Glib::DateTime Header::start_time() const
+ {
+-	return Glib::TimeVal(
+-		_structure->starttime.tv_sec,
+-		_structure->starttime.tv_usec);
++	Glib::DateTime time = Glib::DateTime::create_now_utc(_structure->starttime.tv_sec);
++	return time.add_seconds(_structure->starttime.tv_usec / 1.0e6);
+ }
+ 
+ Meta::Meta(const struct sr_datafeed_meta *structure) :
+diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
+index 97e54e17..d090c379 100644
+--- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
++++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
+@@ -274,7 +274,7 @@ public:
+ 	std::shared_ptr<UserDevice> create_user_device(
+ 		std::string vendor, std::string model, std::string version);
+ 	/** Create a header packet. */
+-	std::shared_ptr<Packet> create_header_packet(Glib::TimeVal start_time);
++	std::shared_ptr<Packet> create_header_packet(Glib::DateTime start_time);
+ 	/** Create a meta packet. */
+ 	std::shared_ptr<Packet> create_meta_packet(
+ 		std::map<const ConfigKey *, Glib::VariantBase> config);
+@@ -711,7 +711,7 @@ public:
+ 	/* Feed version number. */
+ 	int feed_version() const;
+ 	/* Start time of this session. */
+-	Glib::TimeVal start_time() const;
++	Glib::DateTime start_time() const;
+ private:
+ 	explicit Header(const struct sr_datafeed_header *structure);
+ 	~Header();
+diff --git a/bindings/cxx/libsigrokcxx.pc.in b/bindings/cxx/libsigrokcxx.pc.in
+index 10a92f2d..7d2723fc 100644
+--- a/bindings/cxx/libsigrokcxx.pc.in
++++ b/bindings/cxx/libsigrokcxx.pc.in
+@@ -6,7 +6,7 @@ includedir=@includedir@
+ Name: libsigrokcxx
+ Description: C++ bindings for libsigrok
+ URL: http://www.sigrok.org
+-Requires: libsigrok glibmm-2.4
++Requires: libsigrok @SR_GLIBMM_REQUIRES@
+ Version: @SR_PACKAGE_VERSION@
+ Libs: -L${libdir} -lsigrokcxx
+ Libs.private: -lm
+diff --git a/configure.ac b/configure.ac
+index 424b0002..d70575b7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -407,9 +407,14 @@ AS_IF([test "x$HAVE_CXX11" != x1],
+ 	[SR_APPEND([sr_cxx_missing], [', '], ['C++11'])])
+ 
+ # The C++ bindings need glibmm.
+-SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [glibmm-2.4 >= 2.32.0])
++SR_GLIBMM_REQUIRES=glibmm-2.4
++SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [$SR_GLIBMM_REQUIRES >= 2.32.0])
++AS_IF([test "x$sr_have_glibmm" != xyes],
++	[SR_GLIBMM_REQUIRES=glibmm-2.68
++	SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [$SR_GLIBMM_REQUIRES >= 2.68.0])])
+ AS_IF([test "x$sr_have_glibmm" != xyes],
+ 	[SR_APPEND([sr_cxx_missing], [', '], [glibmm])])
++AC_SUBST(SR_GLIBMM_REQUIRES)
+ 
+ # The C++ bindings use Doxygen to parse libsigrok symbols.
+ AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no])
+-- 
+2.34.1
+
diff --git a/package/libsigrok/libsigrok.mk b/package/libsigrok/libsigrok.mk
index 8e7c355fd0..2a26518614 100644
--- a/package/libsigrok/libsigrok.mk
+++ b/package/libsigrok/libsigrok.mk
@@ -11,6 +11,8 @@ LIBSIGROK_LICENSE_FILES = COPYING
 LIBSIGROK_INSTALL_STAGING = YES
 LIBSIGROK_DEPENDENCIES = libglib2 libzip host-pkgconf
 LIBSIGROK_CONF_OPTS = --disable-java --disable-python
+# We're patching configure.ac
+LIBSIGROK_AUTORECONF = YES
 
 ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y)
 LIBSIGROK_CONF_OPTS += --with-libbluez
@@ -52,6 +54,7 @@ LIBSIGROK_DEPENDENCIES += glibmm
 endif
 
 ifeq ($(BR2_PACKAGE_LIBSIGROKCXX),y)
+LIBSIGROK_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++17"
 LIBSIGROK_CONF_OPTS += --enable-cxx
 # host-doxygen is used by C++ bindings to parse libsigrok symbols
 LIBSIGROK_DEPENDENCIES += \
-- 
2.34.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [Buildroot] [PATCH 1/1] package/libsigrok: fix C++ build with glibmm 2.68
  2022-01-08 23:02 [Buildroot] [PATCH 1/1] package/libsigrok: fix C++ build with glibmm 2.68 Fabrice Fontaine
@ 2022-01-09 22:46 ` Arnout Vandecappelle
  0 siblings, 0 replies; 2+ messages in thread
From: Arnout Vandecappelle @ 2022-01-09 22:46 UTC (permalink / raw)
  To: Fabrice Fontaine, buildroot; +Cc: Bartosz Golaszewski



On 09/01/2022 00:02, Fabrice Fontaine wrote:
> cxx bindings are, silently, disabled since bump of glibmm to version
> 2.68.2 in commit dddb65efbdf2c7952f22a1e51009f17f1676db4a resulting in
> the following build failure with pulseview:
> 
> --   Package 'libsigrokcxx', required by 'virtual:world', not found
> 
> Fixes:
>   - http://autobuild.buildroot.org/results/ebb73892fd7471de4f0c109554dfdc65b93d3dcf
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

  Applied to master, thanks.

  Regards,
  Arnout

> ---
>   .../libsigrok/0001-Support-glibmm-2.68.patch  | 129 ++++++++++++++++++
>   package/libsigrok/libsigrok.mk                |   3 +
>   2 files changed, 132 insertions(+)
>   create mode 100644 package/libsigrok/0001-Support-glibmm-2.68.patch
> 
> diff --git a/package/libsigrok/0001-Support-glibmm-2.68.patch b/package/libsigrok/0001-Support-glibmm-2.68.patch
> new file mode 100644
> index 0000000000..14d14ec406
> --- /dev/null
> +++ b/package/libsigrok/0001-Support-glibmm-2.68.patch
> @@ -0,0 +1,129 @@
> +From 31ad5ec50ec0c9cc7a92f009925c5f58aecdcce1 Mon Sep 17 00:00:00 2001
> +From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> +Date: Thu, 30 Dec 2021 14:58:11 +0100
> +Subject: [PATCH] Support glibmm 2.68
> +
> +Support glibmm 2.68 which has been released one year ago and is the
> +first stable release in the glibmm-2.68 ABI series:
> +https://gitlab.gnome.org/GNOME/glibmm/-/blob/2.68.2/NEWS
> +
> +As TimeVal is not available with glibmm 2.68, use DateTime which is
> +available since version 2.26
> +
> +Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> +[Upstream status:
> +https://sourceforge.net/p/sigrok/mailman/message/37410614]
> +---
> + README                                             |  2 +-
> + bindings/cxx/classes.cpp                           | 13 ++++++-------
> + bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp |  4 ++--
> + bindings/cxx/libsigrokcxx.pc.in                    |  2 +-
> + configure.ac                                       |  7 ++++++-
> + 5 files changed, 16 insertions(+), 12 deletions(-)
> +
> +diff --git a/README b/README
> +index 768c8ca2..2515f059 100644
> +--- a/README
> ++++ b/README
> +@@ -63,7 +63,7 @@ Requirements for the C++ bindings:
> +  - doxygen (required for building the bindings, not only for C++ API docs!)
> +  - graphviz (optional, only needed for the C++ API docs)
> +  - Python (2 or 3) executable (development files are not needed)
> +- - glibmm-2.4 (>= 2.32.0)
> ++ - glibmm-2.4 (>= 2.32.0) or glibmm-2.68 (>= 2.68.0)
> +
> + Requirements for the Python bindings:
> +
> +diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp
> +index f9f79273..de600d03 100644
> +--- a/bindings/cxx/classes.cpp
> ++++ b/bindings/cxx/classes.cpp
> +@@ -287,12 +287,12 @@ shared_ptr<UserDevice> Context::create_user_device(
> + 		default_delete<UserDevice>{}};
> + }
> +
> +-shared_ptr<Packet> Context::create_header_packet(Glib::TimeVal start_time)
> ++shared_ptr<Packet> Context::create_header_packet(Glib::DateTime start_time)
> + {
> + 	auto header = g_new(struct sr_datafeed_header, 1);
> + 	header->feed_version = 1;
> +-	header->starttime.tv_sec = start_time.tv_sec;
> +-	header->starttime.tv_usec = start_time.tv_usec;
> ++	header->starttime.tv_sec = start_time.to_unix();
> ++	header->starttime.tv_usec = start_time.get_microsecond();
> + 	auto packet = g_new(struct sr_datafeed_packet, 1);
> + 	packet->type = SR_DF_HEADER;
> + 	packet->payload = header;
> +@@ -1154,11 +1154,10 @@ int Header::feed_version() const
> + 	return _structure->feed_version;
> + }
> +
> +-Glib::TimeVal Header::start_time() const
> ++Glib::DateTime Header::start_time() const
> + {
> +-	return Glib::TimeVal(
> +-		_structure->starttime.tv_sec,
> +-		_structure->starttime.tv_usec);
> ++	Glib::DateTime time = Glib::DateTime::create_now_utc(_structure->starttime.tv_sec);
> ++	return time.add_seconds(_structure->starttime.tv_usec / 1.0e6);
> + }
> +
> + Meta::Meta(const struct sr_datafeed_meta *structure) :
> +diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
> +index 97e54e17..d090c379 100644
> +--- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
> ++++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
> +@@ -274,7 +274,7 @@ public:
> + 	std::shared_ptr<UserDevice> create_user_device(
> + 		std::string vendor, std::string model, std::string version);
> + 	/** Create a header packet. */
> +-	std::shared_ptr<Packet> create_header_packet(Glib::TimeVal start_time);
> ++	std::shared_ptr<Packet> create_header_packet(Glib::DateTime start_time);
> + 	/** Create a meta packet. */
> + 	std::shared_ptr<Packet> create_meta_packet(
> + 		std::map<const ConfigKey *, Glib::VariantBase> config);
> +@@ -711,7 +711,7 @@ public:
> + 	/* Feed version number. */
> + 	int feed_version() const;
> + 	/* Start time of this session. */
> +-	Glib::TimeVal start_time() const;
> ++	Glib::DateTime start_time() const;
> + private:
> + 	explicit Header(const struct sr_datafeed_header *structure);
> + 	~Header();
> +diff --git a/bindings/cxx/libsigrokcxx.pc.in b/bindings/cxx/libsigrokcxx.pc.in
> +index 10a92f2d..7d2723fc 100644
> +--- a/bindings/cxx/libsigrokcxx.pc.in
> ++++ b/bindings/cxx/libsigrokcxx.pc.in
> +@@ -6,7 +6,7 @@ includedir=@includedir@
> + Name: libsigrokcxx
> + Description: C++ bindings for libsigrok
> + URL: http://www.sigrok.org
> +-Requires: libsigrok glibmm-2.4
> ++Requires: libsigrok @SR_GLIBMM_REQUIRES@
> + Version: @SR_PACKAGE_VERSION@
> + Libs: -L${libdir} -lsigrokcxx
> + Libs.private: -lm
> +diff --git a/configure.ac b/configure.ac
> +index 424b0002..d70575b7 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -407,9 +407,14 @@ AS_IF([test "x$HAVE_CXX11" != x1],
> + 	[SR_APPEND([sr_cxx_missing], [', '], ['C++11'])])
> +
> + # The C++ bindings need glibmm.
> +-SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [glibmm-2.4 >= 2.32.0])
> ++SR_GLIBMM_REQUIRES=glibmm-2.4
> ++SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [$SR_GLIBMM_REQUIRES >= 2.32.0])
> ++AS_IF([test "x$sr_have_glibmm" != xyes],
> ++	[SR_GLIBMM_REQUIRES=glibmm-2.68
> ++	SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [$SR_GLIBMM_REQUIRES >= 2.68.0])])
> + AS_IF([test "x$sr_have_glibmm" != xyes],
> + 	[SR_APPEND([sr_cxx_missing], [', '], [glibmm])])
> ++AC_SUBST(SR_GLIBMM_REQUIRES)
> +
> + # The C++ bindings use Doxygen to parse libsigrok symbols.
> + AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no])
> +--
> +2.34.1
> +
> diff --git a/package/libsigrok/libsigrok.mk b/package/libsigrok/libsigrok.mk
> index 8e7c355fd0..2a26518614 100644
> --- a/package/libsigrok/libsigrok.mk
> +++ b/package/libsigrok/libsigrok.mk
> @@ -11,6 +11,8 @@ LIBSIGROK_LICENSE_FILES = COPYING
>   LIBSIGROK_INSTALL_STAGING = YES
>   LIBSIGROK_DEPENDENCIES = libglib2 libzip host-pkgconf
>   LIBSIGROK_CONF_OPTS = --disable-java --disable-python
> +# We're patching configure.ac
> +LIBSIGROK_AUTORECONF = YES
>   
>   ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y)
>   LIBSIGROK_CONF_OPTS += --with-libbluez
> @@ -52,6 +54,7 @@ LIBSIGROK_DEPENDENCIES += glibmm
>   endif
>   
>   ifeq ($(BR2_PACKAGE_LIBSIGROKCXX),y)
> +LIBSIGROK_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++17"
>   LIBSIGROK_CONF_OPTS += --enable-cxx
>   # host-doxygen is used by C++ bindings to parse libsigrok symbols
>   LIBSIGROK_DEPENDENCIES += \
> 
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-01-09 22:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-08 23:02 [Buildroot] [PATCH 1/1] package/libsigrok: fix C++ build with glibmm 2.68 Fabrice Fontaine
2022-01-09 22:46 ` Arnout Vandecappelle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).