Bug 517 - Windows: (C++) bindings cause build issues for frontends
Summary: Windows: (C++) bindings cause build issues for frontends
Status: RESOLVED FIXED
Alias: None
Product: libsigrok
Classification: Unclassified
Component: Bindings: C++ (show other bugs)
Version: unreleased development snapshot
Hardware: All Windows
: Normal critical
Target Milestone: ---
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-12-06 22:41 CET by Uwe Hermann
Modified: 2015-02-27 11:40 CET (History)
2 users (show)



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Uwe Hermann 2014-12-06 22:41:35 CET
There seem to be some build errors when using the C++ bindings, at least on some recent versions of MinGW headers and/or Boost headers (happens when building PulseView).

This is probably related to the following defines being in MinGW headers (and in enums.hpp):

i686-w64-mingw32.static/include/winuser.h:#define DIFFERENCE 11
i686-w64-mingw32.static/include/wingdi.h:#define RELATIVE 2

This may not have been exposed until recently (building PulseView used to work on MinGW), my guess is that boost (1.57 here) now includes the above MinGW headers (but didn't do so before)?


Log:

[...]/usr/bin/i686-w64-mingw32.static-g++   -DBOOST_THREAD_USE_LIB -DENABLE_DECODE -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_STATICPLUGIN -DQT_SVG_LIB -D__STDC_LIMIT_MACROS -O3 -DNDEBUG @CMakeFiles/pulseview.dir/includes_CXX.rsp   -Wall -Wextra -std=c++11 -o CMakeFiles/pulseview.dir/main.cpp.obj -c [...]/pulseview/main.cpp
Building CXX object CMakeFiles/pulseview.dir/pv/devicemanager.cpp.obj
[...]/usr/bin/i686-w64-mingw32.static-g++   -DBOOST_THREAD_USE_LIB -DENABLE_DECODE -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_STATICPLUGIN -DQT_SVG_LIB -D__STDC_LIMIT_MACROS -O3 -DNDEBUG @CMakeFiles/pulseview.dir/includes_CXX.rsp   -Wall -Wextra -std=c++11 -o CMakeFiles/pulseview.dir/pv/devicemanager.cpp.obj -c [...]/pulseview/pv/devicemanager.cpp
/usr/bin/cmake -E cmake_progress_report [...]/pulseview/CMakeFiles 32
[ 32%] Building CXX object CMakeFiles/pulseview.dir/pv/session.cpp.obj
[...]/usr/bin/i686-w64-mingw32.static-g++   -DBOOST_THREAD_USE_LIB -DENABLE_DECODE -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_STATICPLUGIN -DQT_SVG_LIB -D__STDC_LIMIT_MACROS -O3 -DNDEBUG @CMakeFiles/pulseview.dir/includes_CXX.rsp   -Wall -Wextra -std=c++11 -o CMakeFiles/pulseview.dir/pv/session.cpp.obj -c [...]/pulseview/pv/session.cpp
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:72:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/devicemanager.cpp:22:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:32: error: expected unqualified-id before numeric constant
  static const Quantity * const DIFFERENCE;
                                ^
In file included from /home/uwe/sr_mingw_qt5/include/libsigrok/libsigrok.hpp:1023:0,
                 from [...]/pulseview/pv/devicemanager.cpp:30:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:26: error: expected ';' at end of member declaration
  static const Quantity * const DIFFERENCE;
                          ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:72:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/devicemanager.cpp:22:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:32: error: expected unqualified-id before numeric constant
  static const Quantity * const DIFFERENCE;
                                ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:71:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/devicemanager.cpp:22:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:36: error: expected unqualified-id before numeric constant
  static const QuantityFlag * const RELATIVE;
                                    ^
In file included from /home/uwe/sr_mingw_qt5/include/libsigrok/libsigrok.hpp:1023:0,
                 from [...]/pulseview/pv/devicemanager.cpp:30:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:30: error: expected ';' at end of member declaration
  static const QuantityFlag * const RELATIVE;
                              ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:71:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/devicemanager.cpp:22:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:36: error: expected unqualified-id before numeric constant
  static const QuantityFlag * const RELATIVE;
                                    ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:72:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/mainwindow.hpp:29,
                 from [...]/pulseview/pv/mainwindow.cpp:43:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:32: error: expected unqualified-id before numeric constant
  static const Quantity * const DIFFERENCE;
                                ^
In file included from /home/uwe/sr_mingw_qt5/include/libsigrok/libsigrok.hpp:1023:0,
                 from [...]/pulseview/pv/mainwindow.cpp:60:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:26: error: expected ';' at end of member declaration
  static const Quantity * const DIFFERENCE;
                          ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:72:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/mainwindow.hpp:29,
                 from [...]/pulseview/pv/mainwindow.cpp:43:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:32: error: expected unqualified-id before numeric constant
  static const Quantity * const DIFFERENCE;
                                ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:71:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/mainwindow.hpp:29,
                 from [...]/pulseview/pv/mainwindow.cpp:43:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:36: error: expected unqualified-id before numeric constant
  static const QuantityFlag * const RELATIVE;
                                    ^
In file included from /home/uwe/sr_mingw_qt5/include/libsigrok/libsigrok.hpp:1023:0,
                 from [...]/pulseview/pv/mainwindow.cpp:60:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:30: error: expected ';' at end of member declaration
  static const QuantityFlag * const RELATIVE;
                              ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:71:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/mainwindow.hpp:29,
                 from [...]/pulseview/pv/mainwindow.cpp:43:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:36: error: expected unqualified-id before numeric constant
  static const QuantityFlag * const RELATIVE;
                                    ^
CMakeFiles/pulseview.dir/build.make:365: recipe for target 'CMakeFiles/pulseview.dir/pv/mainwindow.cpp.obj' failed
make[2]: *** [CMakeFiles/pulseview.dir/pv/mainwindow.cpp.obj] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:72:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/session.cpp:25:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:32: error: expected unqualified-id before numeric constant
  static const Quantity * const DIFFERENCE;
                                ^
In file included from /home/uwe/sr_mingw_qt5/include/libsigrok/libsigrok.hpp:1023:0,
                 from [...]/pulseview/pv/session.cpp:48:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:26: error: expected ';' at end of member declaration
  static const Quantity * const DIFFERENCE;
                          ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:72:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/session.cpp:25:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:153:32: error: expected unqualified-id before numeric constant
  static const Quantity * const DIFFERENCE;
                                ^
CMakeFiles/pulseview.dir/build.make:341: recipe for target 'CMakeFiles/pulseview.dir/pv/devicemanager.cpp.obj' failed
make[2]: *** [CMakeFiles/pulseview.dir/pv/devicemanager.cpp.obj] Error 1
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:71:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/session.cpp:25:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:36: error: expected unqualified-id before numeric constant
  static const QuantityFlag * const RELATIVE;
                                    ^
In file included from /home/uwe/sr_mingw_qt5/include/libsigrok/libsigrok.hpp:1023:0,
                 from [...]/pulseview/pv/session.cpp:48:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:30: error: expected ';' at end of member declaration
  static const QuantityFlag * const RELATIVE;
                              ^
In file included from [...]/usr/i686-w64-mingw32.static/include/windows.h:71:0,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/detail/interlocked.hpp:27,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_primitives.hpp:18,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/win32/thread_data.hpp:11,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread_only.hpp:15,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread/thread.hpp:12,
                 from [...]/usr/i686-w64-mingw32.static/include/boost/thread.hpp:13,
                 from [...]/pulseview/pv/session.hpp:32,
                 from [...]/pulseview/pv/session.cpp:25:
/home/uwe/sr_mingw_qt5/include/libsigrok/enums.hpp:299:36: error: expected unqualified-id before numeric constant
  static const QuantityFlag * const RELATIVE;
                                    ^
CMakeFiles/pulseview.dir/build.make:389: recipe for target 'CMakeFiles/pulseview.dir/pv/session.cpp.obj' failed
make[2]: *** [CMakeFiles/pulseview.dir/pv/session.cpp.obj] Error 1
make[2]: Leaving directory '[...]/pulseview'
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/pulseview.dir/all' failed
make[1]: *** [CMakeFiles/pulseview.dir/all] Error 2
make[1]: Leaving directory '[...]/pulseview'
Makefile:137: recipe for target 'all' failed
make: *** [all] Error 2
Comment 1 Martin Ling 2015-02-10 14:16:51 CET
You can apparently #define NOGDI to avoid this crap, at least with some versions of the headers.
Comment 2 Uwe Hermann 2015-02-27 11:40:47 CET
Fixed in 627ffe3f3a5d0a8f38e35668bd4ed71321f09b91 by a (slightly modified) patch from here:

http://article.gmane.org/gmane.comp.debugging.sigrok.devel/1545

Apparently both NOGDI and NORESOURCE are needed to fix the build (for now at least).

There are various other macros which allow control over how much windows.h shall pollute the namespace:

https://stackoverflow.com/questions/1394910/how-to-tame-the-windows-headers-useful-defines/1394929#1394929

A quick test with WIN32_LEAN_AND_MEAN didn't seem to work for me, but using NOGDI and NORESOURCE does.

I think it may be worth reporting this as a Boost bug, ideally their thread.hpp would not include windows.h at all, and/or use one or more of the special macros to limit the amount of namespace pollution that thread.hpp forces onto its users on Windows (via windows.h).