Report information
The Basics
Id:
46648
Status:
resolved
Priority:
Low/Low
Queue:

BugTracker
Version Fixed:
9.9.12, 9.10.7, 9.11.3, 9.12.0
Version Found:
(no value)
Versions Affected:
(no value)
Versions Planned:
(no value)
Priority:
P3 Low
Severity:
S3 Low
CVSS Score:
(no value)
CVE ID:
(no value)
Component:
(no value)
Area:
bug

Dates
Created:Tue, 21 Nov 2017 07:52:18 -0500
Updated:Mon, 29 Jan 2018 14:50:01 -0500
Closed:Thu, 23 Nov 2017 05:57:20 -0500



This bug tracker is no longer active.

Please go to our Gitlab to submit issues (both feature requests and bug reports) for active projects maintained by Internet Systems Consortium (ISC).

Due to security and confidentiality requirements, full access is limited to the primary maintainers.

Subject: Disable parallel make for bin/confgen and bin/named
From: michal@isc.org
To: bind9-public@isc.org
Date: Tue, 21 Nov 2017 13:52:18 +0100
Making ${UOBJS} (containing various "unix/<objectname>.@O@" entries) a dependency for executable targets and setting SUBDIRS to "unix" in bin/confgen/Makefile.in and bin/named/Makefile.in causes two issues with parallel make ("make -jX"): - ${UOBJS} may be built in both bin/{confgen,named} and the "unix" subdirectory of each of these directories, - if building objects inside the "unix" subdirectory is not complete by the time linking the targets inside bin/{confgen,named} is attempted, an error will occur due to at least one required object file not being present, e.g.: gcc: error: unix/os.o: No such file or directory
Please review rt46648 which disables parallel make in bin/confgen and bin/named in a similar fashion as elsewhere in the repository and removes ${UOBJS} from the list of dependencies for targets using it; with parallel processing disabled, SUBDIRS will always be processed before TARGETS.
On Tue Nov 21 12:52:18 2017, michal wrote: > Making ${UOBJS} (containing various "unix/<objectname>.@O@" entries) a > dependency for executable targets and setting SUBDIRS to "unix" in > bin/confgen/Makefile.in and bin/named/Makefile.in causes two issues with > parallel make ("make -jX"): => if you know a reliable (i.e. working with all make's) way to disable parallel make I am really interested. BTW as far as I know there is none.
Looking for a panacea is not the subject of this ticket. I am only proposing to apply a previously accepted solution in yet another spot which is causing trouble. Also, if your claim is correct and there really is no universal solution, it should still not prevent us from fixing the problem for make implementations which do offer a relevant mechanism. $ git grep -B1 NO.PARALLEL lib/Makefile.in-# Attempt to disable parallel processing. lib/Makefile.in:.NOTPARALLEL: lib/Makefile.in:.NO_PARALLEL: -- lib/dns/Makefile.in-# Attempt to disable parallel processing. lib/dns/Makefile.in:.NOTPARALLEL: lib/dns/Makefile.in:.NO_PARALLEL: -- lib/dns/tests/Makefile.in-# Attempt to disable parallel processing. lib/dns/tests/Makefile.in:.NOTPARALLEL: lib/dns/tests/Makefile.in:.NO_PARALLEL: -- lib/irs/tests/Makefile.in-# Attempt to disable parallel processing. lib/irs/tests/Makefile.in:.NOTPARALLEL: lib/irs/tests/Makefile.in:.NO_PARALLEL: -- lib/isc/Makefile.in-# Attempt to disable parallel processing. lib/isc/Makefile.in:.NOTPARALLEL: lib/isc/Makefile.in:.NO_PARALLEL: -- lib/isc/tests/Makefile.in-# Attempt to disable parallel processing. lib/isc/tests/Makefile.in:.NOTPARALLEL: lib/isc/tests/Makefile.in:.NO_PARALLEL: -- lib/isccfg/tests/Makefile.in-# Attempt to disable parallel processing. lib/isccfg/tests/Makefile.in:.NOTPARALLEL: lib/isccfg/tests/Makefile.in:.NO_PARALLEL: -- lib/ns/Makefile.in-# Attempt to disable parallel processing. lib/ns/Makefile.in:.NOTPARALLEL: lib/ns/Makefile.in:.NO_PARALLEL: -- lib/ns/tests/Makefile.in-# Attempt to disable parallel processing. lib/ns/tests/Makefile.in:.NOTPARALLEL: lib/ns/tests/Makefile.in:.NO_PARALLEL: -- unit/Makefile.in-# Attempt to disable parallel processing. unit/Makefile.in:.NOTPARALLEL: unit/Makefile.in:.NO_PARALLEL:
On Wed Nov 22 08:43:47 2017, michal wrote: > Looking for a panacea is not the subject of this ticket. => I understood this well and this is why I replied to the first entry and not to the second one requesting a review. Unfortunately it seems there is no magic here so I should finish like you having only a partial solution...
Ah, then I misunderstood you, sorry. Do you know which specific make implementations both support parallel processing and do not offer a mechanism to selectively disable it on a per-directory basis?
On Wed Nov 22 09:52:49 2017, michal wrote: > Ah, then I misunderstood you, sorry. Do you know which specific make > implementations both support parallel processing and do not offer a > mechanism to selectively disable it on a per-directory basis? => implementations no(ne) even I should check old bsdmake. But specifications yes as -j is a POSIX flag and of course POSIX didn't define a way to disable it. BTW what I need is an easy and portable way to disable parallelism for one entry, not the whole Makefile.
To: bind9-public@isc.org
Date: Wed, 22 Nov 2017 11:34:02 +0000
From: "Ray Bellis" <ray@isc.org>
Subject: Re: [ISC-Bugs #46648] Disable parallel make for bin/confgen and bin/named
On 22/11/2017 11:28, Francis Dupont via RT wrote: > => implementations no(ne) even I should check old bsdmake. But > specifications yes as -j is a POSIX flag and of course POSIX didn't > define a way to disable it. > > BTW what I need is an easy and portable way to disable parallelism > for one entry, not the whole Makefile. If "-j" is a POSIX requirement, then one option is to have a target that calls make recursively with "-j1": non_parallel_target: $(MAKE) -j1 real_target <https://stackoverflow.com/questions/17172310/make-disable-parallel-building-in-subdirectory-for-single-target-only> Ray
On Wed Nov 22 11:34:14 2017, ray wrote: > On 22/11/2017 11:28, Francis Dupont via RT wrote: > > > => implementations no(ne) even I should check old bsdmake. But > > specifications yes as -j is a POSIX flag and of course POSIX didn't > > define a way to disable it. > > > > BTW what I need is an easy and portable way to disable parallelism > > for one entry, not the whole Makefile. > > If "-j" is a POSIX requirement, then one option is to have a target > that > calls make recursively with "-j1": > > non_parallel_target: $(MAKE) -j1 real_target > > <https://stackoverflow.com/questions/17172310/make-disable-parallel- > building-in-subdirectory-for-single-target-only> => does not work for builtin target (BTW if you think we should move to another place we can go to a Kea ticket).
In any case, could someone please sign off on the tweak this ticket suggests?
4826. [cleanup] Prevent potential build failures in bin/confgen/ and bin/named/ when using parallel make. [RT #46648] 9.9.12, 9.10.7, 9.11.3, 9.12.0