Would backporting that version to Xenial and Wily work for peoples’ use cases?
@damonkohler This would solve releasing into Kinetic. I’m hesitant to backport 1.11 all the way into the indigo targets as that’s a large version jump and I’m guessing that it’s not entirely compatible. I think that one of the approaches we talked about offline might be best for releasing into indigo. This would involve embedding a version of ceres into a ROS package in a way that hides the symbols and include directory so they don’t override/conflict with the system installation. (Possibly a static library and header files installed into a custom subdirectory.)
An additional aspect of releasing an updated libceres into Indigo is that I’m not entirely sure what packages are dependent on the libceres released into Indigo. I know our robot_calibration package is (and is released to debs), I think SWRI also has a package under ros-industrial, but I don’t think it is released into debs. It seems pretty late in the game to upgrade Indigo to 1.11 (there are at least 10 backwards incompatibility notes for 1.09, 1.10) (as an added difficulty, we no longer have support to build PPAs on Saucy, so we would end up with two different libceres, although AFAIK the saucy deb was not actually building for robot_calibration anyways due to a difference in the underlying packages).
I would be all in favor of pulling a working version of libceres into Kinetic, since it appears that Ubuntu folks have no interest in actually fixing their version of libceres in Xenial. This is currently a blocker for us getting actual robots onto Xenial/Kinetic
Would it be an idea to release a version of 1.11 (1.12?) that is namespaced? Something like libceres-1.12, with headers in include/ceres-1.12/ceres and libs accordingly? And add a rosdep key for it (libceres12-dev)?
That would leave the current deb untouched, packages depending on libceres-dev would still get 1.08 (in Trusty at least), but would make it possible to release packages (like the one in ROS-Industrial that @mikeferguson referred to) by explicitly depending on the newer version.
Difficulty would be getting that setup for the other distros that have a libceres-dev key in base.yaml (Fedora, Gentoo).
I don’t know about the backport, but in the meantime ceres-solver has become a Catkin package (perhaps because Google is using it in cartographer?): ceres-solver.
Oh sorry, I totally miss this warning. @tfoote just remember it to me and we launched our backport job to get the ceres-solver packages into Xenial. The first run was to port the 1.12 version into Xenial altough we can easily try to get the 1.11 version working if that fits better the plan.
I’ve been trying to work on this in the background, but it’s slow going. Xenial worked without patches. I ran into issues targeting the other platforms.
Current status of released packages of ceres:
Ubuntu: libceres-dev is now 1.11 on xenial and yakkety 1.12 in zesty and 1.13 artful
Debian: libceres-dev 1.12 on stretch and buster
Fedora: ceres-solver-devel 1.11 on 24 and 25, 1.12 on 26
ROS Lunar: all platforms have a recent enough version.
ROS Kinetic: now that Wily is EOL and Xenial has 1.11, the only blocker is the fact that ceres-solver is not avaiiable on Jessie
Starting with 1.12 the package starts to be close to valid.
On debian Stretch: the package in fine: all the files are installed and you can find package it and link against it without issue
On ubuntu Zesty: They ceres has not been rebuilt after a new build of eigen so cmake fails throwing:
Failed to find Ceres - Found Eigen dependency, but the version of Eigen
found (3.3.2) does not exactly match the version of Eigen Ceres was
compiled with (3.3.0).
This would be great to have. Attempting to backport onto Jessie runs into unresolved dependencies. If someone has time to look into these dependency versions as see which ones can be relaxed to support a backport to Jessie that would be great. But it’s quite possible that the requirements don’t match on Jessie for either 1.11 or 1.12 which would explain why it’s not already bundled.
As an example here’s where the backporting stops when attempting to run for Jessie.
dpkg-deb: building package `ceres-solver-build-deps' in `../ceres-solver-build-deps_1.12.0+dfsg0-1_all.deb'.
The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
Selecting previously unselected package ceres-solver-build-deps.
(Reading database ... 24600 files and directories currently installed.)
Preparing to unpack ceres-solver-build-deps_1.12.0+dfsg0-1_all.deb ...
Unpacking ceres-solver-build-deps (1.12.0+dfsg0-1) ...
(Reading database ... 24604 files and directories currently installed.)
Removing ceres-solver-build-deps (1.12.0+dfsg0-1) ...
Done installing deps
Building package
gbp:info: ceres-solver_1.12.0+dfsg0.orig.tar.gz does not exist, creating from 'upstream/1.12.0+dfsg0'
dpkg-buildpackage -rfakeroot -D -us -uc -i -I
dpkg-buildpackage: warning: using a gain-root-command while being root
dpkg-buildpackage: source package ceres-solver
dpkg-buildpackage: source version 1.12.0+dfsg0-1
dpkg-buildpackage: source distribution unstable
dpkg-buildpackage: source changed by Philipp Huebner <debalance@debian.org>
dpkg-source -i -I --before-build backports
dpkg-buildpackage: host architecture amd64
dpkg-checkbuilddeps: Unmet build dependencies: cmake libatlas-base-dev libgoogle-glog-dev libgflags-dev libeigen3-dev (>= 3.2.1) libsuitesparse-dev (>= 1:4.4.3) python-sphinx python-sphinx-rtd-theme libjs-mathjax
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1376:
dpkg-buildpackage -rfakeroot -D -us -uc -i -I failed
gbp:error: 'debuild -i -I -uc -us' failed: it exited with 29