ros-naoqi/libqi-release

Libqi-2.5 fails to work with boost 1.54

Closed this issue · 16 comments

Bringing back here the issue concerning libqi and naoqi_driver compilation (ros-naoqi/naoqi_driver#66).

The issue is the following:

Boost uses scoped_enums, a C++11 feature. If boost is compiled with -std=c++0x, then those scoped_enums are used in some functions, like boost::filesystem::detail::copy_file for instance. In case c++11 is not available, scoped_enums are emulated by nested namespaces. This behavior (actual scoped_enums or emulated ones) is hidden behind a macro: BOOST_SCOPED_ENUMS.

Everything is fine as long as boost and the program using it are compiled the same way (with or without C++11). When they are not, functions in header and in libraries do not have the same signature, leading to linkage errors. This issue was reported in those tickets and solved in boost 1.57:
https://svn.boost.org/trac/boost/ticket/6124
https://svn.boost.org/trac/boost/ticket/6779
https://svn.boost.org/trac/boost/ticket/10038

Libqi 2.3 is compiled without c++11, and supports boost lower than 1.56. Libqi 2.5, is compiled with c++11 (and cannot be compiled without it), and supports boost up to version 1.59.

Trusty, Utopic and Vivid use boost 1.54 or 1.55, Wily uses boost 1.58 (http://packages.ubuntu.com/trusty/libboost-all-dev).

Indigo is supposed to support Saucy and Trusty, with C++03 and boost 1.53.
Jade must support Trusty, Utopic and Vivid, C++03 and C++11, and boost 1.54.

There is a small fix that can be added in libqi that may fix this issue. It forces boost to use non-C++11 API if boost is under version 1.57. This will cover most cases (as boost lower than 1.56 is compiled without C++11 AFAIK in ubuntu packages). But this could cause problems if one has on his machine a boost package prior than 1.57 and compiled with c++11 support.

Therefore I propose:

  • For indigo, to use libqi 2.3 to avoid any source of troubles. This will work as before.
  • For jade, either to use libqi-2.3 as well, meaning that people with a version of boost newer than 1.56 will not be able to use libqi, or to use libqi 2.5 with this small fix I mentioned, hoping it won't affect people using trusty, utopic or vivid with the standard boost package.

@vrabaud @severin-lemaignan @mikaelarguedas @k-okada
Your thoughts and advice would be strongly appreciated :)

I'm not sure about difference between libqi-2.3 and libqi-2.5, if libqi-2.5 has fixed significant problem on libqi-2.3 and you strongly advised to use them immediately, we'll prefer to use libqi-2.3 for indigo and libqi-2.5 for jade, if not I think

  • libqi 2.3 for indigo and jade
  • libqi 2.5 for kinetic

would be ok.

I think kinetic is designed for long time support series, so supporting newer version of libqi from kinetic make scene.
http://www.ros.org/reps/rep-0003.html#kinetic-kame-may-2016-may-2021

does this mean we have to maintain two different upstream branches and their respective ros releases?
Effectively, we should find any solution for this since the build farm complains too much for my email inbox :)

I am not sure we need two upstream branches. Just setting different tags in the distro/tracks.yaml and in rosdistro should do the trick right ?

I think having an indigo-devel branch used for indigo/jade release and a master/kinetic-devel branch would be cleaner.
Regarding the buildfarm emails, would it make sense to transfer maintainership to @suryaambrose so that he can receive the emails and release accordingly ?

All right let's go for two upstream branches then.
Libqi 2.3 for indigo/jade packages
Libqi 2.5 for (future) kinetic package

If you want to keep track of the build attempts for this package and you don't receive automatic emails from the buildfarm you can find it here: http://build.ros.org/job/Ibin_uT64__naoqi_driver__ubuntu_trusty_amd64__binary/
Cheers

@suryaambrose Would you be ok to give a try releasing this into kinetic to allow us to find/fix any problem before the official release ?
Thanks!

I'm now running on Kinetic, and I'd love to give a hand testing the Nao stack there!

Hi !

Ok I'll try to take time to release on Kinetic this week-end or next week. When is the official release already ?

All right, libqi is almost released in kinetic.
ros/rosdistro#11527

Once this passed, I'll release naoqi_driver as well

Great thanks!

Cool! I'll test that as soon as it is released. Thanks!

Done !
naoqi_driver was released yesterday and compiled fine on wily and xenial. There was still a boost linkage error on debian jessie, as it is shipped with boost 1.55, but I fixed it this morning and it seems to be working now.
Packages should I guess be available soon if not already !
Have fun guys !!

Thanks! Yeah packages are available on shadow-fixed repos. Should be available in main repo soon.

Great! Well done!