1From 31ad5ec50ec0c9cc7a92f009925c5f58aecdcce1 Mon Sep 17 00:00:00 2001 2From: Fabrice Fontaine <fontaine.fabrice@gmail.com> 3Date: Thu, 30 Dec 2021 14:58:11 +0100 4Subject: [PATCH] Support glibmm 2.68 5 6Support glibmm 2.68 which has been released one year ago and is the 7first stable release in the glibmm-2.68 ABI series: 8https://gitlab.gnome.org/GNOME/glibmm/-/blob/2.68.2/NEWS 9 10As TimeVal is not available with glibmm 2.68, use DateTime which is 11available since version 2.26 12 13Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> 14[Upstream status: 15https://sourceforge.net/p/sigrok/mailman/message/37410614] 16--- 17 README | 2 +- 18 bindings/cxx/classes.cpp | 13 ++++++------- 19 bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp | 4 ++-- 20 bindings/cxx/libsigrokcxx.pc.in | 2 +- 21 configure.ac | 7 ++++++- 22 5 files changed, 16 insertions(+), 12 deletions(-) 23 24diff --git a/README b/README 25index 768c8ca2..2515f059 100644 26--- a/README 27+++ b/README 28@@ -63,7 +63,7 @@ Requirements for the C++ bindings: 29 - doxygen (required for building the bindings, not only for C++ API docs!) 30 - graphviz (optional, only needed for the C++ API docs) 31 - Python (2 or 3) executable (development files are not needed) 32- - glibmm-2.4 (>= 2.32.0) 33+ - glibmm-2.4 (>= 2.32.0) or glibmm-2.68 (>= 2.68.0) 34 35 Requirements for the Python bindings: 36 37diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp 38index f9f79273..de600d03 100644 39--- a/bindings/cxx/classes.cpp 40+++ b/bindings/cxx/classes.cpp 41@@ -287,12 +287,12 @@ shared_ptr<UserDevice> Context::create_user_device( 42 default_delete<UserDevice>{}}; 43 } 44 45-shared_ptr<Packet> Context::create_header_packet(Glib::TimeVal start_time) 46+shared_ptr<Packet> Context::create_header_packet(Glib::DateTime start_time) 47 { 48 auto header = g_new(struct sr_datafeed_header, 1); 49 header->feed_version = 1; 50- header->starttime.tv_sec = start_time.tv_sec; 51- header->starttime.tv_usec = start_time.tv_usec; 52+ header->starttime.tv_sec = start_time.to_unix(); 53+ header->starttime.tv_usec = start_time.get_microsecond(); 54 auto packet = g_new(struct sr_datafeed_packet, 1); 55 packet->type = SR_DF_HEADER; 56 packet->payload = header; 57@@ -1154,11 +1154,10 @@ int Header::feed_version() const 58 return _structure->feed_version; 59 } 60 61-Glib::TimeVal Header::start_time() const 62+Glib::DateTime Header::start_time() const 63 { 64- return Glib::TimeVal( 65- _structure->starttime.tv_sec, 66- _structure->starttime.tv_usec); 67+ Glib::DateTime time = Glib::DateTime::create_now_utc(_structure->starttime.tv_sec); 68+ return time.add_seconds(_structure->starttime.tv_usec / 1.0e6); 69 } 70 71 Meta::Meta(const struct sr_datafeed_meta *structure) : 72diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp 73index 97e54e17..d090c379 100644 74--- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp 75+++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp 76@@ -274,7 +274,7 @@ public: 77 std::shared_ptr<UserDevice> create_user_device( 78 std::string vendor, std::string model, std::string version); 79 /** Create a header packet. */ 80- std::shared_ptr<Packet> create_header_packet(Glib::TimeVal start_time); 81+ std::shared_ptr<Packet> create_header_packet(Glib::DateTime start_time); 82 /** Create a meta packet. */ 83 std::shared_ptr<Packet> create_meta_packet( 84 std::map<const ConfigKey *, Glib::VariantBase> config); 85@@ -711,7 +711,7 @@ public: 86 /* Feed version number. */ 87 int feed_version() const; 88 /* Start time of this session. */ 89- Glib::TimeVal start_time() const; 90+ Glib::DateTime start_time() const; 91 private: 92 explicit Header(const struct sr_datafeed_header *structure); 93 ~Header(); 94diff --git a/bindings/cxx/libsigrokcxx.pc.in b/bindings/cxx/libsigrokcxx.pc.in 95index 10a92f2d..7d2723fc 100644 96--- a/bindings/cxx/libsigrokcxx.pc.in 97+++ b/bindings/cxx/libsigrokcxx.pc.in 98@@ -6,7 +6,7 @@ includedir=@includedir@ 99 Name: libsigrokcxx 100 Description: C++ bindings for libsigrok 101 URL: http://www.sigrok.org 102-Requires: libsigrok glibmm-2.4 103+Requires: libsigrok @SR_GLIBMM_REQUIRES@ 104 Version: @SR_PACKAGE_VERSION@ 105 Libs: -L${libdir} -lsigrokcxx 106 Libs.private: -lm 107diff --git a/configure.ac b/configure.ac 108index 424b0002..d70575b7 100644 109--- a/configure.ac 110+++ b/configure.ac 111@@ -407,9 +407,14 @@ AS_IF([test "x$HAVE_CXX11" != x1], 112 [SR_APPEND([sr_cxx_missing], [', '], ['C++11'])]) 113 114 # The C++ bindings need glibmm. 115-SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [glibmm-2.4 >= 2.32.0]) 116+SR_GLIBMM_REQUIRES=glibmm-2.4 117+SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [$SR_GLIBMM_REQUIRES >= 2.32.0]) 118+AS_IF([test "x$sr_have_glibmm" != xyes], 119+ [SR_GLIBMM_REQUIRES=glibmm-2.68 120+ SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [$SR_GLIBMM_REQUIRES >= 2.68.0])]) 121 AS_IF([test "x$sr_have_glibmm" != xyes], 122 [SR_APPEND([sr_cxx_missing], [', '], [glibmm])]) 123+AC_SUBST(SR_GLIBMM_REQUIRES) 124 125 # The C++ bindings use Doxygen to parse libsigrok symbols. 126 AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no]) 127-- 1282.34.1 129 130