6

I need to build a project which depends on the particular version of third-party library:

➜  cat debian/control 
Source: libhole-cpp
Priority: optional
Maintainer: Vitaly Isaev <isaev@embarce.ro>
Build-Depends: debhelper (>= 9), cmake, 
    flatbuffers (= 1.2.0-1),
    libboost-dev,
    libboost-system-dev,
    catch
Standards-Version: 3.9.5

However, there are several flatbuffers packages in our repo, including the newer ones:

➜  apt-cache policy flatbuffers
flatbuffers:
  Installed: (none)
  Candidate: 1.4.0-17
  Version table:
     1.4.0-17 500
        500 http://repo12.mailbuild-2.embarce.ro xenial/local amd64 Packages
     1.2.0-1 500
        500 http://repo12.mailbuild-2.embarce.ro xenial/local amd64 Packages

Under this conditions mk-build-deps refuses to install the desired version of a package:

➜  sudo mk-build-deps --install debian/control
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package 'libhole-cpp-build-deps' in '../libhole-cpp-build-deps_1.0.1ubuntu1_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 libhole-cpp-build-deps.
(Reading database ... 68846 files and directories currently installed.)
Preparing to unpack libhole-cpp-build-deps_1.0.1ubuntu1_all.deb ...
Unpacking libhole-cpp-build-deps (1.0.1ubuntu1) ...
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies...Starting pkgProblemResolver with broken count: 1
Starting 2 pkgProblemResolver with broken count: 1
Investigating (0) libhole-cpp-build-deps [ amd64 ] < 1.0.1ubuntu1 > ( devel )
Broken libhole-cpp-build-deps:amd64 Depends on flatbuffers [ amd64 ] < none -> 1.4.0-17 > ( devel ) (= 1.2.0-1)
  Considering flatbuffers:amd64 0 as a solution to libhole-cpp-build-deps:amd64 -2
  Removing libhole-cpp-build-deps:amd64 rather than change flatbuffers:amd64
Done
 Done
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
The following packages will be REMOVED:
  libhole-cpp-build-deps
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 9216 B disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 68850 files and directories currently installed.)
Removing libhole-cpp-build-deps (1.0.1ubuntu1) ...
mk-build-deps: Unable to install libhole-cpp-build-deps at /usr/bin/mk-build-deps line 402.
mk-build-deps: Unable to install all build-dep packages
➜  libhole-cpp git:(v12) ✗ sudo apt-get -f install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Could anyone please clarify what's wrong with my build toolchain? The OS is Ubuntu 16.04.

  • It's generally helpful to have the complete code, including the Debian packaging, available. Can you post a link for that? – Faheem Mitha Aug 25 '16 at 9:58
  • @FaheemMitha Sorry, can't do it since this is a proprietary software – Vitaly Isaev Aug 25 '16 at 10:02
  • Are you trying to install flatbuffers 1.2 ? – GAD3R Aug 25 '16 at 10:11
  • @GAD3R I really do. I've specified this version in debian/control – Vitaly Isaev Aug 25 '16 at 10:48
  • what is the output of dpkg-checkbuilddeps ? – GAD3R Aug 25 '16 at 11:03
3

tldr;

Delegate to the aspcud solver via apt-cudf-get:

mk-build-deps \
    --install \
    --remove \
    --tool \
    'apt-cudf-get --solver aspcud -o APT::Get::Assume-Yes=1 -o Debug::pkgProblemResolver=0 -o APT::Install-Recommends=0' \
    debian/control

Explanation

This solution differs from that of Johannes Schauer in that...

  • it uses apt-cudf-get instead of apt-get
  • it omits the following options (which didn't work in my testing):
    • -o APT::Solver::Strict-Pinning=false
    • -o APT::Solver::aspcud::Preferences="-new,-removed,-changed"
  • it adds the following options:
    • -o APT::Get::Assume-Yes=1 (to install packages non-interactively)
    • -o Debug::pkgProblemResolver=1 (mk-build-deps --tool default)
    • -o APT::Install-Recommends=0 (mk-build-deps --tool default)

References:

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.