While the wording included in the manual page was not verbatim copying
from the source material, it was perhaps not distinct enough. The
manual page is not a copy/edit of the source material anymore, being
rewritten using different words and flow.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
Update the man page with details on the internal --jobserver-fds
option, and the jobserver pipe used to handle -j correctly in
recursive make invocations.
Based on details gleaned from:
http://make.mad-scientist.net/papers/jobserver-implementation/
forwarded this bug to upstream bug reporting system.
(Closes: #781416).
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
Update the man page with details on the internal --jobserver-fds
option, and the jobserver pipe used to handle -j correctly in
recursive make invocations.
Based on details gleaned from:
http://make.mad-scientist.net/papers/jobserver-implementation/
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
* job.h (struct child): New bit to mark recursive command lines.
* job.c (start_job_command): Set the recursive command line bit.
(reap_children): If the child is a recursive command and it exits
with 1 during question mode, don't print an error and exit with 1.
* tests/scripts/options/dash-q: Add a regression test.
* Makefile.am, configure.ac: Check for pselect() and sys/select.h.
* main.c (main): Block SIGCHLD if we have pselect() support.
* posixos.c (jobserver_acquire): If we support pselect() then use
it to query the jobserver pipe, while also listening for SIGCHLD.
Also pselect() supports a timeout so avoid alarm() calls.
* commands.c, commands.h: Use unsigned char for flags.
* dir.c: Use time_t and size_t, and char for a boolean value.
* job.c: Use unsigned and char.
* read.c: Return a signed type since -1 is a valid return code.
This cannot be a perfect solution because there are always other
possible places EINTR can happen, including external libraries
such as gettext, Guile etc.
The strcache was limited to strings of length 65535 or less,
because the length is kept in an unsigned short. To support
huge strings add a new simple linked list, which we don't try
to hash.
If the very first string added to the string cache is more than
half the maximum size, we failed when moving the only strcache
buffer to the full list.
* job.h (struct child): New bit to mark recursive command lines.
* job.c (start_job_command): Set the recursive command line bit.
(reap_children): If the child is a recursive command and it exits
with 1 during question mode, don't print an error and exit with 1.
* tests/scripts/options/dash-q: Add a regression test.
Newer versions of binutils allow ar to be compiled to generate
"deterministic archives" by default: in this mode no timestamp
information is generated in the static archive, which utterly
breaks GNU make's archive updating capability. Debian and Ubuntu
have turned this feature on by default in their distributions
which causes the regression tests to fail.
Update the regression tests to check for the availability of the
"U" option to ar which disables deterministic archives and allows
GNU make's archive support to work properly again.
libbsd-resource-perl is only needed for running tests. Bug fix:
"make-dfsg has unsatisfiable cross build dependendencies in a
bootstrap setting: libbsd-resource-perl", thanks to Helmut Grohne
(Closes: #812725).
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
While increasing the timeout is a solution, it still did not work for
the slower architectures. Reducing the maximum open file descriptor
limits (only while testing) to try and get the the time under control.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
The test to recirsively open files until the open file descriptor
limit is reachewd unfortunately times out on slower machines, causing
build failures. This commit tries to reduce the maximum open file
descriptors to reduce the taime tofailure.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
Make has a test where we Recurse infinitely until we run out of open
files, and ensure we fail with a non-zero exit code., On some machines
the default time out was inadequate, since the test did not run till
conclusion. Doubling it did not have any effect. Quadrupling the
timeout worked.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
binutils will create archive with timestamps set to 0 when running in
"deterministic" mode. As make will always try to update such members,
let's notify users with a warning.
ar_scan() scanning function uses 0 to indicate that scanning should continue.
This made ar_member_date() unable to differentiate when it was unable to find
the requested member from a member with a timestamp set to 0.
We thus change its prototype to have its return value indicate if it has been
able to find the requested member. The timestamp is set through the newly given
pointer.
The ar program in the binutils package in Debian is now configured
with --enable-deterministic-archives. This change makes the archives
reproducible, by setting the UID, GID, and timestamp to 0. However,
when dealing with archives created with the libxx(*.o) style rules,
make needs the timestamp of the file in order to decide to update it
or not. With the current deterministic behavior of ar, the timestamp
is always 0 and make fails to build, failing 7 out of 10 archive
tests.Since make seems to depend on timestamps for this rule it makes
sense to always pass on the -U flag for the test suite
This commit makes the minimal changes to make the test suite pass
whether or not ar defaults to using deterministic mode.
There is some online discussion:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798804https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798913https://bugzilla.redhat.com/show_bug.cgi?id=1195883
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
It looks like the ar program in the binutils package in debian is now
configured with --enable-deterministic-archives. However, when dealing
with archive members, make needs the timestamp of the file in order to
decide to update it or not. With the current deterministic behavior of
ar, the timestamp is always 0. This change in ar introduced a behavior
that is not backward compatible and forces the use of the option U
make fails to build, failing 7 out of 10 archive tests.Since make seems
t depend on timestamps to handle rebuilds of archives correctly, it
makes sense to always pass on the -U flag, and depend on a version of ar
that supports it.
Should this U option be included in a Makefile, older versions of ar
would reject it and fail.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
It looks like the ar program in the binutils package in debian is now
configured with --enable-deterministic-archives. However, when dealing
with archive members, make needs the timestamp of the file in order to
decide to update it or not. With the current deterministic behavior of
ar, the timestamp is always 0. This change in ar introduced a behavior
that is not backward compatible and forces the use of the option U
make fails to build, failing 7 out of 10 archive tests.Since make seems
t depend on timestamps to handle rebuilds of archives correctly, it
makes sense to always pass on the -U flag, and depend on a version of ar
that supports it.
Should this U option be included in a Makefile, older versions of ar
would reject it and fail.
There is some online discussion:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798804https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798913https://bugzilla.redhat.com/show_bug.cgi?id=1195883
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
From: Helmut Grohne
it is doubtful wheter we can actually go
m-a:foreign. soon someone will come along and point out that the
"load" directive is not architecture agnosting and he'd be right.
the advantages are:
1) it's trivial to implement
2) after (cross)build-essential depends on make:any a large swath of
things will just work
3) it's something that works today.
the single downside is that if we ever determine that m-a:foreign is
better, the move will be a bit painful.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
make is now priority optional, along with gcc, floex and
bison. make-guile, which conflicts with it, is now priority extra.
Bug fix: "Neither make nor make-guile should be standard", thanks to
Josh Triplett (Closes: #761301).
Bug fix: "make instead of make-guile should be standard", thanks to
Joey Hess (Closes: #762017).
Signed-off-by: Manoj Srivastava <srivasta@debian.org>