Package: debhelper
Version: 10.2.5
Severity: important
Control: affects -1 cmake
X-Debbugs-Cc: pkg-cmake-t...@lists.alioth.debian.org

Dear debhelper Maintainers,
(Cc'ing CMake packaging list as this affects them)

I just stubmled upon a feature added to CMake 3.x that allows packages
to register in a "package registry" via the export() CMake command.
This causes CMake to write into the home dirctory of a user. I believe
this is not desireable when building Debian packages - the registry in
the home directory should be ignored. When looking for packages only
the system registry should be queried (but that does need to happen,
otherwise builds may break), and the export() command should be
disabled completely.

Documentation for this:

https://cmake.org/cmake/help/v3.9/manual/cmake-packages.7.html#package-registry
https://cmake.org/cmake/help/v3.0/command/export.html
https://cmake.org/cmake/help/v3.9/manual/cmake-packages.7.html#disabling-the-package-registry
https://cmake.org/Bug/view.php?id=14849

It should be sufficient to pass

  -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON
  -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON

to the CMake invocation. (Though I haven't gotten around to testing
this yet, hence no patch attached here so far.)

If you look for packages that use CMake as their build system _and_
have export(PACKAGE in any CMakeLists.txt file [1], then you will find
that the current build logs already show a warning message that the
non-existent home directory of the buildd user on the autobuilders
couldn't be written to. Some examples of this:

https://buildd.debian.org/status/fetch.php?pkg=mapserver&arch=arm64&ver=7.0.6-2&stamp=1498513871&raw=0
https://buildd.debian.org/status/fetch.php?pkg=avogadro&arch=amd64&ver=1.2.0-2&stamp=1499360655&raw=0
https://buildd.debian.org/status/fetch.php?pkg=freerdp2&arch=amd64&ver=2.0.0%7Egit20161130.1.e60d0d5%2Bdfsg1-1&stamp=1482840273&raw=0
https://buildd.debian.org/status/fetch.php?pkg=armadillo&arch=arm64&ver=1%3A7.950.1%2Bdfsg-1&stamp=1497978266&raw=0
https://buildd.debian.org/status/fetch.php?pkg=octomap&arch=arm64&ver=1.8.1%2Bdfsg-1&stamp=1485272067&raw=0
https://buildd.debian.org/status/fetch.php?pkg=yaml-cpp&arch=arm64&ver=0.5.2-4&stamp=1476324483&raw=0
https://buildd.debian.org/status/fetch.php?pkg=orocos-kdl&arch=arm64&ver=1.3.1%2Bdfsg-1&stamp=1468048292&raw=0
https://buildd.debian.org/status/fetch.php?pkg=libwebsockets&arch=arm64&ver=2.0.3-2&stamp=1478209995&raw=0
https://buildd.debian.org/status/fetch.php?pkg=vtk-dicom&arch=arm64&ver=0.7.10-1%2Bb2&stamp=1487960322&raw=0
https://buildd.debian.org/status/fetch.php?pkg=gli&arch=all&ver=0.8.2.0%2Bds1-2&stamp=1484226906&raw=0
https://buildd.debian.org/status/fetch.php?pkg=diskscan&arch=arm64&ver=0.19-4&stamp=1484043493&raw=0

(Look for "Cannot create package registry file:" in the log.)

Additionally, _all_ packages that use CMake and call find_package()
(the vast majority of CMake-using packages) will be affected if a user
has entries in their local user registry that have the same name as
system packages.

Regards,
Christian

PS: I'm unsure about the severity of this bug. I believe this should
qualify as RC (policy violation: writing to home directories), but
I've left it at "important" for now.

[1] Codesearch expression:

  path:.*/CMakeLists.txt export\(PACKAGE

Note that there are false positives if you use that expression, as
sometimes unused bundled libraries are shown, and sometimes the package
is built within Debian with a different build system (e.g. autotools)
instead of CMake. (If the package supports multiple build systems.)

-- System Information:
Debian Release: 9.0
  APT prefers stable-debug
  APT policy: (500, 'stable-debug'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-3-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages debhelper depends on:
ii  autotools-dev            20161112.1
ii  binutils                 2.28-5
ii  dh-autoreconf            14
ii  dh-strip-nondeterminism  0.034-1
ii  dpkg                     1.18.24
ii  dpkg-dev                 1.18.24
ii  file                     1:5.30-1
ii  libdpkg-perl             1.18.24
ii  man-db                   2.7.6.1-2
ii  perl                     5.24.1-3
ii  po-debconf               1.0.20

debhelper recommends no packages.

Versions of packages debhelper suggests:
ii  dh-make  2.201608

-- no debconf information

Reply via email to