[debhelper-devel] Bug#827132: debhelper: make-4.2 renamed --jobserver-fds to --jobserver-auth causing parallel build issues

Martin Dorey martin.dorey at hds.com
Sun Jun 12 18:12:29 UTC 2016


Package: debhelper
Version: 9.20120909
Severity: normal

Dear Maintainer,

The make-4.2 announcement at https://lists.gnu.org/archive/html/info-gnu/2016-05/msg00013.html includes [

* The interface to GNU make's "jobserver" is stable as documented in the
  manual, for tools which may want to access it.

  WARNING: Backward-incompatibility! The internal-only command line option
  --jobserver-fds has been renamed for publishing, to --jobserver-auth.

* The amount of parallelism can be determined by querying MAKEFLAGS, even when
  the job server is enabled (previously MAKEFLAGS would always contain only
  "-j", with no number, when job server was enabled).

].  Although I'm only testing with a Wheezy debhelper, I have looked at https://anonscm.debian.org/git/debhelper/debhelper.git/tree/Debian/Debhelper/Dh_Lib.pm and its call from https://anonscm.debian.org/git/debhelper/debhelper.git/tree/Debian/Debhelper/Buildsystem/makefile.pm and seen that the former mentions jobserver-fds but not jobserver-auth.  When make-4.2 reaches Debian, my experiments suggest that users, if there are any in this situation, intending to run serial make from debuild from parallel make will see the like of:

make[2]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.

If I've understood correctly, then that's an effective regression of the fix for https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=532805 (dh_auto_build: prevents make jobs from being run simultaneously).

I suffered a worse problem than a warning or unwanted serialization - my build broke, sometimes.  I doubt anyone else will ever see my very particular situation, but I'll explain in case.  My build system now uses /usr/local/bin/make-4.2.1 -j8 to invoke debuild, which appears to invoke /usr/bin/make, which, on my system, is Wheezy's make-3.81, to execute a proprietary makefile.  make-4.2.1 left -j8 in MAKEFLAGS and, because it used --jobserver-auth rather than --jobserver-fds, debhelper didn't know to remove the parallelism flags.  This exposed a previously latent race condition in the underlying proprietary makefile.  I've fixed that makefile, so now I happily have a working, if accidentally parallel build.

While it looks straightforward to s/jobserver-fds/jobserver-(?:fds|auth)/g, this line will also need attention to support the second make-4.2 bullet I quoted above:

$ENV{MAKEFLAGS} =~ s/(?:^|\s)-j\b//g;

... as it won't match the like of -j8.  Perhaps you'd be content to replace the \b with \d*\b to cope with both new and old versions of make.  Sorry for not supplying a patch, but it'd either be for the Wheezy debhelper or it'd be (probably) untested.  At least I'm realistic enough not to request a fix in Wheezy or Jessie.  I just want to make the diagnosis easier for the next poor sap.

-- System Information:
Debian Release: 7.8
  APT prefers oldstable-updates
  APT policy: (990, 'oldstable-updates'), (990, 'oldstable'), (500, 'oldoldstable'), (500, 'stable'), (500, 'oldstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages debhelper depends on:
ii  binutils    2.22-8+deb7u2
ii  dpkg        1.16.16
ii  dpkg-dev    1.16.16
ii  file        5.11-2+deb7u8
ii  html2text   1.3.2a-15
ii  man-db      2.6.2-1
ii  perl        5.14.2-21+deb7u2
ii  po-debconf  1.0.16+nmu2

debhelper recommends no packages.

Versions of packages debhelper suggests:
pn  dh-make  <none>

-- no debconf information



More information about the debhelper-devel mailing list