From 7e887c1d0926b9a7e24be734689715fc7f0a0673 Mon Sep 17 00:00:00 2001 From: James Cowgill Date: Tue, 31 Jan 2017 08:31:57 -0800 Subject: make-dfsg (4.1-9.1) unstable; urgency=medium * Non-maintainer upload. * Ensure the stack limit is reset when make re-execs itself. (Closes: #853213) [dgit import package make-dfsg 4.1-9.1] --- Makefile.am | 2 +- ar.c | 33 +- commands.c | 5 +- configure.ac | 3 +- debian/Explanations | 204 ++++++ debian/NEWS.Debian | 185 ++++++ debian/README.Debian-Source | 6 + debian/changelog | 1175 +++++++++++++++++++++++++++++++++++ debian/clean | 52 ++ debian/compat | 1 + debian/control | 50 ++ debian/copyright | 45 ++ debian/make-first-existing-target | 205 ++++++ debian/make-first-existing-target.1 | 178 ++++++ debian/make-guile.docs | 8 + debian/make-guile.install | 1 + debian/make-guile.manpages | 2 + debian/make.docs | 8 + debian/make.install | 1 + debian/make.manpages | 2 + debian/rules | 64 ++ debian/source/format | 1 + debian/upstream/signing-key.asc | 172 +++++ debian/watch | 5 + dir.c | 7 +- job.c | 73 ++- job.h | 1 + main.c | 20 +- make.1 | 81 ++- makeint.h | 5 +- remake.c | 32 +- tests/scripts/features/archives | 14 +- tests/scripts/misc/fopen-fail | 2 +- tests/scripts/options/dash-q | 9 + tests/scripts/targets/POSIX | 2 +- tests/test_driver.pl | 18 +- 36 files changed, 2627 insertions(+), 45 deletions(-) create mode 100644 debian/Explanations create mode 100644 debian/NEWS.Debian create mode 100644 debian/README.Debian-Source create mode 100644 debian/changelog create mode 100644 debian/clean create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/make-first-existing-target create mode 100644 debian/make-first-existing-target.1 create mode 100644 debian/make-guile.docs create mode 100644 debian/make-guile.install create mode 100644 debian/make-guile.manpages create mode 100644 debian/make.docs create mode 100644 debian/make.install create mode 100644 debian/make.manpages create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/upstream/signing-key.asc create mode 100644 debian/watch diff --git a/Makefile.am b/Makefile.am index 3d0c321e..eeb4d25e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -59,7 +59,7 @@ endif man_MANS = make.1 -DEFS = -DLOCALEDIR=\"$(localedir)\" -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" @DEFS@ +DEFS = -DLOCALEDIR=\"$(localedir)\" -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" -DMULTIARCH_DIRS="$(MULTIARCH_DIRS)" @DEFS@ AM_CPPFLAGS = $(GLOBINC) AM_CFLAGS = $(GUILE_CFLAGS) diff --git a/ar.c b/ar.c index 675572a1..d10a8dfa 100644 --- a/ar.c +++ b/ar.c @@ -68,25 +68,39 @@ ar_parse_name (const char *name, char **arname_p, char **memname_p) /* This function is called by 'ar_scan' to find which member to look at. */ +struct member_date_lookup +{ + const char *name; + time_t *member_date; +}; + /* ARGSUSED */ static long int ar_member_date_1 (int desc UNUSED, const char *mem, int truncated, long int hdrpos UNUSED, long int datapos UNUSED, long int size UNUSED, long int date, int uid UNUSED, int gid UNUSED, int mode UNUSED, - const void *name) + const void *data) { - return ar_name_equal (name, mem, truncated) ? date : 0; + const struct member_date_lookup *lookup_data = data; + if (ar_name_equal (lookup_data->name, mem, truncated)) + { + *lookup_data->member_date = date; + return 1; + } + return 0; } -/* Return the modtime of NAME. */ +/* Read the modtime of NAME in MEMBER_DATE. + Returns 1 if NAME exists, 0 otherwise. */ -time_t -ar_member_date (const char *name) +int +ar_member_date (const char *name, time_t *member_date) { char *arname; char *memname; - long int val; + int found; + struct member_date_lookup lookup_data; ar_parse_name (name, &arname, &memname); @@ -107,11 +121,14 @@ ar_member_date (const char *name) (void) f_mtime (arfile, 0); } - val = ar_scan (arname, ar_member_date_1, memname); + lookup_data.name = memname; + lookup_data.member_date = member_date; + found = ar_scan (arname, ar_member_date_1, &lookup_data); free (arname); - return (val <= 0 ? (time_t) -1 : (time_t) val); + /* return 0 (not found) if the archive does not exist or has invalid format. */ + return (found == 1) ? 1 : 0; } /* Set the archive-member NAME's modtime to now. */ diff --git a/commands.c b/commands.c index 7123021f..029f18e5 100644 --- a/commands.c +++ b/commands.c @@ -622,7 +622,10 @@ delete_target (struct file *file, const char *on_behalf_of) time_t file_date = (file->last_mtime == NONEXISTENT_MTIME ? (time_t) -1 : (time_t) FILE_TIMESTAMP_S (file->last_mtime)); - if (ar_member_date (file->name) != file_date) + time_t member_date = NONEXISTENT_MTIME; + int found; + found = ar_member_date (file->name, &member_date); + if (found && member_date != file_date) { if (on_behalf_of) OSS (error, NILF, diff --git a/configure.ac b/configure.ac index 1f8aa299..aa55615f 100644 --- a/configure.ac +++ b/configure.ac @@ -68,7 +68,8 @@ AC_HEADER_DIRENT AC_HEADER_STAT AC_HEADER_TIME AC_CHECK_HEADERS([stdlib.h locale.h unistd.h limits.h fcntl.h string.h \ - memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h]) + memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h \ + sys/user.h linux/binfmts.h]) AM_PROG_CC_C_O AC_C_CONST diff --git a/debian/Explanations b/debian/Explanations new file mode 100644 index 00000000..090974ec --- /dev/null +++ b/debian/Explanations @@ -0,0 +1,204 @@ + This file is a presentation of explanations of make's behaviour that + users have found puzzling over time, along with explanations of the + behaviour by make's author. + +###################################################################### +###################################################################### +###################################################################### + + Case 1: + +> I have always thought that a normal (non-pattern) rule with multiple +> targets gets run multiple times, once per each target that is out of +> date. At least, that's what the manual says. Sometimes one would +> like a different behavior, namely to update all the targets at once +> with one run, but as long as it's documented and established I am +> willing to live with it. But there seems to be more to it. + +============================================================================== + MODULES := \ + Blah \ + Bleh \ + + SOURCES := $(addsuffix .sml,$(MODULES)) + + TEX := $(addsuffix .tex,$(MODULES)) + + modules.tex : $(TEX) + cat $(TEX) > modules.tex + + $(TEX) : $(SOURCES) + ./bin/plit $(SOURCES) +============================================================================== + +> I have files Blah.sml and Bleh.sml. +> Surprise #1: make modules.tex runs the last rule _once_ (which +> happens to be which happens in this case). + +That's because of the way make processes the makefile. First, it builds +Blah.tex, but that command also updates Bleh.tex. So, when make comes +around looking to decide if Bleh.tex needs to be updated, it doesn't +have to be because it's already up to date, so make doesn't run the rule +again. + +The best way to see this problem is to try a parallel build: in that +case often make will try to invoke the script once for each target, in +parallel. + +> Surprise #2: add a flag to the command, so now the last rule is +> $(TEX) : $(SOURCES) +> ./bin/plit -n $(SOURCES) +> touch one of the .sml files, make modules.tex again. Now plit runs twice! + +I don't know what the -n flag does so I can't say: I can't find any docs +for "plit" via Google or on my system. Maybe it doesn't actually update +the files with -n? + +Needless to say I can't reproduce this behavior with a simplified +makefile that doesn't invoke plit but rather just uses touch, etc. to +try to mimic its behavior. + +> +> Surprise #3: refactor like this +> $(TEX) : junk +> junk: $(SOURCES) +> ./bin/plit -n $(SOURCES) +> touch Blah.sml. Now make modules.tex runs the last rule (once), but +> not the first rule (for modules.tex itself), even though it clearly +> is out of date! + +I can only assume that you created a file "junk" by hand in this +directory during your testing: no other explanation fits the facts as +you describe them. + +This makefile is broken, because you never have any command that updates +the file "junk". + +If that file "junk" doesn't exist already then make will always run the +plit script every time, regardless of the relative timestamps of the +.sml files, and then it will always update modules.tex. + +If that file "junk" does exist, then it will re-run "plit" if any of the +.sml files is newer than the file "junk". But since the script doesn't +update "junk" itself, make doesn't consider the two .tex files out of +date (they are still newer than their prerequisite, "junk") so it +doesn't rebuild modules.tex. + +If you change your rule so that it updates "junk", all will work as you +expect: + + $(TEX): junk + + junk: $(SOURCES) + ./bin/plit -n $(SOURCES) + @touch $@ + +###################################################################### +###################################################################### +###################################################################### + + Case 2 + +> In some cases, GNU make ignores some double-colon rules when dry-run. +====================================================================== + all: foo.1 foo.2 + foo.1: + touch foo.1 + foo.2: + touch foo.2 + + install.man:: foo.1 + @echo install foo.1 + + install.man:: foo.2 + @echo install foo.2 + + install.man:: + @echo install done +====================================================================== +> I've got the following results + +> % make +> touch foo.1 +> touch foo.2 +> % make -n install.man +> echo install foo.1 +> echo install done + +> I expect "echo install foo.2", but make dry-run shows not to +> run "install foo.2". However, if I run make actually + +> % make install.man +> install foo.1 +> install foo.2 +> install done + +> "install foo.2" is executed. Is this an intentional behavior or a +> bug of GNU make? + +It is intentional behavior. When GNU make runs with -n it must assume +that your command script does what you say it will do: since it doesn't +run the script itself it can't know what the script _really_ does. + +For a rule like this: + + install.man:: foo.1 + + +GNU make _must_ assume that updates the target +"install.man"... how can it know that it really doesn't? + +So, when you run with -n it assumes that the target is now updated, +which automatically makes it newer than "foo.2", so the rule depending +on "foo.2" does not get run. + +The last install.man rule is run because there is a special condition +for double-colon rules, that if they have no prerequisites the command +is run even if the target exists (see the section "Double-Colon Rules" +in the GNU make manual). + +However, double-colon rules that _DO_ have prerequisites are only +invoked if the prerequisites are newer than the target, just as with +normal rules. + +You can see the behavior "make -n" is emulating without using -n if you +have your scripts actually create the target your makefile says it will: + + install.man:: foo.1 + @echo install foo.1 + touch $@ + install.man:: foo.2 + @echo install foo.2 + touch $@ + install.man:: + @echo install done + touch $@ + + + $ make -n + install foo.1 + install done + + $ make + install foo.1 + install done + + ms> Note that pmake run as I expected + + ms> % pmake -n install.man + ms> echo install foo.1 + ms> echo install foo.2 + ms> echo install done + +Most likely pmake behaves differently; it may always run all +double-colon scripts, even if there's a satisfied prerequisite +relationship. + +Try the above makefile with the touch lines in it: does it run all three +rules even though the touch lines exist? + +###################################################################### +###################################################################### +###################################################################### + +arch-tag: b9738368-cd5f-43ad-aed0-6853f020811f diff --git a/debian/NEWS.Debian b/debian/NEWS.Debian new file mode 100644 index 00000000..08f01cca --- /dev/null +++ b/debian/NEWS.Debian @@ -0,0 +1,185 @@ +make-dfsg (4.1-2) unstable; urgency=low + + WARNING: Backward-incompatibility! + + 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 time stamp + is always 0. This has consequences, since make will fall back to always + adding each member to the archive, whether or not it is required. This + is a change in behaviour, and, for instance, it makes make fail to + build, failing 7 out of 10 archive tests. + . + Since binutils will create archive with time stamps set to 0 when + running in "deterministic" mode, make will always try to update such + members. When this is detected, make will emit a warning. + . + There is some online discussion: + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798804 + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798913 + https://bugzilla.redhat.com/show_bug.cgi?id=1195883 + + -- Manoj Srivastava Mon, 18 Jan 2016 16:09:19 -0800 + +make-dfsg (4.0-1) experimental; urgency=low + + WARNING: Backward-incompatibility! + If .POSIX is specified, then make adheres to the POSIX backslash/newline + handling requirements, which introduces the following changes to the + standard backslash/newline handling in non-recipe lines: + * Any trailing space before the backslash is preserved + * Each backslash/newline (plus subsequent whitespace) is converted to a + single space + + -- Manoj Srivastava Sat, 12 Apr 2014 23:56:34 -0700 + +make-dfsg (3.82-1) experimental; urgency=low + + * New upstream release. A complete list of bugs fixed in this version is + available here: http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set=custom + * WARNING: Future backward-incompatibility! + Wildcards are not documented as returning sorted values, but up to and + including this release the results have been sorted and some makefiles + are apparently depending on that. In the next release of GNU make, + for performance reasons, we may remove that sorting. If your + makefiles require sorted results from wildcard expansions, use the + $(sort ...) function to request it explicitly. + * WARNING: Backward-incompatibility! + The POSIX standard for make was changed in the 2008 version in a + fundamentally incompatible way: make is required to invoke the shell + as if the '-e' flag were provided. Because this would break many + makefiles that have been written to conform to the original text of + the standard, the default behavior of GNU make remains to invoke the + shell with simply '-c'. However, any makefile specifying the .POSIX + special target will follow the new POSIX standard and pass '-e' to the + shell. See also .SHELLFLAGS below. + * WARNING: Backward-incompatibility! + The '$?' variable now contains all prerequisites that caused the + target to be considered out of date, even if they do not exist + (previously only existing targets were provided in $?). + * WARNING: Backward-incompatibility! + As a result of parser enhancements, three backward-compatibility + issues exist: first, a prerequisite containing an "=" cannot be + escaped with a backslash any longer. You must create a variable + containing an "=" and use that variable in the prerequisite. Second, + variable names can no longer contain whitespace, unless you put the + whitespace in a variable and use the variable. Third, in previous + versions of make it was sometimes not flagged as an error for explicit + and pattern targets to appear in the same rule. Now this is always + reported as an error. + * WARNING: Backward-incompatibility! + The pattern-specific variables and pattern rules are now applied in + the shortest stem first order instead of the definition order + (variables and rules with the same stem length are still applied in + the definition order). This produces the usually-desired behavior + where more specific patterns are preferred. To detect this feature + search for 'shortest-stem' in the .FEATURES special variable. + * WARNING: Backward-incompatibility! + The library search behavior has changed to be compatible with the + standard linker behavior. Prior to this version for prerequisites + specified using the -lfoo syntax make first searched for libfoo.so in + the current directory, vpath directories, and system directories. If + that didn't yield a match, make then searched for libfoo.a in these + directories. Starting with this version make searches first for + libfoo.so and then for libfoo.a in each of these directories in order. + + -- Manoj Srivastava Mon, 18 Jul 2011 00:38:04 -0700 + +make (3.80+3.81.b3.1-1) unstable; urgency=low + + * WARNING: Backward-incompatibility! (this may help CDBS users) + GNU make now implements a generic "second expansion" feature on the + prerequisites of both explicit and implicit (pattern) rules. In order + to enable this feature, the special target '.SECONDEXPANSION' must be + defined before the first target which takes advantage of it. If this + feature is enabled then after all rules have been parsed the + prerequisites are expanded again, this time with all the automatic + variables in scope. This means that in addition to using standard + SysV $$@ in prerequisites lists, you can also use complex functions + such as $$(notdir $$@) etc. This behavior applies to implicit rules, + as well, where the second expansion occurs when the rule is matched. + However, this means that you need to double-quote any "$" in your + filenames; instead of "foo: boo$$bar" you now must write "foo: + foo$$$$bar". Note that the SysV $$@ etc. feature, which used to be + available by default, is now ONLY available when the .SECONDEXPANSION + target is defined. If your makefiles take advantage of this SysV + feature you will need to update them. + * New special variables available in this release: + - .INCLUDE_DIRS: Expands to a list of directories that make searches + for included makefiles. + * New functions available in this release: + - $(info ...) prints its arguments to stdout. No makefile name or + line number info, etc. is printed. + - $(flavor ...) returns the flavor of a variable. + + -- Manoj Srivastava Mon, 12 Dec 2005 13:38:47 -0600 + +make (3.80+3.81.b3-1) unstable; urgency=low + + * WARNING: Backward-incompatibility! + GNU make now implements a generic "second expansion" feature on the + prerequisites of both explicit and implicit (pattern) rules. After + all rules have been parsed the prerequisites are expanded again, this + time with all the automatic variables in scope. This means that in + addition to using standard SysV $$@ in prerequisites lists, you can + also use complex functions such as $$(notdir $$@) etc. This behavior + applies to implicit rules, as well, where the second expansion occurs + after the rule is matched. However, this means that you need to + double-quote any "$" in your filenames; instead of "foo: boo$$bar" you + now must write "foo: foo$$$$bar". + * WARNING: Backward-incompatibility! + In order to comply with POSIX, the way in which GNU make processes + backslash-newline sequences in command strings has changed. See the + GNU make manual section "Command Execution" for details. + * New command-line option: -L (--check-symlink-times). On systems that + support symbolic links, if this option is given then GNU make will use + the most recent modification time of any symbolic links that are used + to resolve target files. The default behavior remains as it always + has: use the modification time of the actual target file only. + * The "else" conditional line can now be followed by any other legal + conditional on the same line: this does not increase the depth of the + conditional nesting, so only one "endif" is required to close the + conditional. + * All pattern-specific variables that match a given target are now used + (previously only the first match was used). + * Target-specific variables can be marked as exportable using the + "export" keyword. + * In a recursive $(call ...) context, any extra arguments from the outer + call are now masked in the context of the inner call. + * Implemented a solution for the "thundering herd" problem with "-j -l". + This version of GNU make uses an algorithm suggested by Thomas Riedl + to track the number of jobs started in the + last second and artificially adjust GNU make's view of the system's + load average accordingly. + * New special variables available in this release: + - .FEATURES: Contains a list of special features available in this + version of GNU make. + - .DEFAULT_GOAL: Set the name of the default goal make will + use if no goals are provided on the command line. + - MAKE_RESTARTS: If set, then this is the number of times this + instance of make has been restarted (see "How Makefiles Are Remade" + in the manual). + - New automatic variable: $| (added in 3.80, actually): contains all + the order-only prerequisites defined for the target. + * New functions available in this release: + - $(lastword ...) returns the last word in the list. This gives + identical results as $(word $(words ...) ...), but is much faster. + - $(abspath ...) returns the absolute path (all "." and ".." + directories resolved, and any duplicate "/" characters removed) for + each path provided. + - $(realpath ...) returns the canonical pathname for each path + provided. The canonical pathname is the absolute pathname, with + all symbolic links resolved as well. + - $(info ...) prints informative messages to stdout. No makefile + name or line number info, etc. is printed, just the message. + * Changes made for POSIX compatibility: + - Only touch targets (under -t) if they have at least one command. + - Setting the SHELL make variable does NOT change the value of the + SHELL environment variable given to programs invoked by make. As + an enhancement to POSIX, if you export the make variable SHELL then + it will be set in the environment, just as before. + + -- Manoj Srivastava Fri, 9 Dec 2005 21:28:14 -0600 diff --git a/debian/README.Debian-Source b/debian/README.Debian-Source new file mode 100644 index 00000000..30928214 --- /dev/null +++ b/debian/README.Debian-Source @@ -0,0 +1,6 @@ + + This source package has been pared down to remove the documentation + (which has a license that does not pass DFSG muster), and the build + system has been adjusted accordingly. The sources of the binary make + program are in the source package make-dfsg. The full unredacted + sources can be had from non-free in make-doc-non-dfsg. diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 00000000..cca09781 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,1175 @@ +make-dfsg (4.1-9.1) unstable; urgency=medium + + * Non-maintainer upload. + * Ensure the stack limit is reset when make re-execs itself. + (Closes: #853213) + + -- James Cowgill Tue, 31 Jan 2017 16:31:57 +0000 + +make-dfsg (4.1-9) unstable; urgency=low + + * Reword the manual page. 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. + + -- Manoj Srivastava Fri, 11 Mar 2016 17:31:03 -0800 + +make-dfsg (4.1-8) unstable; urgency=low + + * Bug fix: "manpage should document --jobserver-fds and the jobserver + pipe", thanks to Josh Triplett. Updated the manual page, and forwarded + this bug to upstream bug reporting system.(Closes: #781416). + + -- Manoj Srivastava Fri, 11 Mar 2016 14:16:58 -0800 + +make-dfsg (4.1-7) unstable; urgency=low + + * Updated standards version to 3.9.7. No changes needed. + * Bug fix: "-q fails for recursive makes", thanks to David Bremner + (Closes: #766140). + + -- Manoj Srivastava Wed, 09 Mar 2016 16:10:46 -0800 + +make-dfsg (4.1-6) unstable; urgency=low + + * Satsifiable cross build dependencies: libbsd-resource-perl is only needed + for running tests. Helmut Grohne + * Bug fix: "make-dfsg has unsatisfiable cross build dependendencies in a + bootstrap setting: libbsd-resource-perl", thanks to Helmut Grohne + (Closes: #812725). + + -- Manoj Srivastava Sun, 14 Feb 2016 21:15:11 -0800 + +make-dfsg (4.1-5) unstable; urgency=low + + * 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. + + -- Manoj Srivastava Sat, 23 Jan 2016 16:10:23 -0800 + +make-dfsg (4.1-4) unstable; urgency=low + + * Try to fix this bug. The problem is due to the fopen fail test, where + we fopen as many files as we can recursively before we run out of file + descriptors, and ensure that we exit with a failure message. The tests + times out on some machines. On abel, doubling the timeout was not + enough, but increasing it to 1200 seconds worked. + * Bug fix: "make 4.1 ftbfs on armel, armhf, mips, mipsel, powerpc, s390x + (test regressions)", thanks to Matthias Klose (Closes: #811408). + + -- Manoj Srivastava Fri, 22 Jan 2016 01:55:04 -0800 + +make-dfsg (4.1-3) unstable; urgency=low + + * Handle NULL return from ttyname + * Bug fix: "`make` always segfaults inside `strlen`", thanks to Tomasz + Melcer (Closes: #812244). + + -- Manoj Srivastava Fri, 22 Jan 2016 00:37:32 -0800 + +make-dfsg (4.1-2) unstable; urgency=low + + * Update the handling of the changed behaviour of ar. The fix in the + previous version has been rolled back. The new strategy is to narrowly + change running the test suite to pass in the U modifier to ar, and + change make to detect and warn the user of they are using the archive + rule like libxx(*.o) to generate archives, and the archives do not + contain time stamps. The warning advises the user to explicitly pass + in the modifier U in the environment variable ARFLAGS, which is + essentially what we did for the test suite. + + -- Manoj Srivastava Mon, 18 Jan 2016 15:57:45 -0800 + +make-dfsg (4.1-1) unstable; urgency=low + + * New upstream release + * Updated Standards version to 3.9.6. No changes needed. + * Updated the VCS-Git field of the control file to use HTTPS transport + * Updated the copyright file to DEP-5 format. + * Reverted to source format 1.0 , and use dgit + * Bug fix: "Typos in manpage", thanks to Josh Triplett + (Closes: #763147). + * Bug fix: "[make] make version 4.1 available", thanks to LeJacq, Jean + Pierre (Closes: #766383). + * Demote make to priority optional, along with gcc and such. And bump + make-guile to 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). + * Make make and make-guile be Multi-Arch: Allowed packages, since it + might not be feasible to make make architecture agnostic. + * Bug fix: "Please add U flag in the default ARFLAGS", thanks to + Celelibi. I tend to agree, this was a backwards incompatible + change. Make needs the timestamps to knpow when to update archie + members, so nuking the timestamps changes behaviour, and remake things + that need not be remade. This fails the principle of least surprise. I + added a default -U to the flags make passes to arl (Closes: #798804). + + -- Manoj Srivastava Sat, 16 Jan 2016 22:37:08 -0800 + +make-dfsg (4.0-8) unstable; urgency=high + + * Update the timeout for the fopen fail test to 300 seconds, since the + test was taking longer than the default 5 seconds to run. The root + cause was discovered by Víctor M. Jáquez L. (Closes: #748657) + * Bug fix #748657: "make-dfsg failed to run test: work/misc/fopen-fail.mk", + thanks to Yunqiang Su. + + -- Manoj Srivastava Fri, 13 Jun 2014 15:54:27 -0700 + +make-dfsg (4.0-7) unstable; urgency=low + + * There is an issue involving UTF-8 characters and the function + find_char_unquote (read.c). The problem in the macro STOP_SET + (makeint.h) where a character is converted to an int. Conversion to + int is not correct. Characters with codes greater than 0x7f ( in + particular in Cyrillic UTF- 8 ) into a large negative number. Thnks to + the analysis from Юрий Матронов . This bug was + independently reported and fixed upstream, so cherry picking that + commit from upstream (which also comes with a test). + (Closes: #747764). + * added a script that, given a list of targets, will build the first + target that actually exists. Script created by Joey Hess. + (Closes: #598534). + * Bug fix #747764: "make 4.0-5 bug", thanks to Юрий Матронов + * Bug fix #598534: "add make-first-existing-target", thanks to Joey Hess + + -- Manoj Srivastava Tue, 13 May 2014 18:22:39 -0700 + +make-dfsg (4.0-6) unstable; urgency=medium + + * Also create a new binary package, make-guile, which is identical to + the make package, but has built in support for Guile a a programming + langiage, and adds run time dependencies outside of libc. + (Closes: #747615, #747674). + * Bug fix #747615: "Please provide a version with Guile support + enabled", thanks to Jose Antonio Ortega Ruiz + * Bug fix #747674: "undeterministic build due to missing configure + arguments/build-conflicts", thanks to Bernhard R. Link + + -- Manoj Srivastava Sun, 11 May 2014 20:51:24 -0700 + +make-dfsg (4.0-5) unstable; urgency=low + + * When presented with a very very long command line (e.g. WebKit's linking + of libWebCore.la in current git), make fails to execute the command as + it doesn't split the command line to fit within the limits. There is a + patch used by people to solve this (gentoo, etc). Adam Conrad has + provided a patch to fix this. (Closes: #688601). + * Pre-4.0 make had an memory corruption issue that caused repeated + execution of a specific makefile to display the cirruption. Running + with make 4.0 does not show the issue. (Closes: #682895). + * recently, the Multi-Arch: foreign tag was added toth make binary + package. Jakub Wilk pointed out that this is not correct, some of the + make interfaces are actually architecture-dependent. Reverting that + change. + * Bug fix #688601: "fails to execute extraordinarily long command + lines", thanks to Daniel Stone + * Bug fix #682895: "incorrect variable handling and corruption", thanks + to Tim Spriggs + + -- Manoj Srivastava Sun, 04 May 2014 18:13:40 -0700 + +make-dfsg (4.0-4) unstable; urgency=low + + * Movint this version of make to unstable, All known problems exposed in + the archive rebuild have been fixed. There is no change in this + version apart from the ditribution change + + -- Manoj Srivastava Fri, 02 May 2014 18:32:32 -0700 + +make-dfsg (4.0-3) experimental; urgency=medium + + * Cherry pick upstream patch to Propagate correct rule status results. + * Bug fix: "New make behaviour confuses dpkg-buildpackages' test for + make targets". Fixed by above. (Closes: #746443). + + -- Manoj Srivastava Thu, 01 May 2014 22:09:08 -0700 + +make-dfsg (4.0-2) experimental; urgency=medium + + * Pull back some patches from upstream git that fix bugs. One of these + converts the mixed implicit and explicit rule error into a warning, + and that should give us a grace period to fix the Makefiles, + * Bug fix: "FTBFS with make 3.82 from experimental", thanks to Daniel + Schepler. This package was not reported broken in the archive rebuild: + see http://aws-logs.debian.net/ftbfs-logs/results-make4/ (Closes: #720686). + * Bug fix: "make 3.82: with -j tries to run receipes without + prerequisites yet done", thanks to Bernhard R. Link. This was not seen + in the archive rebuild, and the upstream report has ben closed a being + fixed in 4.0 (Closes: #722520). + * Bug fix: "run dh-autoreconf to update config.{sub,guess} and + {libtool,aclocal}.m4", thanks to Wookey. We now do indeed run + autoreconf. (Closes: #689626). + * Bug fix: "spurious circular dependency", thanks to Frank Heckenbach + Bug fixed in new version. (Closes: #669968). + * Bug fix: "make 3.82: fails to parse archive syntax", thanks to Andrew + Shadura (Closes: #675612). + * Bug fix: "binary package make lacks "Multi-Arch: foreign" + declaration", thanks to Helmut Grohne (Closes: #693926). + * Bug fix: "make 3.82 breaks kernel module build: 'mixed implicit + and normal rules' in linux-headers-*", thanks to Dean Loros + (Closes: #635317). + * Bug fix: "please package upstream version 4.0", thanks to Andrew + Shadura (Closes: #734387). + * Bug fix: "optionally echo all commands, even if preceded with @", + thanks to Vincent Lefevre (Closes: #451092). + * Bug fix: ""Make is a HUGE memory hog"", thanks to Matthias + Klose (Closes: #342726). + + -- Manoj Srivastava Mon, 28 Apr 2014 23:57:19 -0700 + +make-dfsg (4.0-1) experimental; urgency=low + + * New upstream release + + -- Manoj Srivastava Sat, 12 Apr 2014 18:49:59 -0700 + +make-dfsg (3.82-1) experimental; urgency=low + + * New upstream release. A complete list of bugs fixed in this version is + available here: + http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set=custom + * Bug fix: "parallel (-j2) make with $(eval) construct segfaults", + thanks to Bjoern Michaelsen.The fix has been included in the new + version. (Closes: #622644). + * Bug fix: "improving the package description (again)", thanks to Justin + B Rye (Closes: #612195). + + -- Manoj Srivastava Mon, 18 Jul 2011 01:05:46 -0700 + +make-dfsg (3.81-8.1) unstable; urgency=low + + * Non-maintainer upload. + * remake.c, configure.in: prepend multiarch paths to the library path in + library_search() when we have a target dependency of '-lfoo', so that + this still works when all our libraries are moving to multiarch library + directories. Closes: #618840, LP: #737641. + + -- Steve Langasek Sat, 09 Apr 2011 19:51:46 +0000 + +make-dfsg (3.81-8) unstable; urgency=low + + * New bug fixing release. + * [a6f53b8]: [topic--overlap-strcpy-fix]: make corrupts commands with + latest eglibc make uses strcpy() on overlapping strings, recent + (e)glibc doesn't tolerate this. strcpy is not defined to work on + overlapping regions. This is upstream bug + https://savannah.gnu.org/bugs/index.php?29253 The fix comes thanks + to Roderich Schupp and Max Bowsher. + Bug fix: "make corrupts commands with latest eglibc (strcpy of + overlapping strings)", thanks to Roderich Schupp (Closes: #568665). + * Bug fix: "make package built from source missing libc6 dependency", + thanks to Daniel Schepler (Closes: #569924). + * Bug fix: "Please build-depend on autopoint", thanks to Santiago Vila + (Closes: #572474). + + -- Manoj Srivastava Sun, 21 Mar 2010 12:42:55 -0700 + +make-dfsg (3.81-7) unstable; urgency=low + + * Checked against latest policy. Added few minor tweaks to fix problems + pointed out b lintian, and removed a false positive lintian check. + + -- Manoj Srivastava Sun, 01 Nov 2009 20:28:51 -0600 + +make-dfsg (3.81-6) unstable; urgency=low + + * [debian:8ea2843]: [make-dfsg]: Update package description + Update and trim the package description. + Bug fix: "improving the package description", thanks to Justin B Rye + (Closes: #508456). + * [debian:586087b]: [make-dfsg]: Use autoreconf to refresh the build system. + Bug fix: "FTBFS: Outdated config.{sub,guess}", thanks to Bradley Smith + (Closes: #533681). + * [4ae7fd6]: [topic--override-fix]: Fix override behaviour discrepancies + target specific override appears to be ignored completely if the + variable is passed on the command line. Closes: 524378 + Bug fix: "corner cases in 'override' logic for variables", + thanks to Ron (Closes: #524378). + + -- Manoj Srivastava Sun, 21 Jun 2009 11:40:43 -0500 + +make-dfsg (3.81-5) unstable; urgency=low + + * Record the fact that this package has moved to a new git repository. + * Move to the new, make -j friendly targets in debian/rules. + + -- Manoj Srivastava Mon, 02 Jun 2008 09:37:36 -0500 + +make-dfsg (3.81-4) unstable; urgency=low + + * NMU ack. double free or corruption bug on file globbing, 419190. + * Bug fix: "make: Directory Search for Link Libraries does not look in + /usr/local/lib", thanks to Daniel Barlow. In the Debian binaries, + PREFIX is /usr and thus this searches /lib, /usr/lib and /usr/lib + again and therefore misses any libraries that are not packaged and + were installed by the site admin. The ideal behaviour would be to + have the search path set by a Makefile variable (other than the VPATH + blunt object) but even absent that, it would be more useful if it + looked in /usr/local/lib even though make itself hasn't been installed + in the /usr/local tree. Closes: Bug#288592 + * Bug fix: "make: make should suggest make-doc not make-doc-non-dfsg + which is a source package", thanks to lukpank@o2.pl (Łukasz Pankowski) + Closes: Bug#473759 + + -- Manoj Srivastava Thu, 03 Apr 2008 02:04:02 -0500 + +make-dfsg (3.81-3.1) unstable; urgency=low + + * NMU with permission. + * Bug fix: Avoid double-free on file globbing. (Closes: #419190). + * Misc: Updated standards version to 3.7.3 (no changes) + + -- Steve Kemp Thu, 13 Mar 2008 19:50:10 +0000 + +make-dfsg (3.81-3) unstable; urgency=low + + * Bug fix: "typo in make.1", thanks to LI Daobing (Closes: #375984). + * Bug fix: "Please suggest make-doc", thanks to Moritz Muehlenhoff + (Closes: #362297). + + -- Manoj Srivastava Mon, 11 Sep 2006 15:10:59 -0500 + +make-dfsg (3.81-2) unstable; urgency=low + + * Bug fix: "Please suggest make-doc", thanks to Moritz Muehlenhoff + (Closes: #362297). + + -- Manoj Srivastava Wed, 3 May 2006 21:49:55 -0500 + +make-dfsg (3.81-1) unstable; urgency=low + + * New upstream release + + -- Manoj Srivastava Mon, 10 Apr 2006 17:24:57 -0500 + +make-dfsg (3.80+3.81.rc2-1) unstable; urgency=low + + * New upstream release candidate. + * Bug fix: "Make always recompiles everything in the Linux Kernel.", + thanks to Neil Brown. This is really a bug in the kernel build system, + not make. However, this release defers the change so as not to trigger + the bug. (Closes: #356552, #356630). + + + -- Manoj Srivastava Mon, 20 Mar 2006 15:37:15 -0600 + +make (3.80+3.81.rc1-1) unstable; urgency=low + + * New upstream release candidate. + * Bug fix: "make: the '-W ' option used with VPATH does not work + correctly", thanks to Jeff Sheinberg (Closes: #107624). + * Bug fix: "make shows incorrect line number in error report", thanks to + Nikita V. Youshchenko (Closes: #274840). + * Bug fix: "make: [doc] Implicit Rules: C++", thanks to LI Daobing + (Closes: #335044). + + -- Manoj Srivastava Fri, 24 Feb 2006 16:56:54 -0600 + +make (3.80+3.81.b4-1) unstable; urgency=low + + * New upstream pre release + * Bug fix: "FTBFS due to timestamp skews", thanks to Loïc Minier + Use MAINTAINER_MODE instead. (Closes: #343069). + * Bug fix: "make: Missing information about backward-incompatibility", + thanks to Vincent Lefevre. As Ken Bloom pointed out, the correct + section is command execution. (Closes: #343088). + * Since there is a new texinfo.tex we use now, no longer remove it, + since autoreconf shall fail if that file is missing. + + -- Manoj Srivastava Tue, 13 Dec 2005 22:43:19 -0600 + +make (3.80+3.81.b3.1-1) unstable; urgency=low + + * New upstream CVS HEAD (we are in a pre-release mode. + * Bug fix: "make: new version breaks cdbs", thanks to Aurelien Jarno + (Closes: #342879). + + -- Manoj Srivastava Mon, 12 Dec 2005 13:38:47 -0600 + +make (3.80+3.81.b3-1) unstable; urgency=low + + * New upstream pre-release. + * Bug fix: "make: continued command lines are not passed to the shell + correctly", thanks to Jeff Sheinberg. This has been fixed in this release. + (http://savannah.gnu.org/bugs/?func=detailitem&item_id=1332) (Closes: #59311). + * Bug fix: "make: bogus output of make -np", thanks to P�sztorSzil�rd I + believe this bug is the result of a known, rare, and already-fixed + problem with the parser that occurs if a line is exactly the right + length. (Closes: #117566). + * Bug fix: "make segfault with -t", thanks to Philipp Meier + (https://savannah.gnu.org/bugs/index.php?func=detailitem&item_id=1418) + (Closes: #279900). + * Bug fix: "make -f '' dumps core", thanks to Peter Maydell (Closes: #164165). + * Bug fix: "make: documentation of VPATH does not match behavior", + thanks to Matthew Swift (Closes: #176639). + + -- Manoj Srivastava Fri, 9 Dec 2005 21:28:14 -0600 + +make (3.80-12) unstable; urgency=low + + * Bug fix: "FTBFS: DVI file cannot be opened", thanks to Matt Kraai. It + seemed odd to me that the buildd's do not seem to have a problem. On + investigation, if one does an apt-get source make, + ./config/texinfo.tex is still there: merely removing it from my + working tree does not remove it from the unpacked, patched source + tree, since diff merely ignores file deletions. I worked for me, since + the file was actually gone from my working dir; it worked on buildd's, + since they never remake the arch independent parts. So, now we + aggressively delete ./config/texinfo.tex all through the build and + clean process. (Closes: #334953). + + -- Manoj Srivastava Tue, 6 Dec 2005 11:19:45 -0600 + +make (3.80-11) unstable; urgency=low + + * Bug fix: "make: FTBFS with teTeX-3.0", thanks to Frank Küster. Remove + the offending file (though not just in the clean target) (Closes: #322353). + + -- Manoj Srivastava Wed, 10 Aug 2005 14:09:28 -0500 + +make (3.80-10) unstable; urgency=low + + * Bug fix: "FTBFS: Cannot find HTML documentation", thanks to Matt Kraai + (Closes: #317859). + * Bug fix: "make: [INTL:de] German PO file corrections", thanks to Jens + Seidel (Closes: #313988). + * Bug fix: "make: broken reference in info documentation", thanks to + Jason McCarty (Closes: #286766). + * Bug fix: "make: eval function within 'ifeq... else... endif' causes + error", thanks to François Duranleau (Closes: #296482). + + -- Manoj Srivastava Sun, 7 Aug 2005 08:23:35 -0500 + +make (3.80-9) unstable; urgency=low + + * Bug fix: "make: reads uninitialized memory", thanks to Steinar + H. Gunderson (Closes: #260468). + * Bug fix: "XSI:ism in debian-scripts", thanks to David Weinehall + (Closes: #257578). + + -- Manoj Srivastava Thu, 22 Jul 2004 13:01:45 -0500 + +make (3.80-8) unstable; urgency=low + + * Bug fix: "make: Explanations file cut off on right", thanks to Ross + Boylan (Closes: #253357). + * Removed the old dwww/menu entry. Now we use the preferred doc-base + registration method. + + -- Manoj Srivastava Wed, 23 Jun 2004 00:19:49 -0500 + +make (3.80-7) unstable; urgency=low + + * Bug fix: "make: some options missing from manpage", thanks to Martin + Pool. This also was previously raised in #233474. I added a note to + the man page stating that the list of options is a partial list, and + pointed to the info docs for an authoritative list. (Closes: #243845). + * Bug fix: "make: German l10n: Updating po/de.po", thanks to Florian + Ernst (Closes: #244119). + + -- Manoj Srivastava Tue, 20 Apr 2004 16:32:07 -0500 + +make (3.80-6) unstable; urgency=low + + * make_3.80-5(ia64/unstable): FTBFS: missing build-depends?, Actually, + no. I got bitten by the non support of build-deps-indep again. I have + now duplicated the indep dependencies into build depends, so this + should now work. + * Added an explanation for the behaviour of make, which demonstrates + that the dry-run of double colon rules and the behaviour of multi + target rules is expected behaviour. + * Bug fix: "make: strange behavior with multi-target rules", thanks to + Ian Zimmerman. Not a bug, as documented in the explanations file + referred to above. (Closes: #218367). + * Bug fix: "dry-run of double-colon rules?", thanks to Fumitoshi UKAI + Not a bug, as documented in the explanations file referred to above. + (Closes: #214592). + + -- Manoj Srivastava Sat, 21 Feb 2004 17:14:51 -0600 + +make (3.80-5) unstable; urgency=low + + * Moved to the new build system, and arch. + * Updated to the latest policy version + * Bug fix: "make uses a way old Polish translation", thanks to Michał + Politowski. I actually updated a whole set of .po files from the + translation project. (Closes: #229620). + + -- Manoj Srivastava Mon, 16 Feb 2004 17:09:47 -0600 + +make (3.80-4) unstable; urgency=low + + * Add AM_MAINTAINER_MODE to config.in, and regenerate all autoconf + related files. + * Mention that the documentation is distributed under the GFDL. + + -- Manoj Srivastava Wed, 24 Sep 2003 03:39:12 -0500 + +make (3.80-3) unstable; urgency=low + + * Fixed usage of chown root.root in the rules files. + * Updates all the auto* files with the latest version of the tool + chain. It should now work with the newest versions. Removed automake + as build a dependency. Thanks to Santiago Vila for + noticing this, and providing a patch, though the patch was not used + for this version. closes: Bug#210881 + + -- Manoj Srivastava Sun, 14 Sep 2003 14:32:15 -0500 + +make (3.80-2) unstable; urgency=low + + * "*** virtual memory exhausted" fixed in mainline CVS. Backported + thanks to Samium Gromoff. The fix involves saving and restoring + varible buffer contexts around eval'd code. closes: Bug#197886 + + -- Manoj Srivastava Sat, 5 Jul 2003 15:38:10 -0500 + +make (3.80-1) unstable; urgency=low + + * New upstream version with various bugs fixed. + * This bug was forwarded back to make, but make had already been + fixed. In the new version, this has been fixed for real, as opposed to + just having a workaround. closes: Bug#160174 + * depend on coreutils rather than the deprecated fileutils closes: Bug#161449 + * The new release also fixes this bug. closes: Bug#144306, Bug#80783 + + * A new feature exists: order-only prerequisites. These prerequisites + affect the order in which targets are built, but they do not impact + the rebuild/no-rebuild decision of their dependents. That is to say, + they allow you to require target B be built before target A, without + requiring that target A will always be rebuilt if target B is updated. + Patch for this feature provided by Greg McGary . + + * For compatibility with SysV make, GNU make now supports the peculiar + syntax $$@, $$(@D), and $$(@F) in the prerequisites list of a rule. + This syntax is only valid within explicit and static pattern rules: it + cannot be used in implicit (suffix or pattern) rules. Edouard + G. Parmelan provided a patch implementing this + feature; however, I decided to implement it in a different way. + + * The argument to the "ifdef" conditional is now expanded before it's + tested, so it can be a constructed variable name. + + Similarly, the arguments to "export" (when not used in a variable + definition context) and "unexport" are also now expanded. + + * A new function is defined: $(value ...). The argument to this + function is the _name_ of a variable. The result of the function is + the value of the variable, without having been expanded. + + * A new function is defined: $(eval ...). The arguments to this + function should expand to makefile commands, which will then be + evaluated as if they had appeared in the makefile. In combination + with define/endef multiline variable definitions this is an extremely + powerful capability. The $(value ...) function is also sometimes + useful here. + + * A new built-in variable is defined, $(MAKEFILE_LIST). It contains a + list of each makefile GNU make has read, or started to read, in the + order in which they were encountered. So, the last filename in the + list when a makefile is just being read (before any includes) is the + name of the current makefile. + + * A new built-in variable is defined: $(.VARIABLES). When it is + expanded it returns a complete list of variable names defined by all + makefiles at that moment. + + * A new command-line option is defined, -B or --always-make. If + specified GNU make will consider all targets out-of-date even if they + would otherwise not be. + + * The arguments to $(call ...) functions were being stored in $1, $2, + etc. as recursive variables, even though they are fully expanded + before assignment. This means that escaped dollar signs ($$ etc.) + were not behaving properly. Now the arguments are stored as simple + variables. This may mean that if you added extra escaping to your + $(call ...) function arguments you will need to undo it now. + + * The variable invoked by $(call ...) can now be recursive: unlike other + variables it can reference itself and this will not produce an error + when it is used as the first argument to $(call ...) (but only then). + + * New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure + option --disable-nsec-timestamps. You might need this if your build + process depends on tools like "cp -p" preserving time stamps, since + "cp -p" (right now) doesn't preserve the subsecond portion of a time + stamp. + + * Updated translations for French, Galician, German, Japanese, Korean, + and Russian. New translations for Croatian, Danish, Hebrew, and + Turkish. + + * Updated internationalization support to Gettext 0.11.5. + GNU make now uses Gettext's "external" feature, and does not include + any internationalization code itself. Configure will search your + system for an existing implementation of GNU Gettext (only GNU Gettext + is acceptable) and use it if it exists. If not, NLS will be disabled. + See ABOUT-NLS for more information. + + * Updated to autoconf 2.54 and automake 1.7. Users should not be impacted. + + -- Manoj Srivastava Fri, 25 Oct 2002 15:34:16 -0500 + +make (3.79.1-15) unstable; urgency=low + + * use which instead of command -v + * Removed the /usr/doc symlinks. Moved to the new cflag and optimization + rules. Bumped the standards version + * Hack Makefile.in not to run the automake/aclocal.autoheader/autoconf + junk, since they suddenly changed the interface. + + -- Manoj Srivastava Mon, 9 Sep 2002 02:02:36 -0500 + +make (3.79.1-14) unstable; urgency=medium + + * Include all the docs in the make-doc package closes: Bug#144195 + + -- Manoj Srivastava Tue, 23 Apr 2002 09:02:17 -0500 + +make (3.79.1-13) unstable; urgency=low + + * Incorporate a patch from "Paul D. Smith" that fixes + the problem in expansion of target specific variables. closes: Bug#132646 + + -- Manoj Srivastava Fri, 22 Feb 2002 10:50:43 -0600 + +make (3.79.1-12) unstable; urgency=low + + * Fixed lintian warnings. + * added upstream location to the description. + * The upstream author has clarified that the behaviour described is not + a bug, but a consciously chosen tone. Theere is a workaround to this + problem: (put the "include b.mak" _inside_ of the a.mak file, so that + GNU make won't see it until after it includes a.mak, whereupon it will + also know how to build b.mak). closes: Bug#62051 + + -- Manoj Srivastava Sat, 26 Jan 2002 00:01:26 -0600 + +make (3.79.1-11) unstable; urgency=low + + * Add a build dependency on texinfo, without which info files were not + being provided on all architectures. closes: Bug#124165 + * When make gets ready to build a target, it evaluates all commands + needed to build that target at once, before the first line is + invoked. Thus the behaviour displayed is not a bug closes: Bug#119663 + * All variable and function expansion for targets and prerequisite lists + occurs when the makefile is read in, well before any sort of pattern + expansion occurs; so these functions are operating on the static + string "%", not the string it will expand to after pattern matching. + closes: Bug#110728 + + -- Manoj Srivastava Sun, 6 Jan 2002 01:45:51 -0600 + +make (3.79.1-10) unstable; urgency=low + + * Acknowledgement of NMU's closes: Bug#107943, Bug#107944, Bug#108632 + * Don't drag in librt and libpthread unless we need to. closes: Bug#107704 + * Make sure the documentation is included in the package. closes: Bug#109080 + + -- Manoj Srivastava Sun, 19 Aug 2001 23:44:55 -0500 + +make (3.79.1-9.2) unstable; urgency=low + + * NMU + * Move gettext to Build-Depends (instead of -Indep). Closes: #108632. + + -- LaMont Jones Mon, 13 Aug 2001 20:55:04 -0600 + +make (3.79.1-9.1) unstable; urgency=low + + * Non maintainer upload on behalf of Manoj. + * Added gettext to duild-depends. + + -- Roland Mas Mon, 13 Aug 2001 10:21:00 +0200 + +make (3.79.1-9) unstable; urgency=low + + * The french translation of this application translates 'free software' + into 'logiciel gratuit' instead of 'logiciel libre'. closes: Bug#106720 + + -- Manoj Srivastava Tue, 31 Jul 2001 01:20:57 -0500 + +make (3.79.1-8) unstable; urgency=low + + * s/#@/$@@/ in the texinfo file. closes: Bug#104130 + + -- Manoj Srivastava Tue, 17 Jul 2001 21:49:58 -0500 + +make (3.79.1-7) unstable; urgency=low + + * Updated config.sub/config.gues from a recent version. This + closes: Bug#99122 + + -- Manoj Srivastava Wed, 4 Jul 2001 20:36:22 -0500 + +make (3.79.1-6) unstable; urgency=low + + * Added a fix from "Paul D. Smith" that fixes a problem + with make not echoing commands correctly. closes: Bug#72802 + + -- Manoj Srivastava Thu, 10 May 2001 09:19:58 -0500 + +make (3.79.1-5) unstable; urgency=low + + * fixed command execution in make. closes: Bug#89310 + + -- Manoj Srivastava Wed, 25 Apr 2001 02:52:38 -0500 + +make (3.79.1-4) unstable; urgency=medium + + * GNgngngng. The last upload is broken, thanks to the autoconf + breakage. This also breaks fakeroot, since make tries to add/drop seteuid + priviledges when it shouldn't. closes: #84201 + closes: Bug#84184, Bug#84182, Bug#84185, Bug#84179, Bug#84198 + + -- Manoj Srivastava Tue, 30 Jan 2001 19:45:58 -0600 + +make (3.79.1-3) unstable; urgency=medium + + * A bug in autoconf made make setgid kmem. That opens up /dev/kmem and + /dev/mem to make processes in a mistaken assumption that one needs to + be setgid kmem to read loadaverages on linux. This version has been + built with a modified autoconf not to do that, and as a precaution + does not install make setgid kmem. + * Make sure the binary is stripped as per lintian requirements. + + -- Manoj Srivastava Tue, 30 Jan 2001 15:16:49 -0600 + +make (3.79.1-2) unstable; urgency=low + + * Added a CRLF patch that is already in make CVS, and has recieved + extensive testing, and fixes an issue with reading files. + * Added the patch that fixes a polish grammar issue with the + informational messages make emits. (an alternate solution is in + upstream). closes: Bug#72414 + + -- Manoj Srivastava Tue, 30 Jan 2001 11:25:08 -0600 + +make (3.79.1-1.potato.1) stable; urgency=low + + * This is an update for potato. There are no changes made since the + update for woody 45 days ago. The old make did not honour the + MAKEFILES variable, this closes: Bug#71261 + * I have heard rimours that the old make did not correctly build libc + either, and one needs this version. I can't say for sure, since no bug + was ever filed. + + -- Manoj Srivastava Mon, 11 Sep 2000 14:04:10 -0500 + +make (3.79.1-1) unstable; urgency=low + + * New upstream release. closes: Bug#67862 + * .SECONDARY with no prerequisites now prevents any target from being + removed because make thinks it's an intermediate file, not just those + listed in the makefile. + * New configure option --disable-nsec-timestamps will keep make from + using sub-second timestamps on systems which support it. If your + build process depends on proper timestamp-preserving behavior of tools + like "cp -p" you might need this option, since "cp -p" (right now) + doesn't preserve the sub-second portion of the timestamp. + * Folded Adam Heath's fix for $(shell). closes: #67568 + + -- Manoj Srivastava Fri, 28 Jul 2000 16:15:10 -0500 + +make (3.79-2.1) unstable; urgency=low + + * Set the first byte of buffer to 0, in func_shell. Closes: #67568. + + -- Adam Heath Fri, 21 Jul 2000 18:43:17 -0500 + +make (3.79-2) unstable; urgency=low + + * Hmm. Setting the install prefix to a relative value does not work; the + locale files were not installed in debian/tmp/usr/share/locale, but + locallyinto i18n/debian/tmp/usr/share/locale. This has been fixed + now. closes: Bug#66237 + + -- Manoj Srivastava Wed, 12 Jul 2000 10:05:53 -0500 + +make (3.79-1) unstable; urgency=low + + * New upstream release, adds fixes already present in Debian. This + closes: Bug#62619 + changes are: + * GNU make optionally supports internationalization and locales via + the GNU gettext (or local gettext if suitable) package. See the + ABOUT-NLS file for more information on configuring GNU make for + NLS. + * Previously, GNU make quoted variables such as MAKEFLAGS and + MAKEOVERRIDES for proper parsing by the shell. This allowed them to + be used within make build scripts. However, using them there is not + proper behavior: they are meant to be passed to subshells via the + environment. Unfortunately the values were not quoted properly to be + passed through the environment. This meant that make didn't properly + pass some types of command line values to submakes. + + With this version we change that behavior: now these variables are + quoted properly for passing through the environment, which is the + correct way to do it. If you previously used these variables + explicitly within a make rule you may need to re-examine your use for + correctness given this change. + * A new psuedo-target .NOTPARALLEL is available. If defined, the + current makefile is run serially regardless of the value of -j. + However, submakes are still eligible for parallel execution. + * The --debug option has changed: it now allows optional flags + controlling the amount and type of debugging output. By default only + a minimal amount information is generated, displaying the names of + "normal" targets (not makefiles) were deemed out of date and in need + of being rebuilt. + + Note that the -d option behaves as before: it takes no arguments and + all debugging information is generated. + * The `-p' (print database) output now includes filename and linenumber + information for variable definitions, to help debugging. + * The wordlist function no longer reverses its arguments if the "start" + value is greater than the "end" value. If that's true, nothing is + returned. + * Hartmut Becker provided many updates for the VMS port of GNU make. + See the readme.vms file for more details. + + -- Manoj Srivastava Fri, 28 Apr 2000 17:37:53 -0500 + +make (3.78.1-8) frozen unstable; urgency=low + + * Use absolute links when related links would not work, for the + /usr/doc/ symlink. + * Added a dependency on fileutiles >=4.0, since the package would fail + to install with older fileutils. + + -- Manoj Srivastava Tue, 28 Mar 2000 01:58:05 -0600 + +make (3.78.1-7) frozen unstable; urgency=low + + * Fixed security fix to match upstream changes. Fixed an upgrade bug when + /usr/doc happens to be a symlink, and does not point to + /usr/share/doc. A couple of people were bitten by this. + + -- Manoj Srivastava Mon, 28 Feb 2000 22:27:05 -0600 + +make (3.78.1-6) frozen unstable; urgency=high + + * Use mkstemp where available. This fixes a security bug in make. + The bug report does not seem to have made its way into the bts yet. + + -- Manoj Srivastava Fri, 11 Feb 2000 18:07:20 -0600 + +make (3.78.1-5) frozen unstable; urgency=low + + * The postinst was vulnerable to being affected by symlinks (if, for + some reason, the prerm failed). This has happended for latex2html; and + created a grave bug. + * There was a bug in the postinst in a case statement, that caused + installation to fail for certain situations. + * Also fixed an lintian warning + + -- Manoj Srivastava Tue, 8 Feb 2000 15:46:36 -0600 + +make (3.78.1-4) frozen unstable; urgency=low + + * Added a glibc fix to dir.c (the bug expressed itself as a wildards + bug). Thaks go to Richard B. Kreckel for spotting the bug, and to + Andreas Jaeger and Joel Klecker for the solution. Forwarded fix upstream. + + -- Manoj Srivastava Mon, 7 Feb 2000 01:18:30 -0600 + +make (3.78.1-3) unstable; urgency=low + + * Release to fold in NMU fixed bugs. closes: Bug#47686, #47362, #49137, #49381 + * Changed the root check to look for uid 0, not the username root (think + sashroot or toor) + + -- Manoj Srivastava Thu, 3 Feb 2000 02:06:06 -0600 + +Old Changelog: + +make (3.78.1-1.1) unstable; urgency=low + + * Non maintainer upload. + * Changed debian/docentry to point to /usr/share/doc instead of + /usr/doc (closes: #47686, #47362, #49137, #49381). + + -- Torsten Landschoff Sun, 21 Nov 1999 01:30:56 +0100 + +make (3.78.1-2) unstable; urgency=low + + * Updated to the latest version. closes: Bug#46902 + * New upstream deleted mention of where to find info files (/usr/info/ + or /usr/share/info). closes: Bug#49886 + * Fix location where the man page is installed. closes: Bug#47736 + + -- Manoj Srivastava Wed, 1 Dec 1999 11:34:17 -0600 + +make (3.78.1-1.1) unstable; urgency=low + + * Non maintainer upload. + * Changed debian/docentry to point to /usr/share/doc instead of + /usr/doc (closes: #47686, #47362, #49137, #49381). + + -- Torsten Landschoff Sun, 21 Nov 1999 01:30:56 +0100 + +make (3.78.1-1) unstable; urgency=low + + * New upstream release, which fixes a number of problems. + * Moved to the FHS + + -- Manoj Srivastava Mon, 11 Oct 1999 22:11:03 -0500 + +make (3.77-7) unstable; urgency=low + + * Added patch from the author to correct ?= behaviour. closes: 37526 + + -- Manoj Srivastava Thu, 13 May 1999 23:21:59 -0500 + +make (3.77-6) unstable; urgency=low + + * Added support fro doc base. closes: Bug#31184 + * Upgraded all maintainer scripts to my latest standards + * Upgraded to the latest standards version (no changes were required) + + -- Manoj Srivastava Sat, 27 Feb 1999 22:39:29 -0600 + +make (3.77-5) unstable; urgency=low + + * Fixed a minor typo in documentation. fixes: BUG#31506 + + -- Manoj Srivastava Mon, 25 Jan 1999 16:55:00 -0600 + +make (3.77-4) frozen unstable; urgency=medium + + * Somehow, aclocal.m4 got unpatched, and created a dependency on + libelf. Reapplied patch. This should now not create a spurious + dependency on libelfg0 even if the gremlins cause automake to be run + to recreate configure. closes: BUG#29135 + + -- Manoj Srivastava Sat, 7 Nov 1998 23:29:40 -0600 + +make (3.77-3) frozen unstable; urgency=high + + * Appled more patches to fix the glob problem with the new glibc. patch + provided by Christopher C Chimelis . + closes: BUG#28723, BUG#28724 + + -- Manoj Srivastava Tue, 3 Nov 1998 17:47:55 -0600 + +make (3.77-2) unstable; urgency=low + + * Applied patch to correct glob problems that make has with glibc + 2.0.9x. I had to additionally patch aclocal.m4 in ./glob/ in order to + compile. Seems to work OK on i386. closes: BUG#26785 + * Removed icon=none from the menuentry for the documentation. This + saitsfies lintian. + + -- Manoj Srivastava Wed, 23 Sep 1998 14:32:08 -0500 + +make (3.77-1) unstable; urgency=low + + * New upstream version. Excerpted changes: + * Implement BSD make's "?=" variable assignment operator. The variable + is assigned the specified value only if that variable is not already + defined. + * Make defines a new variable, "CURDIR", to contain the current working + directory (after the -C option, if any, has been processed). + Modifying this variable has no effect on the operation of make. + * Make defines a new default RCS rule, for new-style master file + storage: ``% :: RCS/%'' (note no ``,v'' suffix). + + Make defines new default rules for DOS-style C++ file naming + conventions, with ``.cpp'' suffixes. All the same rules as for + ``.cc'' and ``.C'' suffixes are provided, along with LINK.cpp and + COMPILE.cpp macros (which default to the same value as LINK.cc and + COMPILE.cc). Note CPPFLAGS is still C preprocessor flags! You should + use CXXFLAGS to change C++ compiler flags. + * A new feature, "target-specific variable values", has been added. + This is a large change so please see the appropriate sections of the + manual for full details. Briefly, syntax like this: + + TARGET: VARIABLE = VALUE + + defines VARIABLE as VALUE within the context of TARGET. This is + similar to SunOS make's "TARGET := VARIABLE = VALUE" feature. Note + that the assignment may be of any type, not just recursive, and that + the override keyword is available. + + COMPATIBILITY: This new syntax means that if you have any rules where + the first or second dependency has an equal sign (=) in its name, + you'll have to escape them with a backslash: "foo : bar\=baz". + Further, if you have any dependencies which already contain "\=", + you'll have to escape both of them: "foo : bar\\\=baz". + * A new appendix listing the most common error and warning messages + generated by GNU make, with some explanation, has been added to the + GNU make User's Manual. + * Updates to the GNU make Customs library support (see README.customs). + * Updates to the Windows 95/NT port from Rob Tulloh (see README.W32), + and to the DOS port from Eli Zaretski (see README.DOS). + + -- Manoj Srivastava Fri, 31 Jul 1998 10:30:43 -0500 + +make (3.76.1-8) unstable; urgency=low + + * Move info page removal to prerm as per policy. + + -- Manoj Srivastava Wed, 25 Feb 1998 17:38:10 -0600 + +make (3.76.1-7) unstable; urgency=low + + * Mentioned the fact that the GPL is available on the filesystem in the + copyright file. + + -- Manoj Srivastava Fri, 13 Feb 1998 13:16:58 -0600 + +make (3.76.1-6) unstable; urgency=low + + * Fixed the old fsf version in the copyright file. + * Read the new policy document. I think make complies with 2.4.0.0, so + it has been upgraded. + * That fixes all the problems reported by lintian. + + -- Manoj Srivastava Mon, 9 Feb 1998 13:07:56 -0600 + +make (3.76.1-5) unstable; urgency=low + + * Give a changed info dir descriotion, so that a simple "info make" does + the right thing. closes:Bug#14879. + + -- Manoj Srivastava Sun, 16 Nov 1997 00:50:22 -0600 + +make (3.76.1-4) unstable; urgency=low + + * Make sure the copyright file is not compressed. + closes:Bug#14426,Bug#14427 + + -- Manoj Srivastava Wed, 5 Nov 1997 11:53:03 -0600 + +make (3.76.1-3) unstable; urgency=low + + * With Stellar help from Stephen Zander , changed the + aclocal.m4 file (already present in the upstream sources) to override + the function that checks for libelf. This should now not create a + spurious dependency on libelfg0 even if the gremlins cause automake to + be run to recreate configure. + + -- Manoj Srivastava Wed, 29 Oct 1997 14:22:37 -0600 + +make (3.76.1-2) unstable; urgency=low + + * Removed dependency on libelf by convincinf configure that unlike + Solaris, Linux does not need an explicit -lelf (again). + + -- Manoj Srivastava Sat, 25 Oct 1997 02:24:13 -0500 + +make (3.76.1-1) unstable; urgency=low + + * Small (but serious) bug fix. main.c (main): Arg count should be int, + not char! Major braino. + * changes to upstream Makefiles + + -- Manoj Srivastava Fri, 3 Oct 1997 11:53:45 -0500 + +make (3.76-1) unstable; urgency=low + + * New upstream update. Changes: + * GNU make now uses automake to control Makefile.in generation. This + should make it more consistent with the GNU standards. + * VPATH functionality has been changed to incorporate the VPATH+ patch, + previously maintained by Paul Smith . See the + manual. + * Make defines a new variable, `MAKECMDGOALS', to contain the goals that + were specified on the command line, if any. Modifying this variable + has no effect on the operation of make. + * A new function, `$(wordlist S,E,TEXT)', is available: it returns a + list of words from number S to number E (inclusive) of TEXT. + * Instead of an error, detection of future modification times gives a + warning and continues. The warning is repeated just before GNU make + exits, so it is less likely to be lost. + * Fix the $(basename) and $(suffix) functions so they only operate on + the last filename, not the entire string: + Command Old Result New Result + ------- ---------- ---------- + $(basename a.b) a a + $(basename a.b/c) a a.b/c + $(suffix a.b) b b + $(suffix a.b/c) b/c + * The $(strip) function now removes newlines as well as TABs and spaces. + * The $(shell) function now changes CRLF (\r\n) pairs to a space as well + as newlines (\n). + * Updates to the Windows 95/NT port from Rob Tulloh (see README.W32). + * Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS + and MS-Windows, building with the DJGPP v2 port of GNU C/C++ compiler + and utilities. See README.DOS for details, and direct all questions + concerning this port to Eli Zaretskii or DJ + Delorie . + * John W. Eaton has updated the VMS port to support libraries and VPATH. + * Make sure that the manual pages are installed. + + -- Manoj Srivastava Tue, 16 Sep 1997 23:23:27 -0500 + +make (3.75-6) unstable; urgency=low + + * Built with libc6 + + -- Manoj Srivastava Fri, 16 May 1997 11:07:17 -0500 + +make (3.75-5) unstable; urgency=low + + * Improved postinst/postrm scripts + * Added menu entry for the HTML files provided by make-doc + * Added documentation package make-doc + + -- Manoj Srivastava Wed, 7 May 1997 18:17:47 -0501 + +make (3.75-4) unstable; urgency=low + + * Removed HTML files because of size considerations. This fixes Bug#7867. + + -- Manoj Srivastava Thu, 6 Mar 1997 14:34:00 -0600 + +make (3.75-3) unstable; urgency=low + + * Added more documents to the /usr/doc/make directory. + * Added dww index + * Added HTML documentation to /usr/doc/make + * Removed dependency on libelf by convincinf configure that unlike + Solaris, Linux does not need an explicit -lelf. This fixes Bug#7807 + + -- Manoj Srivastava Tue, 4 Mar 1997 10:36:14 -0600 + +make (3.75-2) unstable; urgency=low + + * Moved to standards version 2.1.2.2 + * Removed extra root checks + * Added error messages to failed root check + + -- Manoj Srivastava Thu, 13 Feb 1997 14:52:36 -0600 + +make (3.75-1) unstable; urgency=low + + * Use dpkg-shlibdep instead of hardcoding the dependency in the control + file. + + -- Manoj Srivastava Fri, 8 Nov 1996 14:42:11 -0600 + +make (3.75-0) unstable; urgency=low + + * Changed to the new format. + * New upstream version + + -- Manoj Srivastava Thu, 7 Nov 1996 17:42:34 -0600 + +make (3.74-12) unstable; urgency=low + * Added patch to job.c to allow make to exec scripts which do not + have the #! magic as the first line. This fixed Bug#1149 + * Added architecture header in control + * added section header + * merged the package revision header into the revision header. + * cleaned up the debian.rules. + * added the Changelog. + * Fixed the description field not to include multiple contiguous + spaces + + -- Manoj Srivastava diff --git a/debian/clean b/debian/clean new file mode 100644 index 00000000..e490acca --- /dev/null +++ b/debian/clean @@ -0,0 +1,52 @@ +INSTALL +Makefile +build.sh +config.h +config.h.in +config.log +config.status +config/Makefile +config/codeset.m4 +config/compile +config/config.guess +config/config.sub +config/depcomp +config/fcntl-o.m4 +config/glibc2.m4 +config/glibc21.m4 +config/install-sh +config/intdiv0.m4 +config/intl.m4 +config/intldir.m4 +config/intmax.m4 +config/inttypes-pri.m4 +config/inttypes_h.m4 +config/lcmessage.m4 +config/lock.m4 +config/longlong.m4 +config/missing +config/printf-posix.m4 +config/size_max.m4 +config/stdint_h.m4 +config/threadlib.m4 +config/uintmax_t.m4 +config/visibility.m4 +config/wchar_t.m4 +config/wint_t.m4 +config/xsize.m4 +debian/autoreconf.after +debian/autoreconf.before +debian/build-make-guile/ +debian/build-make/ +debian/files +debian/make.debhelper.log +debian/make.substvars +debian/make/ +glob/Makefile +loadavg +make +po/Makefile +po/Makevars.template +po/POTFILES +stamp-h1 +w32/Makefile diff --git a/debian/compat b/debian/compat new file mode 100644 index 00000000..ec635144 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 00000000..b4cd992a --- /dev/null +++ b/debian/control @@ -0,0 +1,50 @@ +Source: make-dfsg +VCS-Git: https://anonscm.debian.org/git/users/srivasta/debian/make-dfsg.git +VCS-Browser: http://anonscm.debian.org/gitweb/?p=users/srivasta/debian/make-dfsg.git +Section: devel +Priority: optional +Maintainer: Manoj Srivastava +Standards-Version: 3.9.7 +Homepage: http://www.gnu.org/software/make/ +Build-Depends: gettext, po-debconf, debhelper (>= 9.0.0), dh-autoreconf, + autoconf, automake | automaken, autopoint, file, pkg-config, + guile-2.0-dev, procps, libbsd-resource-perl + +Package: make +Suggests: make-doc +Conflicts: make-guile +Architecture: any +Priority: optional +Replaces: make-guile +Multi-Arch: allowed +Description: utility for directing compilation + GNU Make is a utility which controls the generation of executables + and other target files of a program from the program's source + files. It determines automatically which pieces of a large program + need to be (re)created, and issues the commands to (re)create + them. Make can be used to organize any task in which targets (files) + are to be automatically updated based on input files whenever the + corresponding input is newer --- it is not limited to building + computer programs. Indeed, Make is a general purpose dependency + solver. +Depends: ${shlibs:Depends}, ${misc:Depends} + +Package: make-guile +Suggests: make-doc +Priority: extra +Conflicts: make +Provides: make +Replaces: make +Architecture: any +Multi-Arch: allowed +Description: utility for directing compilation with guile support + GNU Make is a utility which controls the generation of executables + and other target files of a program from the program's source + files. It determines automatically which pieces of a large program + need to be (re)created, and issues the commands to (re)create + them. Make can be used to organize any task in which targets (files) + are to be automatically updated based on input files whenever the + corresponding input is newer --- it is not limited to building + computer programs. Indeed, Make is a general purpose dependency + solver. This variant has built in guile support +Depends: ${shlibs:Depends}, ${misc:Depends} diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 00000000..9cca08d9 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,45 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: make +Upstream-Contact: help-make@gnu.org +Sources: git://git.savannah.gnu.org/make.git +Comment: This is the Debian GNU/Linux prepackaged version of GNU Make. GNU Make + was written by Richard Stallman and Roland McGrath. This package was put + together by Ian Murdock + Changes: + * added Debian GNU/Linux package maintenance system files + * Pared down the package to just the documentation bits, and some + build infrastructure. + Parts of the GNU Make build structure remain in this package. + +Files: * +Copyright: 1988-2014 Free Software Foundation, Inc. + GNU Make is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3 of the License, or (at your option) any later + version. + . + GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. +License: GPL-3+ + +Files: debian/* +Copyright: 1997-2009, 2014-2016 Manoj Srivastava +License: GPL-3+ + +License: GPL-3+ + This package is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License can be found in "/usr/share/common-licenses/GPL-3". diff --git a/debian/make-first-existing-target b/debian/make-first-existing-target new file mode 100644 index 00000000..f061cf4d --- /dev/null +++ b/debian/make-first-existing-target @@ -0,0 +1,205 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Getopt::Long; +use IPC::Open3; +use Carp; + +our $VERSION = 1.0; + +sub usage { + print STDERR 'usage: make-first-existing-target [-c cmd] ' + . "target1 [target2 ...] -- [make-options]\n" + or croak "Could not print: $!"; + exit 1; +} ## end sub usage + +my ( @targets, @makeopts ); +my $makecmd = 'make'; + +getopt(); + +# Observe make's stderr on a non-existing target. +my $dummy_target = 'make-first-existing-target-dummy-nonexistant-target'; +my $dummy_result = observe_dummy(); + +foreach my $target (@targets) { + make( $target, $dummy_result ); +} +error("*** No rules to make targets: @targets"); + +sub make { + + # Runs make on a target, passing stdout, and observing stderr + # to see if it is similar to that observed when running the dummy + # target. + # Only returns if the target appears not to exist. + my $target = shift; + + # make's stderr will vary from dummy by target name + my @dummy = map { s/$dummy_target/$target/msxg; $_ } split /\n/msx, shift; + + my $same = 1; + my @stderr_buf; + my $code = make_stderr( + $target, + sub { + chomp; + if ( @dummy && $_ eq $dummy[0] ) { + push @stderr_buf, "$_\n"; + shift @dummy; + } + else { + print STDERR @stderr_buf or croak "Could not print: $!"; + print STDERR "$_\n" or croak "Could not print: $!"; + $same = 0; + @stderr_buf = @dummy = (); + } ## end else [ if ( @dummy && $_ eq $dummy...)] + } + ); + + if ( !$same || @dummy ) { + print @stderr_buf or croak "Could not print: $!"; + exit exitcode(); + } +} ## end sub make + +sub observe_dummy { + my $stderr = q{}; + my $code = make_stderr( $dummy_target, sub { $stderr .= shift }, 1 ); + + if ( $code != 2 || !length $stderr ) { + + # Could loop and try another target, but in the unlikely + # case the dummpy target exists, we don't know what it did, + # so best to treat this as a failure. + error("unexpected result running $dummy_target: $stderr"); + } ## end if ( $code != 2 || !length...) + + return $stderr; +} ## end sub observe_dummy + +sub make_stderr { + + # Runs make on a target, passing each line of stderr to a callback + # function. Returns make's exit code. + my $target = shift; + my $callback = shift; + my $silent = shift; + + # Normally open3 will close the stdin filehandle when done. + # But we want to call it repeatedly until one target successfully + # runs; and that target should be able to read from stdin. + # So, make a dup filehandle, in order to leave stdin open. + open( MAKEIN, "<&STDIN" ) || die "$!"; + + if ( !$silent ) { + open( MAKEOUT, ">&STDOUT" ) || die "$!"; + } + else { + open( MAKEOUT, ">/dev/null" ) || die "$!"; + } + + my $pid = open3( '<&MAKEIN', '>&MAKEOUT', \*MAKEERR, + $makecmd, @makeopts, $target ); + while () { + $callback->($_); + } + waitpid( $pid, 0 ); + close MAKEIN; + close MAKEOUT; + return exitcode(); +} ## end sub make_stderr + +sub exitcode { + my $code = $? >> 8; + if ( !$code && $? ) { + $code = $?; + } + return $code; +} ## end sub exitcode + +sub error { + print STDERR "make-first-existing-target: @_\n"; + exit 2; +} + +sub getopt { + GetOptions( + "h|help" => \&usage, + "c=s" => \$makecmd, + ) || usage(); + + # remainder are targets, possibly followed by makeopts + my $end = 0; + foreach my $a (@ARGV) { + if ( $end || $a =~ /^-/ ) { + $end = 1; + push @makeopts, $a; + } + else { + push @targets, $a; + } + } ## end foreach my $a (@ARGV) + + @targets || usage(); +} ## end sub getopt + +__END__ + +=head1 NAME + +make-first-existing-target - runs make on one of several targets + +=head1 SYNOPSIS + +make-first-existing-target [-c cmd] target1 [target2 ...] -- [make-options] + +=cut + +=head1 DESCRIPTION + +The design of L causes difficulty when you know that a Makefile +probably has one of several standardized target names, and want build +machinery to run exactly one of them, propagating any errors. L +will exit 2 if a target does not exist, but an existing target may also +exit 2 due to some other failure. Makefiles cannot be reliably parsed +to find targets by anything less turing complete than make; and make itself +does not provide a way to enumerate the targets in a Makefile. It may not +even be possible to enumerate the targets in a Makefile without executing +part of it. (Proof of this is left as an exercise for the reader.) + +This program avoids the problems described above, by attempting to call +each specified target in turn, until it observes make actually doing +something for one of them. + +=head1 OPTIONS + +=over 4 + +=item -c cmd + +This can be used to specify the make command to run. Default is "make". + +=back + +=cut + +=head1 EXIT STATUS + +The exit status is 0 if at least one target existed and was successfully +run, and nonzero otherwise. + +=head1 AUTHOR + +Joey Hess + +=head1 LICENSE + +Same as GNU make. + +=head1 SEE ALSO + +L + +=cut diff --git a/debian/make-first-existing-target.1 b/debian/make-first-existing-target.1 new file mode 100644 index 00000000..60505410 --- /dev/null +++ b/debian/make-first-existing-target.1 @@ -0,0 +1,178 @@ +.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{ +. if \nF \{ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "MAKE-FIRST-EXISTING-TARGET 1" +.TH MAKE-FIRST-EXISTING-TARGET 1 "2014-05-13" "perl v5.18.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +make\-first\-existing\-target \- runs make on one of several targets +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +make-first-existing-target [\-c cmd] target1 [target2 ...] \*(-- [make\-options] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The design of \fImake\fR\|(1) causes difficulty when you know that a Makefile +probably has one of several standardized target names, and want build +machinery to run exactly one of them, propagating any errors. \fImake\fR\|(1) +will exit 2 if a target does not exist, but an existing target may also +exit 2 due to some other failure. Makefiles cannot be reliably parsed +to find targets by anything less Turing-complete than make, and make itself +does not provide a way to enumerate the targets in a Makefile. It may not +even be possible to enumerate the targets in a Makefile without executing +part of it. (Proof of this is left as an exercise for the reader.) +.PP +This program avoids the problems described above, by attempting to call +each specified target in turn, until it observes make actually doing +something for one of them. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\-c cmd" 4 +.IX Item "-c cmd" +This can be used to specify the make command to run. Default is \*(L"make\*(R". +.SH "EXIT STATUS" +.IX Header "EXIT STATUS" +The exit status is 0 if at least one target existed and was successfully +run, and nonzero otherwise. +.SH "AUTHOR" +.IX Header "AUTHOR" +Joey Hess +.SH "LICENSE" +.IX Header "LICENSE" +Same as \s-1GNU\s0 make. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fImake\fR\|(1) diff --git a/debian/make-guile.docs b/debian/make-guile.docs new file mode 100644 index 00000000..e8597cea --- /dev/null +++ b/debian/make-guile.docs @@ -0,0 +1,8 @@ +README +README.customs +NEWS +ABOUT-NLS +AUTHORS +debian/Explanations +debian/NEWS.Debian +debian/README.Debian-Source diff --git a/debian/make-guile.install b/debian/make-guile.install new file mode 100644 index 00000000..9d496ea9 --- /dev/null +++ b/debian/make-guile.install @@ -0,0 +1 @@ +debian/make-first-existing-target /usr/bin diff --git a/debian/make-guile.manpages b/debian/make-guile.manpages new file mode 100644 index 00000000..5c3be8d3 --- /dev/null +++ b/debian/make-guile.manpages @@ -0,0 +1,2 @@ +make.1 +debian/make-first-existing-target.1 diff --git a/debian/make.docs b/debian/make.docs new file mode 100644 index 00000000..e8597cea --- /dev/null +++ b/debian/make.docs @@ -0,0 +1,8 @@ +README +README.customs +NEWS +ABOUT-NLS +AUTHORS +debian/Explanations +debian/NEWS.Debian +debian/README.Debian-Source diff --git a/debian/make.install b/debian/make.install new file mode 100644 index 00000000..9d496ea9 --- /dev/null +++ b/debian/make.install @@ -0,0 +1 @@ +debian/make-first-existing-target /usr/bin diff --git a/debian/make.manpages b/debian/make.manpages new file mode 100644 index 00000000..5c3be8d3 --- /dev/null +++ b/debian/make.manpages @@ -0,0 +1,2 @@ +make.1 +debian/make-first-existing-target.1 diff --git a/debian/rules b/debian/rules new file mode 100755 index 00000000..9361af4c --- /dev/null +++ b/debian/rules @@ -0,0 +1,64 @@ +#!/usr/bin/make -f +# Uncomment this to turn on verbose mode. +# export DH_VERBOSE=1 +package:=make +SRCTOP:= $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) +INSTALL = install +ifeq (,$(filter nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif +install_file = $(INSTALL) -p -o root -g root -m 644 +install_program = $(INSTALL) -p -o root -g root -m 755 +install_script = $(INSTALL) -p -o root -g root -m 755 +make_directory = $(INSTALL) -p -d -o root -g root -m 755 +PREFIX=/usr +BUILDDIR_NORMAL = $(SRCTOP)/debian/build-make +BUILDDIR_GUILE = $(SRCTOP)/debian/build-make-guile + +DPKG_ARCH := dpkg-architecture +export DEB_HOST_MULTIARCH := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_MULTIARCH) + +%: + dh $@ --parallel --with autoreconf + +override_dh_auto_configure: +ifneq (,$(filter make-guile, $(shell dh_listpackages))) + mkdir -p $(BUILDDIR_GUILE) + ac_cv_lib_util_getloadavg=no dh_auto_configure --parallel \ + -B$(BUILDDIR_GUILE) -- --prefix=$(PREFIX) $(confflags) \ + --with-guile +endif +ifneq (,$(filter make, $(shell dh_listpackages))) + mkdir -p $(BUILDDIR_NORMAL) + ac_cv_lib_util_getloadavg=no dh_auto_configure --parallel \ + -B$(BUILDDIR_NORMAL) -- --prefix=$(PREFIX) $(confflags) \ + --with-guile=no +endif + +override_dh_auto_build: +ifneq (,$(filter make-guile, $(shell dh_listpackages))) + dh_auto_build --parallel -B$(BUILDDIR_GUILE) +endif +ifneq (,$(filter make, $(shell dh_listpackages))) + dh_auto_build --parallel -B$(BUILDDIR_NORMAL) +endif + +override_dh_auto_test: +ifneq (,$(filter make-guile, $(shell dh_listpackages))) + dh_auto_test --parallel -B$(BUILDDIR_GUILE) +endif +ifneq (,$(filter make, $(shell dh_listpackages))) + dh_auto_test --parallel -B$(BUILDDIR_NORMAL) +endif + +override_dh_auto_install: +ifneq (,$(filter make-guile, $(shell dh_listpackages))) + dh_auto_install -B$(BUILDDIR_GUILE) --destdir=debian/make-guile +endif +ifneq (,$(filter make, $(shell dh_listpackages))) + dh_auto_install -B$(BUILDDIR_NORMAL) --destdir=debian/make +endif + +#Local variables: +#mode: makefile +#End: diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 00000000..d3827e75 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +1.0 diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc new file mode 100644 index 00000000..7ffc8b88 --- /dev/null +++ b/debian/upstream/signing-key.asc @@ -0,0 +1,172 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQGiBD/3ingRBACaVZgdK8thWrt0tzw9QKtfkMX/mY60U5iQmIVEascKRZGlVW3p +4nACY4nMu7LkdyQ3/xujRy6rO3pyko65T89t12zqbxvqWP5gU4dDSKXfXCMtpyLW +J88Gb1cnJ6lctjRJiD7Upbb+blI958ikwd9Lq+LoCp3BivwFxnSLW4xI5wCgy3ZX +b3qEBOwICfE5Tbz9rm7XKLMD/08NLJ89Fcgk736KRAxaFha95OTqDhbO4pUB6xxW +x+tHKMPp6x1uC5yWLxqdog6cPoMyx0mGZw0zle29ngOQR4ZFUYeq4LAsZSmgaLIE +sn6B0qcgIlIjqbjXKJY2eB1k0nv/FY/bFCL603lxAcntDobXHGXJaVnR6yRda+AY +unKCA/91WmMsuN1dG72caXjNgpCSEgFpH0CvWpPqn9ka92tfm0cwRsjx8+Rkv2sh +Owq8ihWLX1pGuDHtba7EsdvN04jG7DB3TBvpahL6o0+FexTCZf9oP7k/7Apy2GZZ +hG1Hb54z8qPYKcjGaubbLRuaeCBwZhD+CvjiMKwEod0HFRxPubQrUGF1bCBTbWl0 +aCAoTWFkIFNjaWVudGlzdCkgPHBzbWl0aEBnbnUub3JnPoheBBMRAgAeBQI/94p4 +AhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEJawRxVjOLbUVGgAni1UPsGtt1xq +ormZGimYytdi1il7AJ48bOxQVlqHPVkj7fmyMu8tl3K8WIhmBBMRAgAeBQI/94p4 +AhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAABIJEJawRxVjOLbUB2VHUEcAAQFUaACe +LVQ+wa23XGqiuZkaKZjK12LWKXsAnjxs7FBWWoc9WSPt+bIy7y2XcrxYiQEiBBAB +AgAMBQJCPxivBQMAEnUAAAoJEJcQuJvKV618iOIH/0TUMVsR+augAMNFIIZBtqm0 +twJu9a7Esf+6qxh2FjTHT5kOvfxb/R4FhCctk45B99zcgpIpNv/GQABI0PN9/N1U +EO03C4y6diXNX6MY+lLQEYzwuARXrjUGu0SVoVCt5ZTGOJcIGntz9N5pD8NlAhpF +ojQ8vSWIlQ/wEQXo2XiZ1DRoMLCSPEY/MnP+BUEe1nVqvUEnLrGyf7p55Mmi1BxP +Lz7PNnmAcUqnxkQ5jobSfAZhDotJK5rXGNRGwevp66ObAb7JewvrtrRMFsajIsXb +oEaNIB49BVmK0O7sCyHYl4cxin1GXE+WHiPmJCQID9by75asuJ4ze2XnXMxvLveJ +ASIEEAECAAwFAkJQPoUFAwASdQAACgkQlxC4m8pXrXw+qAf/Q6pYPukQmbMM44dL +LI5KcU1xyavgfKAfD1Fkjo4xaL4eMLbjIGV41jAIaG6TqYK2U4MBNzDjg3SmOxd4 +/iFS3ny5ogarugkegN88k3LIE55c6v1OyoIHk0WXTw59DYkvdSqvfw6kGGp9QuLW +JxmBUsDbRYgRKv4qqhQm6fgGqI+Z8zUhErzFTfGfaeLQRDpc9fltWTpB0sD2N4Ic +nsCfZaAcwAkVDKSXVd2o7BfdUoT7KMtGR2c+TbFCgy2vLQWTlh1UY/196OY6y+lQ +lHUzN2/5sVV2FYHfAw0lwo0pmjQpvrnGfvj8J1Gce2YTC4CyaHRv+mGRQZ3HNR+s +FneUGYkBIgQQAQIADAUCQmIuBAUDABJ1AAAKCRCXELibyletfMMnCADHfhHih8de +W8pRZRMSU1VdFDsQ8iw/EXaov1Q1uRdfssujqPEicG3rP6InvkmH61qDXCZ/JhTH +tjM/R6cGDf3YaoMS2jmxW56FQzEmQNAJ9/Q2RHISbyivzj8H0Ayqm2LFN9QTR8jj +5go7pkolnQMXIPaIzlTxcEphUWwYTFAbd946Q49CyOJHmGMmhuq3tIzrr/csnVEl +E9RbkFOctexBlN27g9h8kyVv2kD+7qKNrz73IpMByfERQeeh6kDxtXM38H4auaIw +i+/Y4lwh49UVJUjpmP+B9EPvZLUxJTqMKKaJKCInQMTd7yal3dWHfn7ovV7oBY+e +hMGumGigpDYCiQEiBBABAgAMBQJCYtZ6BQMAEnUAAAoJEJcQuJvKV6184KsH/jJ+ +fGVtPEvocquQ+kE2A1Xzd6IhIWbBIofWkNLUyiNwwWRMCjYekfZp5t3jDTHRrt6w +ae+6SQfpbB1edkwsf1pao3HANnlLgiTfBGAdW0Xd2Ui58+oVOCzdZcY1slmQeQ2V +MZm0co4si6JMjZ84WrO58WshQNrfIYODSVwpYciXWByCMKU7m/KadP+mD555QVFE +BLXoeeBOcHSOk7B3WYUWSm1AMGSkcBQULsbqW1+o5P6oo6ycd3iQKI4cy5n6LVkK +Dj74cbkNZT5TPWWFaG9dErqAny3Opy2f4mH1GOX48uuIczBBEZnV52uCTDL+e0Iz +SkHEtJLbS29OSSHXll2JASIEEAECAAwFAkJ1RJIFAwASdQAACgkQlxC4m8pXrXyH +FQf+Lgmc3CyOAYYFKMGp/mKFlTGdbqqJibK//ykJ5P3+PQWgsTit1taiesSxUgdI +/484UiHqJItP0k5z2JUrGvW/UiSm1/bIoNEwkpId4eg/0selCXOG9H1bU0EgUvZ3 +zpprjLys0TzURchJcbwPU+TCoBHqq4cNC8AZpX7J/oUoJIUO6Svg7kSnEv10olFD +KBXWcGuSHap+ss863wEJ10FJBx1YrlqHGYtPLspbQxkujNTmQHx+ckvti+KALVpW +XOCErtkvmk4VKPf8DEMtFw6xH0fLUu42hEJX/7a7a953/P+dbbWBLgl3PIQCzgc+ +omAmSmV1XqX6583tv3jC5g8pVokBIgQQAQIADAUCQocWUwUDABJ1AAAKCRCXELib +yletfFTnB/0Z1FQpDKMla16ki85eblzoUFBYosMOM+0j9BJC2isEGxSLZbz+Bv6G +a3SNLfttqgRtT4sS/MwywWzKT7pz7PofgCsFi229LyTIzHc1Q8YD7oJZ8Cjjxs4n +DPyov6n36n9SQPoMZ+hLxu5m5UHzsEo2Ula+InIAFg/i9oQAS2tGF6FI/p6rP3GW +A9vxaW4w4MHyImPLOTU9hjeBAztP/s1ZIpUh64taBIah8JrqMDCDaoTLL35ybtWf +P8z3Ya475RtFkPdrQwZThgRsRS/xbddwVT3H96T6JbB+0ts4eHHvSoCbnhmXYRdQ +65czpwt/lT6xSmKxbGm35c9xMN8YxR4CiQEiBBABAgAMBQJCibzTBQMAEnUAAAoJ +EJcQuJvKV618+PcIAJNTeZJVmBvGNhgyL9t9dZ8NkoML9kF/WpO9dvwn8Woa03Sd +xUiSCxF8IUACjBOSnOUwFB6LWzgIQuU7GqwhaN2YB0FPwOAcuXVOCgn7cS1Rrt+P +qwEpzuia8EpOKc5X//ynyVm0sbNaSXQyBJH6qQUQfoth7woIYnMVppQPdHbE8yJg +XL8dTP+PElu42CjH3gbTsCjLTpo55140iBnClAwBKz/MPNF6zk6CFGE4inietw+b +au6GIt0CTx1HjcD7c18SM/tFXnoJ0hNAE6WL+E5vwdxAGXc3K6Zhsdy8WfsupyAd +ca/TuJfh3LwswlnUobs3wBxvxFNCw9RZMUkrLDqJASIEEAECAAwFAkKc2y0FAwAS +dQAACgkQlxC4m8pXrXwLCAf+K9XgBBdRDczFAhmPIya9quNgm6mMzlSeMzjBdKfg +3WrvKoU13qv9PGEeBS0hPmcgTI/dAGXA0sY7JfzIuEVarS6DdLRDW4FbBULWIUtN +GZuE54M0H9sXCHGJT175Ije6yg8fYvotbiQYKJgtHi9cM3xyOt22Cq2zkLCXtDB5 +gdMzq9+tSMeVgCvGKylQNZ1/K5y/P3qOWxURKDsx9B0wiqKphUbFBKb8TshexnPj +BxyqJ1dfJY9zBrRa1VeVkCvpTbgsSf/3h0Okmwf7h+ii9u2Vjx8858TxU9C7i46o +yGlSspQ7LMFFgfGuD4wsU/+yahB8plEdA/SNZHQFixtXCYkBIgQQAQIADAUCQrc+ +JQUDABJ1AAAKCRCXELibyletfM5xB/wNuOC500SqiW3I7V7PkNjX/tiMfpLHEDFS +s2hZJlyPBRlwFLYMZ0paaB8JNU976+8+QiYpqrQfOvIcpAoiA9jrvjCURUOa4BhZ +Inc7ELgSIFlyNqPuFZXhkt5ssLzaTx42wE+EUP+gnm8YUk3WMl6tnYJKXIdSZDvB +Um3s9QyI1IZESRwuFyJ7jM/TECVGS50P+Dq0qqu+77fTxI33jcZPL2nHAi9b9vT/ +KByWzOA569ME5bRZKg9Tmdcy7lFP5MyZ8dkxK7TShyebay6wMDRBK1TXngHioILz +6aq7jDSlGSLKZuRm43AsvSHe+xYRKEzL/k+7ZMQsXKnrLON7opVViQEiBBABAgAM +BQJCyQ9oBQMAEnUAAAoJEJcQuJvKV6185qAH/RoeSfw6aFmFHOt0q2jGwsQ4qFdy +BEgVJ5iqBhn48efgOMSngOZynBNnv9pUvuRhJZk65yAOHdvCzoVe+Ko7TTCpIDuq +ZfP915KySALnugC+nOwgV8O0Iof35wza8fEb/9LDy4NWGnDe/jpLFInXUhuN3yMn +sDCm7SFzznOa0Idzb1iKoZdEpmZCn/xlUxN2r8qrbuNvmiol5rPuJmYVxl4PFHuW +XwlLHSAiVFLvO/CPt088TZj8Fa4c5RZNIAZaUJC+mYRpIA3g2GFtGMeZont3f+Ji +STYT3e1bfmsOItCPuRCWl0wfUxjb0BTJNmFfNJYYPErTppdejETeAVAy+MqJASIE +EAECAAwFAkLRAQkFAwASdQAACgkQlxC4m8pXrXx6mwf9HZll3nihSgeRfJ3AgyRf +EF6Iq1mI1nCspQhttvUAoymaSsDbbu9MgIVYr0UvSGqzsMVMnSCixa7Ew1vMSiKH +PlN4p9Ex7M34vh7vVnxFzl+/kCjwvBpsn8op2N2XCj3+lVxhvCCNh0H4Mx4YRQGd +vKQa9nq6eIAOsgGKRlQ0hnDceqo3ERu9FjWhSJFUpTuTLB/PX+aa/V0nWJWbJgCd +0NiaEsExYFNXKYHltAd6GuXpq+6p3t4lW2wdcKXV7bFpncb2BddrCTEoZu50nY19 +mC2ZTfhcV43EgqJkXQqNEPLjdFAq9v/P5YUnyZ2/xbMBV8yxnW/D8mMP4NbdiYdY +TIkBIgQQAQIADAUCQtGmMQUDABJ1AAAKCRCXELibyletfGSuB/4uzQshaJbsQ4gh +mGTuehiVxXEBXIAzD+7EjiPLTDJcmROVRwQmxlUNLVK9h4uIdVzF5nMzbHfy7atG +M6iHDWZYLZNZxRIK8ajAgyQCBjPQYb2u4IHkamlKEPy2c0PLiK7HvTJcedUTeSit +jtNHfqpz8X2M5rYumHlQazNKQjxgITD1rD0T1xdFXOpkAav60/SVitAZR03HUhVl +Ffc4OzB+xRj1A2y7x5K5yyeWNUdxhRTy4RO09K8QBhZoUmlcmW3jvaow2V40jhXl +uJ7XQJ/sG9xO2Afp9ag+ZSc8UF86mntjP5W0BAQtYyisjC+9W05v/tr7kSNAHvJM +juUMjuL1iQEiBBABAgAMBQJC43CVBQMAEnUAAAoJEJcQuJvKV61898cH/39W8R+D +SvTVmXaR0ghaxWClrT/onCM5I0gnfIB0dPkTrCZ833eoT9wETA2dhJF1xikSeasS +HZdUbuyzMqA4lQB19N2NREOGY+sT2sHSfpL+OVwVgCFQeaeqmuwnu+Bp5Ior4hCb +zMON8mXM1DvF03tWOtoOCP32Rs2TWnkN4kKocuEiInNB888C5QVezE4Fa7THMf/m +wrGp82T0hihka0XChGOlvxIVNZxGJ4zCqdb/fApo1yV/Mx2GD/9GgLsHpVV5VoBE +yFgwUnQ28Azua85+4A1x0pq10uYM80f2zeCEyp4vqicwoPsDiLa1+xM+fyMQ3WIR +PGTS9EDqB8At4GiJASIEEAECAAwFAkLsre8FAwASdQAACgkQlxC4m8pXrXxXUAgA +rPJaKpdT14WhRM24C0LGEu+JiN54xh2qSJUTi6bRTFg74pKH6sT1E8YPh1AY1pmM +CI66GpRaphRTVE70+LZWOr69BHrRQZ6EII5sRqkBSo6IMuKOtc7MDe8GU83817gD +21ZM6cJ/BciNDIb1ogHLRRz+EVIF0ezdHNcwJP5ec+1IQi81OqJrfHFYp7lQSI9i +j9U9Bq4ryWunrK3AGqO53yw3p5JCWNKFOeue/l6wnYuiyCwOsRW0j6kOs0OPCqNc +jHex+qT3WuQbTFPB3xlSkvuLPTPSPBpa/82CoNPOn3NVQ9ipd1Gf1CaOBlAEvUqU +abgjz+JTdWpR8Tf/fZ3hYYkBIgQQAQIADAUCQu1UxAUDABJ1AAAKCRCXELibylet +fPklCADFhw3njL07vQSDJA6XLP1XRXyBp5od6ncDURlaW9EoUer5MaW/4ho419XM +O1YgG8+tgDCAq5HGLNZXpjJgJWoN0RIyXwnZrsxxsu3wAh5mBKPkyJOoUlr7TsW5 +IQxtwW5sRMRm7l5WImGJGipllUTOJTdjEUQWU9gkDABzpa9x/lxBr7b+WzMLhn6C +3CQPOJyBQbTsvalW5s7ki4kfTFuAB12mw4m9LAw0rKfDfifhgo9rMabA2mVnYznP +TJhay+3+QAiTDqdTtOEnu+yTUynbEJoiDNNYY8RjcyT0Ul+ltEOlzhJEjIzcFQM5 +zGP8BMSSh1nGnWtGlch7TbIcy6voiQEiBBABAgAMBQJDBcnYBQMAEnUAAAoJEJcQ +uJvKV618bggIAIEi/QoNZi15JTbxunen+taLvl7Kx3reyY834fMbeAindUdcRdXk +eiC3CvKuVg0TGymN0HrryM7GRBgLfsKEbcfHjP4daErHHEKiD1y7KRDenZqnd5IY +yrkpMLGmTUZzv1Pfbd/h77IiYKcbZ3R12WhtE4SpHzPa8RKqh485bYWSa/4oXHS1 +RIdaWyReIVzmN+t9Fj3ZxTxxghob//QeTJdbZdOBMFQr6M123HR5IUhBHJLEFtpN +Mamvd7Xc76QyVG0TqaJ3RTrM9GJ+2LjczVI5zJA1S5gQRTzlYYLTznxlncX+RdWp +IbssS8WYHJX2p0+BVlFB1VKDnp69k3k21JSJASIEEAECAAwFAkMIbN8FAwASdQAA +CgkQlxC4m8pXrXwolwf/X04h2K1am4qb5voHATr707Dxn0qIBv3SsGoohjnxGJFh +qMZuacYd3zalkolCv8V8S+Awwtm0MTIMBZGQOQ34T1YItpV8dM6bYO97e3+dzox6 +KGeGNOBELm5jijBt6GgojoIlWbeN7mVzZ7vCMvVToa66HmXt9btI6kCpmtYqHmHU +HEBVHMQ2NqdptLbbZ8mHxePm/nmzm8Ofu2xhBUWDLAaSl/1cPfo24jy776bp5LGR +D8v78dixBen54NOY5dYEDx8gyDz9iUPViDnXEU3RfQu4vt1XqFg+OwirvyKUmOvz +OB0INGDatby9Xv7l6uSCaHCQytWggBVg/jabaqXGi4kBIgQQAQIADAUCRJXBbgUD +ABJ1AAAKCRCXELibyletfPWTB/wIRjLwkaWjPV5VCNbY6z62Bx2eZdz4xpF69iZ+ +wmc338weuHoDfdKvNr5NFiGhUi6+Fw3EZnDBT36w7rqAv7n+J0uuHKiFWfIcSqrn +a0DzOsbg1B8UmcY7meYjZBmw3YJj4nzrvhOtN+7rRQP/r3S4sFida6IYRSBD/iiz +Eoa2o2xxjeAb7ON0l4Y+OzhLd1LsVUDlos59o8OVWQ/wdJX8HYjIJjKmUM0/EiZs +AG0mNT04D7kIBEwFYVAA990gx+7yXWRbYLB9XzOYWeqPvbr0p1sN/hOrcf0voKbP +MBKwzTz6YDHdRAVGQyoi3DhJ39vsT95R9RT3M03G8PoAGv/miQEiBBABAgAMBQJE +p5DmBQMAEnUAAAoJEJcQuJvKV618tmgH/jubYF3aeGH4QFy2GntsKHjZbwMbW+YA +iRuns2C0bqCk+gjIF9oWFI+H6psPuMT/o+972MYF5nk9zGgPIGsDfR7RbhBJWhd8 +qVGdgSZ8M7hQwOYo5VS/celiG4hznT2Oem+2rPu4wVysXFkEGw6o4lWNFv+X6GQs ++VNvupVQWzJsLBs3qtiGw6Jnv9OQdFwHiyhRpXXKEoC+lAYWvqT+xJ8kEskVPAD0 +YbgqKZb+k9IRnh9NTN+Ke0P6wagAc1GDzPReeRTHDKntUuh3WW0MssvTytJL4hNO +qfZ6Z6qCkP6stm/d3PHSxXGXR6vk6EHWFvPQ18mrqZgOhuOP6Yk9xiKJASIEEAEC +AAwFAkS5VswFAwASdQAACgkQlxC4m8pXrXzjRAf8CvRT76vOfrwlH66r7St8XecJ +A3BPNAXI+6s36n9IOAE9iU+PbUplP/O0nObG3e+FarXk76htVlitTn0pbluVOCef +0d4wdeVOJdFIyOCvsSR1wJjmhFUEMubPf2y6Jf6OFdhGimZJPsD7wnkh0ISxxrOh +MUk0fvQozdHcM9KLM85Tn2iwsubruobIarxnihbH4V+1C4auSNGgSQST3LZBN5fg +nczdxDkiiZKUq5Jg/kaROFTvBOy/iR2Z6BVecSzGTg/E6RO8eCi8C8qrr514rVes +5Wfqn2dMqyHwYuIJMEAjw0XcXt6dJOZdzg6SswsTFa1pSM9VWZpwfsgn0E8MUokB +IgQQAQIADAUCRMsmwAUDABJ1AAAKCRCXELibyletfDF5CAC3zNde/CCkvxiP/iS+ +JQgP+eyrFvBAQ3OkatSZI+roQiD/3wTsgUizV83u9XNnBcXuWKphyTQjbkgf1S8g +Q9UhZ+uRYwtvzZAKnAjNB01L6CnaBRfN1d/X5RpWfS3w4Cslhz/dAQKwoYXyUPkd +zaPrFGO0r88aaqrOmc+fUdSQ3rIjwjvXhuy49g1fRpbBKDNAFr+0mZRxcnzUFBpA +vuKYxny5y/W1wyvckYRGU+uu0kzZfhCCU+cj3pG/QBGTY7dVqBDcqOOTOYrfn0BI +RFKBoIekE0ueGh7Qiv0zdaCad2+XiDDylUK0cyeKOKChfXszCq9MHDpG8F2jse6m +wkBTiQEiBBABAgAMBQJE3O5QBQMAEnUAAAoJEJcQuJvKV6182zsH/iBCUSSgurRA +Yel+h3/1MR4LWavk4Fl0Uy3kjJisjcHyL1LqUCn2UQLoUcWFDTAZUB2DwiQtwNsL +YbQhGNapTWHo30Mnajx6MyWoNYaH1G6im5ZTvk0q699laHpwpDpcF4GwXcm7Y5C5 +GqKE9kFaExVAcKBsVo/DfzZaUKeTz8vyCTtGd3w4MNVHiApEEtpry3QMPdFt12H5 +zQs/CYNbi35sqUt1trK1TRPZcCVeENxFojam4ThPbNE/1jPf3YYQam2i3nPPnHzf +NehLo9ZU+a6t5R5d4268AZh6RY8NscKm9e/qLRrm0E7qln+LEADVjRj0uPvUYw4n +mo+bwFPeb46JASIEEAECAAwFAkTuw64FAwASdQAACgkQlxC4m8pXrXwvMwf+Obar ++3CwFX8NxfvOxDhiC1VRPaXBeAjMgtlF4Zf2JI3gcKBe/Bj+5VDO+puK5GCYQRGo +J+ux7jDqQvihYeka8O1ElD5PFK6ij5JxmHiSeycjh0kntlP+vJGkZkQMvxyHMc8s +FLnJgNP912YfOnpkFm4Z6uUKv4xDnEFw4kfbtI6fCloqSAhyjeQTqevWl0whWNTi +Y7qimf275TnAJEkcU42z9DO8XmSZvwpXQLkkQCDytK17V4c5piJLnRqRBSWpg2mR +KrtElKg+cKtDT8W8DE6pgl9R+QM688VLcIkBSN8P3qYeJQMrUGad4+Fz/J0lIDFm +rxIB5ukQUrBZdZdS8rkCDQQ/94qhEAgAlem9pu69Poj3KK550dcemSdVnd2EK7Wv +ZDt2BY2DnIVeZHDrcr8n8hGGbxuohEDRiYKw+QrMPlcKyMyuurQ5CXwoHQ4LmtuK +Si9IRjNLhojhNte+uZWIe+yWzr9POIlysGKMnr1ekWauanmfucDStcD/FH88dLm5 +7cvUDYnXvUqhm+wyqJ+fCYhW2StlPwuWEaOkAxzKLql5EdSyD5ON/x0zbxpxJHqT +PZQku+ZnyPTuRM23YFp/ElR63sO5T/Uz0XFp6G6zS9fa2FirYERH/Jx2gcwi3MO/ +iGv18tTFSKc4auOo2QQqpFN392L7LnI+7STHQd9z2Vj4G51QU3Du8wADBgf+PopF +LchjqqLkLTtXy2xsrOkY5buxSqK5rFLdBJE/+LuazwNbibk/qzHF4T7LOjRngKVk +hWi9YMiki8X31E4B+zsjuGHOFA0USgIXOWbOBvzWoK/JoeD0b5E7j8FOC9r+/L84 +6PxK17c6tB9+cSBNK4qiDx6UvGqDwDWyULCw2KhNOBomHBv7YGsqxkb5yhlUE+8m +FpUVxP5JdqvPRXzEiY/ZbzGRWCClAE4cW8Bkt0fQjpzLabj+v+yn4luimsPcINav +v3DDH8Hll40nf3jZlNJa3kSJLSAQOHMfrhJb3ukGz7imlMM8zbwDcL3185lscNWu +DxtFtClbdc+HjC8BzohRBBgRAgAJBQI/94qhAhsMABIJEJawRxVjOLbUB2VHUEcA +AQFBeACcD2gO7mSMZrkGnKw435MCq/1Vdr4AoMRxTkdYuPH/90fFbuCURrO2XUNo +=FHHY +-----END PGP PUBLIC KEY BLOCK----- diff --git a/debian/watch b/debian/watch new file mode 100644 index 00000000..80046dd4 --- /dev/null +++ b/debian/watch @@ -0,0 +1,5 @@ +# format version number, currently 3; this line is compulsory! +version=3 + +opts=pgpsigurlmangle=s/$/.sig/ \ + ftp://ftp.gnu.org/pub/gnu/make/make-(.*)\.tar\.gz diff --git a/dir.c b/dir.c index 7e00b8f7..6b8881f1 100644 --- a/dir.c +++ b/dir.c @@ -748,8 +748,11 @@ file_exists_p (const char *name) const char *slash; #ifndef NO_ARCHIVES - if (ar_name (name)) - return ar_member_date (name) != (time_t) -1; + { + time_t member_date; + if (ar_name (name)) + return ar_member_date (name, &member_date); + } #endif #ifdef VMS diff --git a/job.c b/job.c index 29892490..39966f67 100644 --- a/job.c +++ b/job.c @@ -27,6 +27,14 @@ this program. If not, see . */ #include +#if defined (HAVE_LINUX_BINFMTS_H) && defined (HAVE_SYS_USER_H) +#include +#include +#endif +#ifndef PAGE_SIZE +# define PAGE_SIZE (sysconf(_SC_PAGESIZE)) +#endif + /* Default shell to use. */ #ifdef WINDOWS32 #include @@ -824,8 +832,6 @@ reap_children (int block, int err) break; } - child_failed = exit_sig != 0 || exit_code != 0; - /* Search for a child matching the deceased one. */ lastc = 0; for (c = children; c != 0; lastc = c, c = c->next) @@ -837,6 +843,15 @@ reap_children (int block, int err) Ignore it; it was inherited from our invoker. */ continue; + /* Determine the failure status: 0 for success, 1 for updating target in + question mode, 2 for anything else. */ + if (exit_sig == 0 && exit_code == 0) + child_failed = MAKE_SUCCESS; + else if (exit_sig == 0 && exit_code == 1 && question_flag && c->recursive) + child_failed = MAKE_TROUBLE; + else + child_failed = MAKE_FAILURE; + DB (DB_JOBS, (child_failed ? _("Reaping losing child %p PID %s %s\n") : _("Reaping winning child %p PID %s %s\n"), @@ -872,10 +887,10 @@ reap_children (int block, int err) delete non-precious targets, and abort. */ static int delete_on_error = -1; - if (!dontcare) + if (!dontcare && child_failed == MAKE_FAILURE) child_error (c, exit_code, exit_sig, coredump, 0); - c->file->update_status = us_failed; + c->file->update_status = child_failed == MAKE_FAILURE ? us_failed : us_question; if (delete_on_error == -1) { struct file *f = lookup_file (".DELETE_ON_ERROR"); @@ -987,7 +1002,7 @@ reap_children (int block, int err) if (!err && child_failed && !dontcare && !keep_going_flag && /* fatal_error_signal will die with the right signal. */ !handling_fatal_signal) - die (MAKE_FAILURE); + die (child_failed); /* Only block for one child. */ block = 0; @@ -1189,14 +1204,15 @@ start_job_command (struct child *child) ++p; } + child->recursive = ((flags & COMMANDS_RECURSE) != 0); + /* Update the file's command flags with any new ones we found. We only keep the COMMANDS_RECURSE setting. Even this isn't 100% correct; we are now marking more commands recursive than should be in the case of multiline define/endef scripts where only one line is marked "+". In order to really fix this, we'll have to keep a lines_flags for every actual line, after expansion. */ - child->file->cmds->lines_flags[child->command_line - 1] - |= flags & COMMANDS_RECURSE; + child->file->cmds->lines_flags[child->command_line - 1] |= flags & COMMANDS_RECURSE; /* POSIX requires that a recipe prefix after a backslash-newline should be ignored. Remove it now so the output is correct. */ @@ -3115,6 +3131,7 @@ construct_command_argv_internal (char *line, char **restp, const char *shell, #ifdef WINDOWS32 char *command_ptr = NULL; /* used for batch_mode_shell mode */ #endif + char *args_ptr; # ifdef __EMX__ /* is this necessary? */ if (!unixy_shell && shellflags) @@ -3280,8 +3297,17 @@ construct_command_argv_internal (char *line, char **restp, const char *shell, return new_argv; } +#ifdef MAX_ARG_STRLEN + static char eval_line[] = "eval\\ \\\"set\\ x\\;\\ shift\\;\\ "; +#define ARG_NUMBER_DIGITS 5 +#define EVAL_LEN (sizeof(eval_line)-1 + shell_len + 4 \ + + (7 + ARG_NUMBER_DIGITS) * 2 * line_len / (MAX_ARG_STRLEN - 2)) +#else +#define EVAL_LEN 0 +#endif + new_line = xmalloc ((shell_len*2) + 1 + sflags_len + 1 - + (line_len*2) + 1); + + (line_len*2) + 1 + EVAL_LEN); ap = new_line; /* Copy SHELL, escaping any characters special to the shell. If we don't escape them, construct_command_argv_internal will @@ -3301,6 +3327,30 @@ construct_command_argv_internal (char *line, char **restp, const char *shell, #ifdef WINDOWS32 command_ptr = ap; #endif + +#if !defined (WINDOWS32) && defined (MAX_ARG_STRLEN) + if (unixy_shell && line_len > MAX_ARG_STRLEN) + { + unsigned j; + memcpy (ap, eval_line, sizeof (eval_line) - 1); + ap += sizeof (eval_line) - 1; + for (j = 1; j <= 2 * line_len / (MAX_ARG_STRLEN - 2); j++) + ap += sprintf (ap, "\\$\\{%u\\}", j); + *ap++ = '\\'; + *ap++ = '"'; + *ap++ = ' '; + /* Copy only the first word of SHELL to $0. */ + for (p = shell; *p != '\0'; ++p) + { + if (isspace ((unsigned char)*p)) + break; + *ap++ = *p; + } + *ap++ = ' '; + } +#endif + args_ptr = ap; + for (p = line; *p != '\0'; ++p) { if (restp != NULL && *p == '\n') @@ -3348,6 +3398,13 @@ construct_command_argv_internal (char *line, char **restp, const char *shell, } #endif *ap++ = *p; +#if !defined (WINDOWS32) && defined (MAX_ARG_STRLEN) + if (unixy_shell && line_len > MAX_ARG_STRLEN && (ap - args_ptr > MAX_ARG_STRLEN - 2)) + { + *ap++ = ' '; + args_ptr = ap; + } +#endif } if (ap == new_line + shell_len + sflags_len + 2) { diff --git a/job.h b/job.h index 3c921bae..efd94e9b 100644 --- a/job.h +++ b/job.h @@ -108,6 +108,7 @@ struct child unsigned int noerror:1; /* Nonzero if commands contained a '-'. */ unsigned int good_stdin:1; /* Nonzero if this child has a good stdin. */ unsigned int deleted:1; /* Nonzero if targets have been deleted. */ + unsigned int recursive:1; /* Nonzero for recursive command ('+' etc.) */ unsigned int dontcare:1; /* Saved dontcare flag. */ }; diff --git a/main.c b/main.c index 7f14cba5..897bb191 100644 --- a/main.c +++ b/main.c @@ -1401,13 +1401,18 @@ main (int argc, char **argv, char **envp) #ifdef HAVE_ISATTY if (isatty (fileno (stdout))) if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMOUT"))) - define_variable_cname ("MAKE_TERMOUT", TTYNAME (fileno (stdout)), - o_default, 0)->export = v_export; - + { + const char *tty = TTYNAME (fileno (stdout)); + define_variable_cname ("MAKE_TERMOUT", tty ? tty : DEFAULT_TTYNAME, + o_default, 0)->export = v_export; + } if (isatty (fileno (stderr))) if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMERR"))) - define_variable_cname ("MAKE_TERMERR", TTYNAME (fileno (stderr)), - o_default, 0)->export = v_export; + { + const char *tty = TTYNAME (fileno (stderr)); + define_variable_cname ("MAKE_TERMERR", tty ? tty : DEFAULT_TTYNAME, + o_default, 0)->export = v_export; + } #endif /* Reset in case the switches changed our minds. */ @@ -2418,6 +2423,11 @@ main (int argc, char **argv, char **envp) exit (WIFEXITED(r) ? WEXITSTATUS(r) : EXIT_FAILURE); } #else +#ifdef SET_STACK_SIZE + /* Reset limits, if necessary. */ + if (stack_limit.rlim_cur) + setrlimit (RLIMIT_STACK, &stack_limit); +#endif exec_command ((char **)nargv, environ); #endif free (aargv); diff --git a/make.1 b/make.1 index ed04db90..4192f247 100644 --- a/make.1 +++ b/make.1 @@ -192,7 +192,24 @@ If the .B \-j option is given without an argument, .BR make -will not limit the number of jobs that can run simultaneously. +will not limit the number of jobs that can run simultaneously. When +.BR make +invokes a +.BR sub-make, +all instances of make will coordinate to run the specified number of +jobs at a time; see the section +.B PARALLEL MAKE AND THE JOBSERVER +for details. +.TP 0.5i +\fB\--jobserver-fds\fR [\fIR,W\fR] +Internal option +.BR make +uses to pass the jobserver pipe read and write file descriptor numbers +to +.BR sub-makes; +see the section +.B PARALLEL MAKE AND THE JOBSERVER +for details .TP 0.5i \fB\-k\fR, \fB\-\-keep\-going\fR Continue as much as possible after an error. @@ -355,6 +372,68 @@ programs are properly installed at your site, the command .B info make .PP should give you access to the complete manual. +.SH "PARALLEL MAKE AND THE JOBSERVER" +Using the +.I -j +option, the user can instruct +.BR make +to execute tasks in parallel. By specifying a numeric argument to +.I -j +the user may specify an upper limit of the number of parallel tasks to +be run. +.PP +When the build environment is such that a top level +.BR make +invokes +.BR sub-makes +(for instance, a style in which each sub-directory contains its own +.I Makefile +), no individual instance of +.BR make +knows how many tasks are running in parallel, so keeping the number of +tasks under the upper limit would be impossible without communication +between all the +.BR make +instances running. While solutions like having the top level +.BR make +serve as a central controller are feasible, or using other +synchronization mechanisms like shared memory or sockets can be +created, the current implementation uses a simple shared pipe. +.PP +This pipe is created by the top-level +.BR make +process, and passed on to all the +.BR sub-makes. +The top level +.BR make process writes +.B N-1 +one-byte tokens into the pipe (The top level +.BR make +is assumed to reserve one token for itself). Whenever any of the +.BR make +processes (including the top-level +.BR make +) needs to run a new task, it reads a byte from the shared pipe. If +there are no tokens left, it must wait for a token to be written back +to the pipe. Once the task is completed, the +.BR make +process writes a token back to the pipe (and thus, if the tokens had +been exhausted, unblocking the first +.BR make +process that was waiting to read a token). Since only +.B N-1 +tokens were written into the pipe, no more than +.B N +tasks can be running at any given time. +.PP +If the job to be run is not a +.BR sub-make +then +.BR make +will close the jobserver pipe file descriptors before invoking the +commands, so that the command can not interfere with the +.I jobserver, +and the command does not find any unusual file descriptors. .SH BUGS See the chapter ``Problems and Bugs'' in .IR "The GNU Make Manual" . diff --git a/makeint.h b/makeint.h index fdcae75b..6e936a8d 100644 --- a/makeint.h +++ b/makeint.h @@ -424,10 +424,11 @@ extern struct rlimit stack_limit; /* The number of bytes needed to represent the largest integer as a string. */ #define INTSTR_LENGTH CSTRLEN ("18446744073709551616") +#define DEFAULT_TTYNAME "true" #ifdef HAVE_TTYNAME # define TTYNAME(_f) ttyname (_f) #else -# define TTYNAME(_f) "true" +# define TTYNAME(_f) DEFAULT_TTYNAME #endif @@ -478,7 +479,7 @@ const char *find_percent_cached (const char **); int ar_name (const char *); void ar_parse_name (const char *, char **, char **); int ar_touch (const char *); -time_t ar_member_date (const char *); +int ar_member_date (const char *, time_t *); typedef long int (*ar_member_func_t) (int desc, const char *mem, int truncated, long int hdrpos, long int datapos, diff --git a/remake.c b/remake.c index 299a2aaf..123a2604 100644 --- a/remake.c +++ b/remake.c @@ -1259,6 +1259,7 @@ f_mtime (struct file *file, int search) char *arname, *memname; struct file *arfile; + int found; time_t member_date; /* Find the archive's name. */ @@ -1306,10 +1307,15 @@ f_mtime (struct file *file, int search) /* The archive doesn't exist, so its members don't exist either. */ return NONEXISTENT_MTIME; - member_date = ar_member_date (file->hname); - mtime = (member_date == (time_t) -1 - ? NONEXISTENT_MTIME - : file_timestamp_cons (file->hname, member_date, 0)); + found = ar_member_date (file->hname, &member_date); + if (found && member_date == (time_t) 0) + { + OSS (error, NILF, + _("Warning: Archive '%s' seems to have been created in deterministic mode. '%s' will always be updated. Please consider passing the U flag to ar to avoid the problem."), + arfile->name, memname); + + } + mtime = found ? file_timestamp_cons (file->hname, member_date, 0) : NONEXISTENT_MTIME; } else #endif @@ -1548,9 +1554,11 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr) { static const char *dirs[] = { +#ifdef MULTIARCH_DIRS + MULTIARCH_DIRS +#endif #ifndef _AMIGA "/lib", - "/usr/lib", #endif #if defined(WINDOWS32) && !defined(LIBDIR) /* @@ -1559,7 +1567,19 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr) */ #define LIBDIR "." #endif - LIBDIR, /* Defined by configuration. */ + LIBDIR, /* Defined by configuration. */ +#ifndef _AMIGA +/* + * In the Debian binaries, PREFIX is /usr and thus this searches /lib, + * /usr/lib and /usr/lib again and therefore misses any libraries that + * are not packaged and were installed by the site admin. The ideal + * behaviour would be to have the search path set by a Makefile + * variable (other than the VPATH blunt object) but even absent that, + * it would be more useful if it looked in /usr/local/lib even though + * make itself hasn't been installed in the /usr/local tree -- manoj + */ + "/usr/local/lib", +#endif 0 }; diff --git a/tests/scripts/features/archives b/tests/scripts/features/archives index b0acfecb..cb799e7c 100644 --- a/tests/scripts/features/archives +++ b/tests/scripts/features/archives @@ -28,17 +28,17 @@ unlink('libxx.a'); # Very simple run_make_test('all: libxx.a(a1.o)', - '', "$ar rv libxx.a a1.o\n$created"); + '', "$ar rvU libxx.a a1.o\n$created"); # Multiple .o's. Add a new one to the existing library ($_ = $add) =~ s/#OBJECT#/a2.o/g; run_make_test('all: libxx.a(a1.o a2.o)', - '', "$ar rv libxx.a a2.o\n$_"); + '', "$ar rvU libxx.a a2.o\n$_"); # Touch one of the .o's so it's rebuilt utouch(-40, 'a1.o'); ($_ = $repl) =~ s/#OBJECT#/a1.o/g; -run_make_test(undef, '', "$ar rv libxx.a a1.o\n$_"); +run_make_test(undef, '', "$ar rvU libxx.a a1.o\n$_"); # Use wildcards run_make_test('all: libxx.a(*.o)', @@ -47,21 +47,21 @@ run_make_test('all: libxx.a(*.o)', # Touch one of the .o's so it's rebuilt utouch(-30, 'a1.o'); ($_ = $repl) =~ s/#OBJECT#/a1.o/g; -run_make_test(undef, '', "$ar rv libxx.a a1.o\n$_"); +run_make_test(undef, '', "$ar rvU libxx.a a1.o\n$_"); # Use both wildcards and simple names utouch(-50, 'a2.o'); ($_ = $add) =~ s/#OBJECT#/a3.o/g; -$_ .= "$ar rv libxx.a a2.o\n"; +$_ .= "$ar rvU libxx.a a2.o\n"; ($_ .= $repl) =~ s/#OBJECT#/a2.o/g; run_make_test('all: libxx.a(a3.o *.o)', '', - "$ar rv libxx.a a3.o\n$_"); + "$ar rvU libxx.a a3.o\n$_"); # Check whitespace handling utouch(-40, 'a2.o'); ($_ = $repl) =~ s/#OBJECT#/a2.o/g; run_make_test('all: libxx.a( a3.o *.o )', '', - "$ar rv libxx.a a2.o\n$_"); + "$ar rvU libxx.a a2.o\n$_"); rmfiles(qw(a1.o a2.o a3.o libxx.a)); diff --git a/tests/scripts/misc/fopen-fail b/tests/scripts/misc/fopen-fail index 6580e519..5f9c779f 100644 --- a/tests/scripts/misc/fopen-fail +++ b/tests/scripts/misc/fopen-fail @@ -10,6 +10,6 @@ $description = "Make sure make exits with an error if fopen fails."; run_make_test(q! include $(lastword $(MAKEFILE_LIST)) !, - '', undef, 512); + '', undef, 512, 300); 1; diff --git a/tests/scripts/options/dash-q b/tests/scripts/options/dash-q index 194588d9..e67b55d4 100644 --- a/tests/scripts/options/dash-q +++ b/tests/scripts/options/dash-q @@ -74,4 +74,13 @@ build-y: build-x ', '-q build-y', "#MAKE#: *** No rule to make target 'build-stamp-2', needed by 'build-arch'. Stop.\n", 512); +# TEST 9 : Savannah bug # 47151 +# Make sure we exit with 1 when invoking a recursive make +run_make_test(' +foo: bar ; echo foo +bar: ; @$(MAKE) -f #MAKEFILE# baz +baz: ; echo baz +', + '-q foo', '', 256); + 1; diff --git a/tests/scripts/targets/POSIX b/tests/scripts/targets/POSIX index a24e3bcf..1576dec9 100644 --- a/tests/scripts/targets/POSIX +++ b/tests/scripts/targets/POSIX @@ -31,7 +31,7 @@ all: ; \@$script '', $out); # Test the default value of various POSIX-specific variables -my %POSIX = (AR => 'ar', ARFLAGS => '-rv', +my %POSIX = (AR => 'ar', ARFLAGS => 'rvU', YACC => 'yacc', YFLAGS => '', LEX => 'lex', LFLAGS => '', LDFLAGS => '', diff --git a/tests/test_driver.pl b/tests/test_driver.pl index 91141eb4..38c1e74a 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -30,6 +30,7 @@ # $Id$ +use BSD::Resource; # The number of test categories we've run $categories_run = 0; @@ -151,6 +152,11 @@ sub toplevel $makeENV{LC_ALL} = 'C'; + # HACK. On Debian, ar is now compiled with determinism, which makes + # make tests fail. Pass in the U modifier to revert that behaviour change + # If ar has not been changed, this should be a no-op. + $makeENV{ARFLAGS} = 'rvU'; + # Replace the environment with the new one # %origENV = %ENV unless $^O eq 'VMS'; @@ -542,9 +548,19 @@ sub run_all_tests $tests_run = 0; $tests_passed = 0; - + ($nowsoft, $nowhard) = getrlimit(RLIMIT_NOFILE); + if ( $testname =~ m{misc/fopen-fail}msx ) { + $test_timeout = 300; + # do a best effort bit to redice the number of fds + $success = setrlimit( RLIMIT_NOFILE, 1024, 2048 ); + } # Run the test! $code = do $perl_testname; + if ( $testname =~ m{misc/fopen-fail}msx ) { + $test_timeout = $save_timeout; + # do a best effort bit to redice the number of fds + $success = setrlimit( RLIMIT_NOFILE, $nowsoft, $nowhard ); + } ++$categories_run; $total_tests_run += $tests_run; -- cgit v1.2.3