Bug 548 - Pulseview requires glibmm >= 2.36.0
Summary: Pulseview requires glibmm >= 2.36.0
Status: RESOLVED FIXED
Alias: None
Product: PulseView
Classification: Unclassified
Component: Build system (show other bugs)
Version: unreleased development snapshot
Hardware: All All
: Normal normal
Target Milestone: ---
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-01-27 18:12 CET by Ivan Veloz
Modified: 2015-01-31 12:46 CET (History)
1 user (show)



Attachments
Patch for the INSTALL file, fixing the outdated version requirement (1.47 KB, application/octet-stream)
2015-01-27 18:12 CET, Ivan Veloz
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan Veloz 2015-01-27 18:12:21 CET
Created attachment 114 [details]
Patch for the INSTALL file, fixing the outdated version requirement

Upon building pulseview on a system with glibmm version 2.32.1 (which is above the current requirement of having libglib 2.28.0, which implies a version of glibmm at least as low as 2.28.0), I get a build error:

@raspberrypi ~/sigrok/pulseview27-jan-15/pulseview $ make
[  1%] Generating qrc_pulseview.cxx
[  1%] Generating pv/moc_mainwindow.cxx
[  2%] Generating pv/moc_session.cxx
[  2%] Generating pv/moc_storesession.cxx
[  3%] Generating pv/dialogs/moc_about.cxx
[  4%] Generating pv/dialogs/moc_connect.cxx
[  4%] Generating pv/dialogs/moc_storeprogress.cxx
[  5%] Generating pv/popups/moc_channels.cxx
[  6%] Generating pv/popups/moc_deviceoptions.cxx
[  6%] Generating pv/prop/moc_bool.cxx
[  7%] Generating pv/prop/moc_double.cxx
[  7%] Generating pv/prop/moc_enum.cxx
[  8%] Generating pv/prop/moc_int.cxx
[  9%] Generating pv/prop/moc_property.cxx
[  9%] Generating pv/prop/moc_string.cxx
[ 10%] Generating pv/prop/binding/moc_deviceoptions.cxx
[ 11%] Generating pv/toolbars/moc_mainbar.cxx
[ 11%] Generating pv/view/moc_cursor.cxx
[ 12%] Generating pv/view/moc_flag.cxx
[ 12%] Generating pv/view/moc_header.cxx
[ 13%] Generating pv/view/moc_logicsignal.cxx
[ 14%] Generating pv/view/moc_marginwidget.cxx
[ 14%] Generating pv/view/moc_rowitem.cxx
[ 15%] Generating pv/view/moc_ruler.cxx
[ 16%] Generating pv/view/moc_signal.cxx
[ 16%] Generating pv/view/moc_timeitem.cxx
[ 17%] Generating pv/view/moc_timemarker.cxx
[ 17%] Generating pv/view/moc_trace.cxx
[ 18%] Generating pv/view/moc_tracegroup.cxx
[ 19%] Generating pv/view/moc_view.cxx
[ 19%] Generating pv/view/moc_viewitem.cxx
[ 20%] Generating pv/view/moc_viewport.cxx
[ 21%] Generating pv/view/moc_viewwidget.cxx
[ 21%] Generating pv/widgets/moc_colourbutton.cxx
[ 22%] Generating pv/widgets/moc_colourpopup.cxx
[ 23%] Generating pv/widgets/moc_devicetoolbutton.cxx
[ 23%] Generating pv/widgets/moc_hidingmenubar.cxx
[ 24%] Generating pv/widgets/moc_popup.cxx
[ 24%] Generating pv/widgets/moc_popuptoolbutton.cxx
[ 25%] Generating pv/widgets/moc_sweeptimingwidget.cxx
[ 26%] Generating pv/widgets/moc_wellarray.cxx
[ 26%] Generating moc_signalhandler.cxx
[ 27%] Generating pv/data/moc_decoderstack.cxx
[ 28%] Generating pv/view/moc_decodetrace.cxx
[ 28%] Generating pv/widgets/moc_decodergroupbox.cxx
[ 29%] Generating pv/widgets/moc_decodermenu.cxx
[ 29%] Generating ui_about.h
Scanning dependencies of target pulseview
[ 30%] Building CXX object CMakeFiles/pulseview.dir/main.cpp.o
[ 30%] Building CXX object CMakeFiles/pulseview.dir/pv/application.cpp.o
[ 31%] Building CXX object CMakeFiles/pulseview.dir/pv/devicemanager.cpp.o
[ 32%] Building CXX object CMakeFiles/pulseview.dir/pv/mainwindow.cpp.o
[ 32%] Building CXX object CMakeFiles/pulseview.dir/pv/session.cpp.o
[ 33%] Building CXX object CMakeFiles/pulseview.dir/pv/storesession.cpp.o
[ 33%] Building CXX object CMakeFiles/pulseview.dir/pv/util.cpp.o
[ 34%] Building CXX object CMakeFiles/pulseview.dir/pv/data/analog.cpp.o
[ 35%] Building CXX object CMakeFiles/pulseview.dir/pv/data/analogsegment.cpp.o
[ 35%] Building CXX object CMakeFiles/pulseview.dir/pv/data/logic.cpp.o
[ 36%] Building CXX object CMakeFiles/pulseview.dir/pv/data/logicsegment.cpp.o
[ 37%] Building CXX object CMakeFiles/pulseview.dir/pv/data/signaldata.cpp.o
[ 37%] Building CXX object CMakeFiles/pulseview.dir/pv/data/segment.cpp.o
[ 38%] Building CXX object CMakeFiles/pulseview.dir/pv/dialogs/about.cpp.o
[ 38%] Building CXX object CMakeFiles/pulseview.dir/pv/dialogs/connect.cpp.o
[ 39%] Building CXX object CMakeFiles/pulseview.dir/pv/dialogs/storeprogress.cpp.o
[ 40%] Building CXX object CMakeFiles/pulseview.dir/pv/popups/deviceoptions.cpp.o
[ 40%] Building CXX object CMakeFiles/pulseview.dir/pv/popups/channels.cpp.o
[ 41%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/bool.cpp.o
[ 42%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/double.cpp.o
[ 42%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/enum.cpp.o
[ 43%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/int.cpp.o
[ 44%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/property.cpp.o
[ 44%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/string.cpp.o
[ 45%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/binding/binding.cpp.o
[ 45%] Building CXX object CMakeFiles/pulseview.dir/pv/prop/binding/deviceoptions.cpp.o
[ 46%] Building CXX object CMakeFiles/pulseview.dir/pv/toolbars/mainbar.cpp.o
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp: In member function ‘void pv::toolbars::MainBar::update_sample_rate_selector()’:
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp:228:6: error: no match for ‘operator!’ (operand type is ‘Glib::VariantContainerBase’)
  if (!gvar_dict) {
      ^
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp:228:6: note: candidate is:
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp:228:6: note: operator!(bool) <built-in>
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp:228:6: note:   no known conversion for argument 1 from ‘Glib::VariantContainerBase’ to ‘bool’
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp: In member function ‘void pv::toolbars::MainBar::update_sample_count_selector()’:
/home/pi/sigrok/pulseview27-jan-15/pulseview/pv/toolbars/mainbar.cpp:331:12: error: could not convert ‘gvar’ from ‘Glib::VariantContainerBase’ to ‘bool’
    if (gvar)
            ^
CMakeFiles/pulseview.dir/build.make:918: recipe for target 'CMakeFiles/pulseview.dir/pv/toolbars/mainbar.cpp.o' failed
make[2]: *** [CMakeFiles/pulseview.dir/pv/toolbars/mainbar.cpp.o] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/pulseview.dir/all' failed
make[1]: *** [CMakeFiles/pulseview.dir/all] Error 2
Makefile:133: recipe for target 'all' failed
make: *** [all] Error 2
pi@raspberrypi ~/sigrok/pulseview27-jan-15/pulseview $



Basically, this came down to a C++ object from the Glib library called Glib::VariantContainerBase. The code expects the object to return a bool that indicates (in this application) whether or not a sample rate was selected, something that only was implemented after version 2.36, according to Glib's documentation here:
https://developer.gnome.org/glibmm/stable/classGlib_1_1VariantBase.html#a5b02a861503f991df8af088aa63ee22b

So the proposed solution is to increase the minimum version requirement, something which I have done in the attached file.

For extra details, here is a list of the versions I had installed for every pulseview and libsigrok requirement:

pi@raspberrypi ~/sigrok/pulseview27-jan-15/pulseview $ apt-show-versions git-core g++ make cmake libtool pkg-config \
>   libglib2.0-dev libqt4-dev libboost-test-dev libboost-thread-dev\
>   libboost-filesystem-dev libboost-system-dev git-core gcc g++ make autoconf autoconf-archive \
>   automake libtool pkg-config libglib2.0-dev libglibmm-2.4-dev libzip-dev \
>   libusb-1.0-0-dev libftdi-dev check doxygen python-numpy\
>   python-dev python-gi-dev python-setuptools swig default-jdk
autoconf/wheezy uptodate 2.69-1
autoconf-archive/wheezy uptodate 20111221-2
automake/wheezy uptodate 1:1.11.6-1
check/wheezy uptodate 0.9.8-2
cmake/wheezy uptodate 2.8.9-1
default-jdk/wheezy uptodate 1:1.6-47
doxygen/wheezy uptodate 1.8.1.2-2
g++/wheezy uptodate 4:4.6.3-8
gcc/wheezy uptodate 4:4.6.3-8
git-core/wheezy uptodate 1:1.7.10.4-1+wheezy1+rpi2
libboost-filesystem-dev/jessie uptodate 1.55.0.2
libboost-system-dev/jessie uptodate 1.55.0.2
libboost-test-dev/jessie uptodate 1.55.0.2
libboost-thread-dev/jessie uptodate 1.55.0.2
libftdi-dev/wheezy uptodate 0.20-1
libglib2.0-dev/wheezy uptodate 2.40.0-3rpi3rpi1
libglibmm-2.4-dev/wheezy uptodate 2.32.1-1
libqt4-dev/wheezy uptodate 4:4.8.2+dfsg-11+rpi1
libtool/wheezy uptodate 2.4.2-1.1
libusb-1.0-0-dev/jessie uptodate 2:1.0.19-1
libzip-dev/wheezy uptodate 0.10.1-1.1
make/wheezy uptodate 4.0-7rpi2
pkg-config/wheezy uptodate 0.26-1
python-dev/wheezy uptodate 2.7.3-4+deb7u1
python-gi-dev/wheezy uptodate 3.8.2-1+rpi1rpi2
python-numpy/wheezy uptodate 1:1.6.2-1.2
python-setuptools/wheezy uptodate 0.6.24-1
swig/wheezy uptodate 2.0.7-3

Extra information, including the output of cmake . and sigrok-cli is available in the following URL:
http://pastebin.com/gAyAK7Jb
Comment 1 Uwe Hermann 2015-01-31 12:46:24 CET
Fixed in 0aff286e72c0fb99e2dfeed565a8f5470b2296f0, by using a workaround to avoid having to depend on a much more recent glibmm than we do now.

Tested on a Debian stable system (glibmm 2.32.1 and Boost 1.49).