diff --git a/.make.metadata b/.make.metadata new file mode 100644 index 0000000..aec308e --- /dev/null +++ b/.make.metadata @@ -0,0 +1 @@ +b8a8a99e4cb636a213aad3816dda827a92b9bbed SOURCES/make-3.82.tar.bz2 diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/make-3.82-aarch64.patch b/SOURCES/make-3.82-aarch64.patch new file mode 100644 index 0000000..5de499b --- /dev/null +++ b/SOURCES/make-3.82-aarch64.patch @@ -0,0 +1,36 @@ +diff -urN make-3.82/config/config.guess make-3.82-aarch64/config/config.guess +--- make-3.82/config/config.guess 2010-07-28 00:42:10.000000000 -0500 ++++ make-3.82-aarch64/config/config.guess 2013-03-08 02:14:38.142779089 -0600 +@@ -858,6 +868,13 @@ + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; +diff -urN make-3.82/config/config.sub make-3.82-aarch64/config/config.sub +--- make-3.82/config/config.sub 2010-07-28 00:42:11.000000000 -0500 ++++ make-3.82-aarch64/config/config.sub 2013-03-08 02:14:38.175775288 -0600 +@@ -247,6 +255,7 @@ + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ ++ | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ +@@ -338,6 +367,7 @@ + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ ++ | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ diff --git a/SOURCES/make-3.82-bugfixes.patch b/SOURCES/make-3.82-bugfixes.patch new file mode 100644 index 0000000..e89f14e --- /dev/null +++ b/SOURCES/make-3.82-bugfixes.patch @@ -0,0 +1,250 @@ +diff -urpN make/ChangeLog make-new/ChangeLog +--- make/ChangeLog 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/ChangeLog 2010-09-13 13:42:09.000000000 +0200 +@@ -1,3 +1,22 @@ ++2010-08-13 Paul Smith ++ ++ * NEWS: Accidentally forgot to back out the sorted wildcard ++ enhancement in 3.82, so update NEWS. ++ Also add NEWS about the error check for explicit and pattern ++ targets in the same rule, added to 3.82. ++ ++ * main.c (main): Add "oneshell" to $(.FEATURES) (forgot to add ++ this in 3.82!) ++ ++ * read.c (parse_file_seq): Fix various errors parsing archives ++ with multiple objects in the parenthesis, as well as wildcards. ++ Fixes Savannah bug #30612. ++ ++2010-08-10 Paul Smith ++ ++ * main.c (main): Expand MAKEFLAGS before adding it to the ++ environment when re-exec'ing. Fixes Savannah bug #30723. ++ + 2010-07-28 Paul Smith + + Version 3.82 released. +diff -urpN make/main.c make-new/main.c +--- make/main.c 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/main.c 2010-09-13 13:42:12.000000000 +0200 +@@ -1138,7 +1138,7 @@ main (int argc, char **argv, char **envp + a macro and some compilers (MSVC) don't like conditionals in macros. */ + { + const char *features = "target-specific order-only second-expansion" +- " else-if shortest-stem undefine" ++ " else-if shortest-stem undefine oneshell" + #ifndef NO_ARCHIVES + " archives" + #endif +@@ -2093,7 +2093,7 @@ main (int argc, char **argv, char **envp + const char *pv = define_makeflags (1, 1); + char *p = alloca (sizeof ("MAKEFLAGS=") + strlen (pv) + 1); + sprintf (p, "MAKEFLAGS=%s", pv); +- putenv (p); ++ putenv (allocated_variable_expand (p)); + } + + if (ISDB (DB_BASIC)) +diff -urpN make/NEWS make-new/NEWS +--- make/NEWS 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/NEWS 2010-09-13 13:42:11.000000000 +0200 +@@ -18,14 +18,6 @@ http://sv.gnu.org/bugs/index.php?group=m + * Compiling GNU make now requires a conforming ISO C 1989 compiler and + standard runtime library. + +-* 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 +@@ -42,6 +34,21 @@ http://sv.gnu.org/bugs/index.php?group=m + existing targets were provided in $?). + + * WARNING: Backward-incompatibility! ++ Wildcards were not documented as returning sorted values, but the results ++ have been sorted up until this release.. If your makefiles require sorted ++ results from wildcard expansions, use the $(sort ...) function to request ++ it explicitly. ++ ++* WARNING: Backward-incompatibility! ++ In previous versions of make it was acceptable to list one or more explicit ++ targets followed by one or more pattern targets in the same rule and it ++ worked "as expected". However, this was not documented as acceptable and if ++ you listed any explicit targets AFTER the pattern targets, the entire rule ++ would be mis-parsed. This release removes this ability completely: make ++ will generate an error message if you mix explicit and pattern targets in ++ the same rule. ++ ++* 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 +diff -urpN make/read.c make-new/read.c +--- make/read.c 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/read.c 2010-09-13 13:42:11.000000000 +0200 +@@ -3028,7 +3028,7 @@ parse_file_seq (char **stringp, unsigned + { + /* This looks like the first element in an open archive group. + A valid group MUST have ')' as the last character. */ +- const char *e = p + nlen; ++ const char *e = p; + do + { + e = next_token (e); +@@ -3084,19 +3084,19 @@ parse_file_seq (char **stringp, unsigned + Go to the next item in the string. */ + if (flags & PARSEFS_NOGLOB) + { +- NEWELT (concat (2, prefix, tp)); ++ NEWELT (concat (2, prefix, tmpbuf)); + continue; + } + + /* If we get here we know we're doing glob expansion. + TP is a string in tmpbuf. NLEN is no longer used. + We may need to do more work: after this NAME will be set. */ +- name = tp; ++ name = tmpbuf; + + /* Expand tilde if applicable. */ +- if (tp[0] == '~') ++ if (tmpbuf[0] == '~') + { +- tildep = tilde_expand (tp); ++ tildep = tilde_expand (tmpbuf); + if (tildep != 0) + name = tildep; + } +@@ -3152,7 +3152,10 @@ parse_file_seq (char **stringp, unsigned + else + { + /* We got a chain of items. Attach them. */ +- (*newp)->next = found; ++ if (*newp) ++ (*newp)->next = found; ++ else ++ *newp = found; + + /* Find and set the new end. Massage names if necessary. */ + while (1) +diff -urpN make/tests/ChangeLog make-new/tests/ChangeLog +--- make/tests/ChangeLog 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/tests/ChangeLog 2010-09-13 13:42:10.000000000 +0200 +@@ -1,3 +1,16 @@ ++2010-08-13 Paul Smith ++ ++ * scripts/features/archives: New regression tests for archive ++ support. Test for fix to Savannah bug #30612. ++ ++ * run_make_tests.pl (set_more_defaults): Set a %FEATURES hash to ++ the features available in $(.FEATURES). ++ ++2010-08-10 Paul Smith ++ ++ * scripts/features/reinvoke: Ensure command line variable settings ++ are preserved across make re-exec. Tests Savannah bug #30723. ++ + 2010-07-28 Paul Smith + + * scripts/targets/POSIX: Compatibility issues with Solaris (and +diff -urpN make/tests/run_make_tests.pl make-new/tests/run_make_tests.pl +--- make/tests/run_make_tests.pl 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/tests/run_make_tests.pl 2010-09-13 13:42:10.000000000 +0200 +@@ -29,6 +29,7 @@ + # You should have received a copy of the GNU General Public License along with + # this program. If not, see . + ++%FEATURES = (); + + $valgrind = 0; # invoke make with valgrind + $valgrind_args = ''; +@@ -367,6 +368,8 @@ sub set_more_defaults + $parallel_jobs = 1; + } + ++ %FEATURES = map { $_ => 1 } split /\s+/, `sh -c "echo '\\\$(info \\\$(.FEATURES))' | $make_path -f- 2>/dev/null"`; ++ + # Set up for valgrind, if requested. + + if ($valgrind) { +diff -urpN make/tests/scripts/features/archives make-new/tests/scripts/features/archives +--- make/tests/scripts/features/archives 1970-01-01 01:00:00.000000000 +0100 ++++ make-new/tests/scripts/features/archives 2010-09-13 13:42:10.000000000 +0200 +@@ -0,0 +1,42 @@ ++# -*-mode: perl-*- ++ ++$description = "Test GNU make's archive management features."; ++ ++$details = "\ ++This only works on systems that support it."; ++ ++# If this instance of make doesn't support archives, skip it ++exists $FEATURES{archives} or return -1; ++ ++# Create some .o files to work with ++utouch(-60, qw(a1.o a2.o a3.o)); ++ ++# Very simple ++run_make_test('all: libxx.a(a1.o)', ++ '', "ar rv libxx.a a1.o\nar: creating libxx.a\na - a1.o\n"); ++ ++# Multiple .o's. Add a new one to the existing library ++run_make_test('all: libxx.a(a1.o a2.o)', ++ '', "ar rv libxx.a a2.o\na - a2.o\n"); ++ ++# Touch one of the .o's so it's rebuilt ++utouch(-40, 'a1.o'); ++run_make_test(undef, '', "ar rv libxx.a a1.o\nr - a1.o\n"); ++ ++# Use wildcards ++run_make_test('all: libxx.a(*.o)', ++ '', "#MAKE#: Nothing to be done for `all'.\n"); ++ ++# Touch one of the .o's so it's rebuilt ++utouch(-30, 'a1.o'); ++run_make_test(undef, '', "ar rv libxx.a a1.o\nr - a1.o\n"); ++ ++# Use both wildcards and simple names ++utouch(-50, 'a2.o'); ++run_make_test('all: libxx.a(a3.o *.o)', '', ++ "ar rv libxx.a a3.o\na - a3.o\nar rv libxx.a a2.o\nr - a2.o\n"); ++ ++rmfiles(qw(a1.o a2.o a3.o libxx.a)); ++ ++# This tells the test driver that the perl test script executed properly. ++1; +diff -urpN make/tests/scripts/features/reinvoke make-new/tests/scripts/features/reinvoke +--- make/tests/scripts/features/reinvoke 2010-09-13 13:42:35.000000000 +0200 ++++ make-new/tests/scripts/features/reinvoke 2010-09-13 13:42:10.000000000 +0200 +@@ -57,9 +57,24 @@ include $(F)', + # Now try with the file we're not updating being the actual file we're + # including: this and the previous one test different parts of the code. + +-run_make_test(undef, "F=b", "[ -f b ] || echo >> b\nhello\n") ++run_make_test(undef, 'F=b', "[ -f b ] || echo >> b\nhello\n") + + &rmfiles('a','b','c'); + ++# Ensure command line variables are preserved properly across re-exec ++# Tests for Savannah bug #30723 ++ ++run_make_test(' ++ifdef RECURSE ++-include foo30723 ++endif ++recurse: ; @$(MAKE) -f $(MAKEFILE_LIST) RECURSE=1 test ++test: ; @echo F.O=$(F.O) ++foo30723: ; @touch $@ ++', ++ '--no-print-directory F.O=bar', "F.O=bar\n"); ++ ++unlink('foo30723'); ++ + # This tells the test driver that the perl test script executed properly. + 1; diff --git a/SOURCES/make-3.82-copy-on-expand.patch b/SOURCES/make-3.82-copy-on-expand.patch new file mode 100644 index 0000000..55354ea --- /dev/null +++ b/SOURCES/make-3.82-copy-on-expand.patch @@ -0,0 +1,77 @@ +From 2f661dc20617ba6fdeb2d7e243dc898653faafea Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Tue, 26 Apr 2011 21:50:26 +0200 +Subject: [PATCH] Always copy the string before expanding it + +It might get freed during expansion, e.g. with eval function. +A simple reproducer: + +TRUE = $(eval TRUE := true) +all: + $(TRUE) +--- + ChangeLog | 5 +++++ + expand.c | 18 +++++++++--------- + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 91878fb..7519164 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2011-04-26 Lubomir Rintel ++ ++ * expand.c (variable_expand_string): Always copy the string ++ to expand. ++ + 2010-08-13 Paul Smith + + * NEWS: Accidentally forgot to back out the sorted wildcard +diff --git a/expand.c b/expand.c +index 2315b06..3e6e346 100644 +--- a/expand.c ++++ b/expand.c +@@ -197,7 +197,7 @@ variable_expand_string (char *line, const char *string, long length) + { + struct variable *v; + const char *p, *p1; +- char *abuf = NULL; ++ char *abuf; + char *o; + unsigned int line_offset; + +@@ -214,14 +214,15 @@ variable_expand_string (char *line, const char *string, long length) + + /* If we want a subset of the string, allocate a temporary buffer for it. + Most of the functions we use here don't work with length limits. */ +- if (length > 0 && string[length] != '\0') ++ if (length == -1) + { +- abuf = xmalloc(length+1); +- memcpy(abuf, string, length); +- abuf[length] = '\0'; +- string = abuf; ++ length = strlen (string); + } +- p = string; ++ ++ abuf = xmalloc(length+1); ++ memcpy(abuf, string, length); ++ abuf[length] = '\0'; ++ p = abuf; + + while (1) + { +@@ -411,8 +412,7 @@ variable_expand_string (char *line, const char *string, long length) + ++p; + } + +- if (abuf) +- free (abuf); ++ free (abuf); + + variable_buffer_output (o, "", 1); + return (variable_buffer + line_offset); +-- +1.7.4.1 + diff --git a/SOURCES/make-3.82-dont-prune-intermediate.patch b/SOURCES/make-3.82-dont-prune-intermediate.patch new file mode 100644 index 0000000..f4f47dd --- /dev/null +++ b/SOURCES/make-3.82-dont-prune-intermediate.patch @@ -0,0 +1,57 @@ +2012-09-09 Paul Smith + + * remake.c (update_file_1): Force intermediate files to be + considered, not pruned, if their non-intermediate parent needs to + be remade. Fixes Savannah bug #30653. + +Index: remake.c +=================================================================== +RCS file: /sources/make/make/remake.c,v +retrieving revision 1.153 +retrieving revision 1.154 +diff -u -r1.153 -r1.154 +--- remake.c 5 Mar 2012 14:10:45 -0000 1.153 ++++ remake.c 10 Sep 2012 02:36:05 -0000 1.154 +@@ -612,6 +612,10 @@ + d->file->dontcare = file->dontcare; + } + ++ /* We may have already considered this file, when we didn't know ++ we'd need to update it. Force update_file() to consider it and ++ not prune it. */ ++ d->file->considered = !considered; + + dep_status |= update_file (d->file, depth); + +Index: tests/scripts/features/parallelism +=================================================================== +RCS file: /sources/make/make/tests/scripts/features/parallelism,v +retrieving revision 1.19 +retrieving revision 1.20 +diff -u -r1.19 -r1.20 +--- tests/scripts/features/parallelism 4 Mar 2012 00:24:32 -0000 1.19 ++++ tests/scripts/features/parallelism 10 Sep 2012 02:36:05 -0000 1.20 +@@ -214,6 +214,23 @@ + rmfiles(qw(foo.y foo.y.in main.bar)); + } + ++# Ensure intermediate/secondary files are not pruned incorrectly. ++# See Savannah bug #30653 ++ ++utouch(-15, 'file2'); ++utouch(-10, 'file4'); ++utouch(-5, 'file1'); ++ ++run_make_test(q! ++.INTERMEDIATE: file3 ++file4: file3 ; @mv -f $< $@ ++file3: file2 ; touch $@ ++file2: file1 ; @touch $@ ++!, ++ '--no-print-directory -j2', "touch file3"); ++ ++#rmfiles('file1', 'file2', 'file3', 'file4'); ++ + if ($all_tests) { + # Jobserver FD handling is messed up in some way. + # Savannah bug #28189 diff --git a/SOURCES/make-3.82-empty-members.patch b/SOURCES/make-3.82-empty-members.patch new file mode 100644 index 0000000..cd594a6 --- /dev/null +++ b/SOURCES/make-3.82-empty-members.patch @@ -0,0 +1,52 @@ +From b06b8c64a29a5ba3a8daecd829fa2f98d42cb285 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sun, 12 Jun 2011 16:22:04 +0000 +Subject: Fix another error related to whitespace handling in archives. + +Note that this is a stripped version of the patch--ChangeLogs and some +VMS stuff were kept out. +--- +diff --git a/read.c b/read.c +index c87d4a7..b012094 100644 +--- a/read.c ++++ b/read.c +@@ -3044,16 +3044,16 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar, + nlen -= (n + 1) - tp; + tp = n + 1; + +- /* If we have just "lib(", part of something like +- "lib( a b)", go to the next item. */ +- if (! nlen) +- continue; +- + /* We can stop looking now. */ + break; + } + } + while (*e != '\0'); ++ ++ /* If we have just "lib(", part of something like "lib( a b)", ++ go to the next item. */ ++ if (! nlen) ++ continue; + } + } + +diff --git a/tests/scripts/features/archives b/tests/scripts/features/archives +index 00aa1af..3fe46a0 100644 +--- a/tests/scripts/features/archives ++++ b/tests/scripts/features/archives +@@ -36,6 +36,11 @@ utouch(-50, 'a2.o'); + run_make_test('all: libxx.a(a3.o *.o)', '', + "ar rv libxx.a a3.o\na - a3.o\nar rv libxx.a a2.o\nr - a2.o\n"); + ++# Check whitespace handling ++utouch(-40, 'a2.o'); ++run_make_test('all: libxx.a( a3.o *.o )', '', ++ "ar rv libxx.a a2.o\nr - a2.o\n"); ++ + rmfiles(qw(a1.o a2.o a3.o libxx.a)); + + # This tells the test driver that the perl test script executed properly. +-- +cgit v0.9.0.2 diff --git a/SOURCES/make-3.82-err-reporting.patch b/SOURCES/make-3.82-err-reporting.patch new file mode 100644 index 0000000..2f5b3c6 --- /dev/null +++ b/SOURCES/make-3.82-err-reporting.patch @@ -0,0 +1,157 @@ +diff -urp make-3.82/misc.c make-3.82-pm/misc.c +--- make-3.82/misc.c 2010-07-19 09:10:54.000000000 +0200 ++++ make-3.82-pm/misc.c 2010-08-11 15:26:45.000000000 +0200 +@@ -342,17 +342,31 @@ strerror (int errnum) + /* Print an error message from errno. */ + + void ++perror_with_name_err (const char *str, const char *name, int errnum) ++{ ++ error (NILF, _("%s%s: %s"), str, name, strerror (errnum)); ++} ++ ++void + perror_with_name (const char *str, const char *name) + { +- error (NILF, _("%s%s: %s"), str, name, strerror (errno)); ++ perror_with_name_err (str, name, errno); + } + + /* Print an error message from errno and exit. */ + + void ++pfatal_with_name_err (const char *name, int errnum) ++{ ++ fatal (NILF, _("%s: %s"), name, strerror (errnum)); ++ ++ /* NOTREACHED */ ++} ++ ++void + pfatal_with_name (const char *name) + { +- fatal (NILF, _("%s: %s"), name, strerror (errno)); ++ pfatal_with_name_err (name, errno); + + /* NOTREACHED */ + } +diff -urp make-3.82/main.c make-3.82-pm/main.c +--- make-3.82/main.c 2010-08-11 15:34:12.000000000 +0200 ++++ make-3.82-pm/main.c 2010-08-11 15:30:11.000000000 +0200 +@@ -1536,13 +1536,13 @@ main (int argc, char **argv, char **envp + strcat (template, DEFAULT_TMPFILE); + outfile = open_tmpfile (&stdin_nm, template); + if (outfile == 0) +- pfatal_with_name (_("fopen (temporary file)")); ++ pfatal_with_name_err (_("fopen (temporary file)"), errno); + while (!feof (stdin) && ! ferror (stdin)) + { + char buf[2048]; + unsigned int n = fread (buf, 1, sizeof (buf), stdin); + if (n > 0 && fwrite (buf, 1, n, outfile) != n) +- pfatal_with_name (_("fwrite (temporary file)")); ++ pfatal_with_name_err (_("fwrite (temporary file)"), errno); + } + fclose (outfile); + +@@ -1747,7 +1747,7 @@ main (int argc, char **argv, char **envp + else if ((job_rfd = dup (job_fds[0])) < 0) + { + if (errno != EBADF) +- pfatal_with_name (_("dup jobserver")); ++ pfatal_with_name_err (_("dup jobserver"), errno); + + error (NILF, + _("warning: jobserver unavailable: using -j1. Add `+' to parent make rule.")); +@@ -1788,7 +1788,7 @@ main (int argc, char **argv, char **envp + char c = '+'; + + if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0) +- pfatal_with_name (_("creating jobs pipe")); ++ pfatal_with_name_err (_("creating jobs pipe"), errno); + + /* Every make assumes that it always has one job it can run. For the + submakes it's the token they were given by their parent. For the +@@ -1803,7 +1803,7 @@ main (int argc, char **argv, char **envp + + EINTRLOOP (r, write (job_fds[1], &c, 1)); + if (r != 1) +- pfatal_with_name (_("init jobserver pipe")); ++ pfatal_with_name_err (_("init jobserver pipe"), errno); + } + + /* Fill in the jobserver_fds struct for our children. */ +@@ -2226,7 +2226,7 @@ main (int argc, char **argv, char **envp + /* If there is a temp file from reading a makefile from stdin, get rid of + it now. */ + if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT) +- perror_with_name (_("unlink (temporary file): "), stdin_nm); ++ perror_with_name_err (_("unlink (temporary file): "), stdin_nm, errno); + + /* If there were no command-line goals, use the default. */ + if (goals == 0) +Только в make-3.82-pm: job.c~ +Только в make-3.82-pm: main.c~ +diff -urp make-3.82/make.h make-3.82-pm/make.h +--- make-3.82/make.h 2010-08-11 15:34:12.000000000 +0200 ++++ make-3.82-pm/make.h 2010-08-11 15:31:26.000000000 +0200 +@@ -385,6 +385,8 @@ void die (int) __attribute__ ((noreturn) + void log_working_directory (int); + void pfatal_with_name (const char *) __attribute__ ((noreturn)); + void perror_with_name (const char *, const char *); ++void pfatal_with_name_err (const char *, int errnum) __attribute__ ((noreturn)); ++void perror_with_name_err (const char *, const char *, int errnum); + void *xmalloc (unsigned int); + void *xcalloc (unsigned int); + void *xrealloc (void *, unsigned int); +diff -urp make-3.82/job.c make-3.82-pm/job.c +--- make-3.82/job.c 2010-07-24 10:27:50.000000000 +0200 ++++ make-3.82-pm/job.c 2010-08-11 15:33:54.000000000 +0200 +@@ -917,7 +917,7 @@ free_child (struct child *child) + + EINTRLOOP (r, write (job_fds[1], &token, 1)); + if (r != 1) +- pfatal_with_name (_("write jobserver")); ++ pfatal_with_name_err (_("write jobserver"), errno); + + DB (DB_JOBS, (_("Released token for child %p (%s).\n"), + child, child->file->name)); +@@ -1768,6 +1768,7 @@ new_job (struct file *file) + + /* Set interruptible system calls, and read() for a job token. */ + set_child_handler_action_flags (1, waiting_jobs != NULL); ++ errno = 0; + got_token = read (job_rfd, &token, 1); + saved_errno = errno; + set_child_handler_action_flags (0, waiting_jobs != NULL); +@@ -1782,10 +1783,14 @@ new_job (struct file *file) + + /* If the error _wasn't_ expected (EINTR or EBADF), punt. Otherwise, + go back and reap_children(), and try again. */ +- errno = saved_errno; +- if (errno != EINTR && errno != EBADF) +- pfatal_with_name (_("read jobs pipe")); +- if (errno == EBADF) ++ if (saved_errno != EINTR && saved_errno != EBADF) ++ { ++ if (got_token == 0) ++ fatal (NILF, _("read jobs pipe EOF")); ++ else ++ pfatal_with_name_err (_("read jobs pipe"), saved_errno); ++ } ++ if (saved_errno == EBADF) + DB (DB_JOBS, ("Read returned EBADF.\n")); + } + #endif +@@ -1909,7 +1914,8 @@ load_too_high (void) + error (NILF, + _("cannot enforce load limits on this operating system")); + else +- perror_with_name (_("cannot enforce load limit: "), "getloadavg"); ++ perror_with_name_err (_("cannot enforce load limit: "), ++ "getloadavg", errno); + } + lossage = errno; + load = 0; +Только в make-3.82-pm: make.h~ +Только в make-3.82-pm: misc.c.orig diff --git a/SOURCES/make-3.82-expensive_glob.patch b/SOURCES/make-3.82-expensive_glob.patch new file mode 100644 index 0000000..8663f50 --- /dev/null +++ b/SOURCES/make-3.82-expensive_glob.patch @@ -0,0 +1,116 @@ +Index: read.c +=================================================================== +RCS file: /sources/make/make/read.c,v +retrieving revision 1.198 +retrieving revision 1.200 +diff -u -r1.198 -r1.200 +--- read.c 29 Apr 2011 15:27:39 -0000 1.198 ++++ read.c 7 May 2011 14:36:12 -0000 1.200 +@@ -2901,6 +2901,7 @@ + const char *name; + const char **nlist = 0; + char *tildep = 0; ++ int globme = 1; + #ifndef NO_ARCHIVES + char *arname = 0; + char *memname = 0; +@@ -3109,32 +3110,40 @@ + } + #endif /* !NO_ARCHIVES */ + +- switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl)) +- { +- case GLOB_NOSPACE: +- fatal (NILF, _("virtual memory exhausted")); +- +- case 0: +- /* Success. */ +- i = gl.gl_pathc; +- nlist = (const char **)gl.gl_pathv; +- break; +- +- case GLOB_NOMATCH: +- /* If we want only existing items, skip this one. */ +- if (flags & PARSEFS_EXISTS) +- { +- i = 0; +- break; +- } +- /* FALLTHROUGH */ +- +- default: +- /* By default keep this name. */ ++ /* glob() is expensive: don't call it unless we need to. */ ++ if (!(flags & PARSEFS_EXISTS) && strpbrk (name, "?*[") == NULL) ++ { ++ globme = 0; + i = 1; + nlist = &name; +- break; +- } ++ } ++ else ++ switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl)) ++ { ++ case GLOB_NOSPACE: ++ fatal (NILF, _("virtual memory exhausted")); ++ ++ case 0: ++ /* Success. */ ++ i = gl.gl_pathc; ++ nlist = (const char **)gl.gl_pathv; ++ break; ++ ++ case GLOB_NOMATCH: ++ /* If we want only existing items, skip this one. */ ++ if (flags & PARSEFS_EXISTS) ++ { ++ i = 0; ++ break; ++ } ++ /* FALLTHROUGH */ ++ ++ default: ++ /* By default keep this name. */ ++ i = 1; ++ nlist = &name; ++ break; ++ } + + /* For each matched element, add it to the list. */ + while (i-- > 0) +@@ -3174,7 +3183,8 @@ + #endif /* !NO_ARCHIVES */ + NEWELT (concat (2, prefix, nlist[i])); + +- globfree (&gl); ++ if (globme) ++ globfree (&gl); + + #ifndef NO_ARCHIVES + if (arname) +Index: tests/scripts/functions/wildcard +=================================================================== +RCS file: /sources/make/make/tests/scripts/functions/wildcard,v +retrieving revision 1.6 +retrieving revision 1.7 +diff -u -r1.6 -r1.7 +--- tests/scripts/functions/wildcard 13 Jun 2009 21:21:49 -0000 1.6 ++++ tests/scripts/functions/wildcard 7 May 2011 14:36:11 -0000 1.7 +@@ -88,4 +88,16 @@ + !, + '', "\n"); + ++# TEST #5: wildcard used to verify file existence ++ ++touch('xxx.yyy'); ++ ++run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, ++ '', "file=xxx.yyy\n"); ++ ++unlink('xxx.yyy'); ++ ++run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, ++ '', "file=\n"); ++ + 1; diff --git a/SOURCES/make-3.82-func_shell-rlimit.patch b/SOURCES/make-3.82-func_shell-rlimit.patch new file mode 100644 index 0000000..28183a9 --- /dev/null +++ b/SOURCES/make-3.82-func_shell-rlimit.patch @@ -0,0 +1,35 @@ +From 552207b506f4d98a6a5f73053aa6bd924758708f Mon Sep 17 00:00:00 2001 +From: Petr Machata +Date: Thu, 22 Aug 2013 16:46:17 +0200 +Subject: [PATCH] Get rid of stack size limit for processes spawned via + $(shell) + +--- + ChangeLog | 5 +++++ + function.c | 10 +++++++++- + 2 files changed, 14 insertions(+), 1 deletions(-) + +diff --git a/function.c b/function.c +index 9eabd73..e121b9a 100644 +--- a/function.c ++++ b/function.c +@@ -1715,7 +1715,15 @@ func_shell_base (char *o, char **argv, int trim_newlines) + if (pid < 0) + perror_with_name (error_prefix, "fork"); + else if (pid == 0) +- child_execute_job (0, pipedes[1], command_argv, envp); ++ { ++#ifdef SET_STACK_SIZE ++ /* Reset limits, if necessary. */ ++ if (stack_limit.rlim_cur) ++ setrlimit (RLIMIT_STACK, &stack_limit); ++#endif ++ ++ child_execute_job (0, pipedes[1], command_argv, envp); ++ } + else + # endif + #endif +-- +1.7.6.5 + diff --git a/SOURCES/make-3.82-getcwd.patch b/SOURCES/make-3.82-getcwd.patch new file mode 100644 index 0000000..b688732 --- /dev/null +++ b/SOURCES/make-3.82-getcwd.patch @@ -0,0 +1,14 @@ +diff -up make-3.82/make.h\~ make-3.82/make.h +--- make-3.82/make.h~ 2010-07-20 15:12:06.000000000 +0200 ++++ make-3.82/make.h 2010-08-11 15:19:09.000000000 +0200 +@@ -472,7 +472,7 @@ long int lseek (); + #endif /* Not GNU C library or POSIX. */ + + #ifdef HAVE_GETCWD +-# if !defined(VMS) && !defined(__DECC) ++# if !defined(VMS) && !defined(__DECC) && !defined(getcwd) + char *getcwd (); + # endif + #else + +Diff finished. Wed Aug 11 15:19:12 2010 diff --git a/SOURCES/make-3.82-j8k.patch b/SOURCES/make-3.82-j8k.patch new file mode 100644 index 0000000..b5fa357 --- /dev/null +++ b/SOURCES/make-3.82-j8k.patch @@ -0,0 +1,26 @@ +diff -up make-3.82/main.c\~ make-3.82/main.c +--- make-3.82/main.c~ 2010-07-19 09:10:53.000000000 +0200 ++++ make-3.82/main.c 2010-08-11 15:12:09.000000000 +0200 +@@ -1765,6 +1765,20 @@ main (int argc, char **argv, char **envp + } + } + ++#ifdef PIPE_BUF ++ if (job_slots > PIPE_BUF) ++#elif defined _POSIX_PIPE_BUF ++ if (job_slots > _POSIX_PIPE_BUF) ++#else ++ if (job_slots > 512) ++#endif ++ { ++ error (NILF, ++ _("More parallel jobs (-jN) than this platform can handle requested.")); ++ error (NILF, _("Resetting to single job (-j1) mode.")); ++ job_slots = 1; ++ } ++ + /* If we have >1 slot but no jobserver-fds, then we're a top-level make. + Set up the pipe and install the fds option for our children. */ + + +Diff finished. Wed Aug 11 15:12:32 2010 diff --git a/SOURCES/make-3.82-jobserver.patch b/SOURCES/make-3.82-jobserver.patch new file mode 100644 index 0000000..2a85503 --- /dev/null +++ b/SOURCES/make-3.82-jobserver.patch @@ -0,0 +1,19 @@ +diff -up make-3.82/main.c\~ make-3.82/main.c +--- make-3.82/main.c~ 2010-08-12 14:59:20.000000000 +0200 ++++ make-3.82/main.c 2010-08-12 15:00:07.000000000 +0200 +@@ -1756,8 +1756,11 @@ main (int argc, char **argv, char **envp + + if (job_slots > 0) + { +- close (job_fds[0]); +- close (job_fds[1]); ++ if (restarts == 0) ++ { ++ close (job_fds[0]); ++ close (job_fds[1]); ++ } + job_fds[0] = job_fds[1] = -1; + free (jobserver_fds->list); + free (jobserver_fds); + +Diff finished. Thu Aug 12 15:00:22 2010 diff --git a/SOURCES/make-3.82-newlines.patch b/SOURCES/make-3.82-newlines.patch new file mode 100644 index 0000000..d86018a --- /dev/null +++ b/SOURCES/make-3.82-newlines.patch @@ -0,0 +1,30 @@ +diff -up make-3.82/job.c\~ make-3.82/job.c +--- make-3.82/job.c~ 2010-08-12 14:57:15.000000000 +0200 ++++ make-3.82/job.c 2010-08-12 14:58:23.000000000 +0200 +@@ -2876,7 +2876,7 @@ construct_command_argv_internal (char *l + } + + new_line = alloca (shell_len + 1 + sflags_len + 1 +- + (line_len*2) + 1); ++ + (line_len*4) + 1); + ap = new_line; + memcpy (ap, shell, shell_len); + ap += shell_len; +@@ -2904,13 +2904,14 @@ construct_command_argv_internal (char *l + #endif + if (PRESERVE_BSNL) + { +- *(ap++) = '\\'; ++ *(ap++) = '\''; + /* Only non-batch execution needs another backslash, + because it will be passed through a recursive + invocation of this function. */ + if (!batch_mode_shell) + *(ap++) = '\\'; + *(ap++) = '\n'; ++ *(ap++) = '\''; + } + ++p; + continue; + +Diff finished. Thu Aug 12 14:58:34 2010 diff --git a/SOURCES/make-3.82-noclock_gettime.patch b/SOURCES/make-3.82-noclock_gettime.patch new file mode 100644 index 0000000..f63e1fc --- /dev/null +++ b/SOURCES/make-3.82-noclock_gettime.patch @@ -0,0 +1,14 @@ +diff -up make-3.82/configure\~ make-3.82/configure +--- make-3.82/configure~ 2010-07-28 07:41:51.000000000 +0200 ++++ make-3.82/configure 2010-08-11 15:07:50.000000000 +0200 +@@ -7215,7 +7215,7 @@ return clock_gettime (); + return 0; + } + _ACEOF +-for ac_lib in '' rt posix4; do ++for ac_lib in '' posix4; do + if test -z "$ac_lib"; then + ac_res="none required" + else + +Diff finished. Wed Aug 11 15:07:59 2010 diff --git a/SOURCES/make-3.82-parallel-remake.patch b/SOURCES/make-3.82-parallel-remake.patch new file mode 100644 index 0000000..878b541 --- /dev/null +++ b/SOURCES/make-3.82-parallel-remake.patch @@ -0,0 +1,30 @@ +Index: main.c +=================================================================== +RCS file: /sources/make/make/main.c,v +retrieving revision 1.247 +retrieving revision 1.246 +diff -u -r1.247 -r1.246 +--- main.c 18 Sep 2011 23:39:26 -0000 1.247 ++++ main.c 29 Aug 2010 23:05:27 -0000 1.246 +@@ -2089,6 +2089,11 @@ + + ++restarts; + ++ /* If we're re-exec'ing the first make, put back the number of ++ job slots so define_makefiles() will get it right. */ ++ if (master_job_slots) ++ job_slots = master_job_slots; ++ + /* Reset makeflags in case they were changed. */ + { + const char *pv = define_makeflags (1, 1); +@@ -2830,9 +2825,6 @@ + && (*(unsigned int *) cs->value_ptr == + *(unsigned int *) cs->noarg_value)) + ADD_FLAG ("", 0); /* Optional value omitted; see below. */ +- else if (cs->c == 'j') +- /* Special case for `-j'. */ +- ADD_FLAG ("1", 1); + else + { + char *buf = alloca (30); diff --git a/SOURCES/make-3.82-sort-blank.patch b/SOURCES/make-3.82-sort-blank.patch new file mode 100644 index 0000000..7cfbbc0 --- /dev/null +++ b/SOURCES/make-3.82-sort-blank.patch @@ -0,0 +1,22 @@ +diff -urp make-3.82/function.c make-3.82-pm/function.c +--- make-3.82/function.c 2010-07-13 03:20:39.000000000 +0200 ++++ make-3.82-pm/function.c 2010-10-27 01:43:27.000000000 +0200 +@@ -1138,12 +1138,12 @@ func_sort (char *o, char **argv, const c + { + char c = *(t++); + +- if (! isspace ((unsigned char)c)) ++ if (! isblank ((unsigned char)c)) + continue; + + ++wordi; + +- while (isspace ((unsigned char)*t)) ++ while (isblank ((unsigned char)*t)) + ++t; + } + +Только в make-3.82-pm: function.c~ +Двоичные файлы make-3.82/function.o и make-3.82-pm/function.o различаются +Двоичные файлы make-3.82/make и make-3.82-pm/make различаются +Только в make-3.82-pm: misc.c~ diff --git a/SOURCES/make-3.82-stem_glob.patch b/SOURCES/make-3.82-stem_glob.patch new file mode 100644 index 0000000..df30e3c --- /dev/null +++ b/SOURCES/make-3.82-stem_glob.patch @@ -0,0 +1,194 @@ +diff -up make-3.82/default.c~ make-3.82/default.c +--- make-3.82/default.c~ 2010-07-13 03:20:39.000000000 +0200 ++++ make-3.82/default.c 2013-07-26 19:28:27.372056421 +0200 +@@ -542,9 +542,8 @@ set_default_suffixes (void) + else + { + char *p = default_suffixes; +- suffix_file->deps = enter_prereqs(PARSE_FILE_SEQ (&p, struct dep, '\0', +- NULL, 0), +- NULL); ++ suffix_file->deps = enter_prereqs (PARSE_SIMPLE_SEQ (&p, struct dep), ++ NULL); + define_variable_cname ("SUFFIXES", default_suffixes, o_default, 0); + } + } +diff -up make-3.82/dep.h~ make-3.82/dep.h +--- make-3.82/dep.h~ 2010-07-13 03:20:39.000000000 +0200 ++++ make-3.82/dep.h 2013-07-26 19:40:03.121285291 +0200 +@@ -65,6 +65,8 @@ struct nameseq + + #define PARSE_FILE_SEQ(_s,_t,_c,_p,_f) \ + (_t *)parse_file_seq ((_s),sizeof (_t),(_c),(_p),(_f)) ++#define PARSE_SIMPLE_SEQ(_s,_t) \ ++ (_t *)parse_file_seq ((_s),sizeof (_t),'\0',NULL,PARSEFS_NONE) + + #ifdef VMS + void *parse_file_seq (); +diff -up make-3.82/file.c~ make-3.82/file.c +--- make-3.82/file.c~ 2010-07-13 03:20:39.000000000 +0200 ++++ make-3.82/file.c 2013-07-26 19:40:47.067541216 +0200 +@@ -426,7 +426,7 @@ remove_intermediates (int sig) + struct dep * + split_prereqs (char *p) + { +- struct dep *new = PARSE_FILE_SEQ (&p, struct dep, '|', NULL, 0); ++ struct dep *new = PARSE_FILE_SEQ (&p, struct dep, '|', NULL, PARSEFS_NONE); + + if (*p) + { +@@ -435,7 +435,7 @@ split_prereqs (char *p) + struct dep *ood; + + ++p; +- ood = PARSE_FILE_SEQ (&p, struct dep, '\0', NULL, 0); ++ ood = PARSE_SIMPLE_SEQ (&p, struct dep); + + if (! new) + new = ood; +diff -up make-3.82/implicit.c~ make-3.82/implicit.c +--- make-3.82/implicit.c~ 2010-07-13 03:20:40.000000000 +0200 ++++ make-3.82/implicit.c 2013-07-26 19:42:33.650161869 +0200 +@@ -254,8 +254,6 @@ pattern_search (struct file *file, int a + that is not just `%'. */ + int specific_rule_matched = 0; + +- struct dep dep_simple; +- + unsigned int ri; /* uninit checks OK */ + struct rule *rule; + +@@ -530,11 +528,9 @@ pattern_search (struct file *file, int a + /* If we don't need a second expansion, just replace the %. */ + if (! dep->need_2nd_expansion) + { +- dep_simple = *dep; +- dep_simple.next = 0; + p = strchr (nptr, '%'); + if (p == 0) +- dep_simple.name = nptr; ++ strcpy (depname, nptr); + else + { + char *o = depname; +@@ -548,13 +544,19 @@ pattern_search (struct file *file, int a + memcpy (o, stem_str, stemlen); + o += stemlen; + strcpy (o, p + 1); +- dep_simple.name = strcache_add (depname); + } +- dl = &dep_simple; ++ ++ /* Parse the expanded string. It might have wildcards. */ ++ p = depname; ++ dl = PARSE_SIMPLE_SEQ (&p, struct dep); ++ for (d = dl; d != NULL; d = d->next) ++ { ++ ++deps_found; ++ d->ignore_mtime = dep->ignore_mtime; ++ } + + /* We've used up this dep, so next time get a new one. */ + nptr = 0; +- ++deps_found; + } + + /* We have to perform second expansion on this prereq. In an +@@ -633,7 +635,7 @@ pattern_search (struct file *file, int a + + /* Parse the expanded string. */ + dl = PARSE_FILE_SEQ (&p, struct dep, order_only ? '\0' : '|', +- add_dir ? dir : NULL, 0); ++ add_dir ? dir : NULL, PARSEFS_NONE); + + for (d = dl; d != NULL; d = d->next) + { +@@ -777,8 +779,7 @@ pattern_search (struct file *file, int a + } + + /* Free the ns chain. */ +- if (dl != &dep_simple) +- free_dep_chain (dl); ++ free_dep_chain (dl); + + if (failed) + break; +diff -up make-3.82/main.c~ make-3.82/main.c +--- make-3.82/main.c~ 2013-07-26 19:27:26.076702728 +0200 ++++ make-3.82/main.c 2013-07-26 19:42:57.476300585 +0200 +@@ -2276,7 +2276,7 @@ main (int argc, char **argv, char **envp + { + struct nameseq *ns; + +- ns = PARSE_FILE_SEQ (&p, struct nameseq, '\0', NULL, 0); ++ ns = PARSE_SIMPLE_SEQ (&p, struct nameseq); + if (ns) + { + /* .DEFAULT_GOAL should contain one target. */ +diff -up make-3.82/read.c~ make-3.82/read.c +--- make-3.82/read.c~ 2013-07-26 19:27:26.122702993 +0200 ++++ make-3.82/read.c 2013-07-26 19:43:42.004559875 +0200 +@@ -1033,7 +1033,7 @@ eval (struct ebuffer *ebuf, int set_defa + /* Make the colon the end-of-string so we know where to stop + looking for targets. */ + *colonp = '\0'; +- filenames = PARSE_FILE_SEQ (&p2, struct nameseq, '\0', NULL, 0); ++ filenames = PARSE_SIMPLE_SEQ (&p2, struct nameseq); + *p2 = ':'; + + if (!filenames) +diff -up make-3.82/rule.c~ make-3.82/rule.c +--- make-3.82/rule.c~ 2010-07-19 09:10:54.000000000 +0200 ++++ make-3.82/rule.c 2013-07-26 19:44:03.956687696 +0200 +@@ -377,7 +377,7 @@ install_pattern_rule (struct pspec *p, i + ++r->suffixes[0]; + + ptr = p->dep; +- r->deps = PARSE_FILE_SEQ (&ptr, struct dep, '\0', NULL, 0); ++ r->deps = PARSE_SIMPLE_SEQ (&ptr, struct dep); + + if (new_pattern_rule (r, 0)) + { +diff --git a/tests/scripts/features/rule_glob b/tests/scripts/features/rule_glob +new file mode 100644 +index 0000000..2d377e7 +--- /dev/null ++++ b/tests/scripts/features/rule_glob +@@ -0,0 +1,37 @@ ++# -*-perl-*- ++ ++$description = "Test globbing in targets and prerequisites."; ++ ++$details = ""; ++ ++touch(qw(a.one a.two a.three)); ++ ++# Test wildcards in regular targets and prerequisites ++run_make_test(q{ ++.PHONY: all a.one a.two a.three ++all: a.one* a.t[a-z0-9]o a.th[!q]ee ++a.o[Nn][Ee] a.t*: ; @echo $@ ++}, ++ '', "a.one\na.two\na.three"); ++ ++# Test wildcards in pattern targets and prerequisites ++run_make_test(q{ ++.PHONY: all ++all: a.four ++%.four : %.t* ; @echo $@: $(sort $^) ++}, ++ '', "a.four: a.three a.two"); ++ ++# Test wildcards in second expansion targets and prerequisites ++run_make_test(q{ ++.PHONY: all ++all: a.four ++.SECONDEXPANSION: ++%.four : $$(sort %.t*) ; @echo $@: $(sort $^) ++}, ++ '', "a.four: a.three a.two"); ++ ++unlink(qw(a.one a.two a.three)); ++ ++# This tells the test driver that the perl test script executed properly. ++1; diff --git a/SOURCES/make-3.82-tests-SECONDARY.patch b/SOURCES/make-3.82-tests-SECONDARY.patch new file mode 100644 index 0000000..989f12b --- /dev/null +++ b/SOURCES/make-3.82-tests-SECONDARY.patch @@ -0,0 +1,30 @@ +From 3057357c0a5c2507eef2b61eef9ebfb569b30230 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sat, 10 Dec 2011 17:13:14 +0000 +Subject: [PATCH] Add prerequisites to ensure ordering of results. + +--- + tests/scripts/targets/SECONDARY | 5 +++-- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/tests/scripts/targets/SECONDARY b/tests/scripts/targets/SECONDARY +index c954ee9..26515d8 100644 +--- a/tests/scripts/targets/SECONDARY ++++ b/tests/scripts/targets/SECONDARY +@@ -129,10 +129,11 @@ touch(qw(1.a 2.a)); + run_make_test(' + %.c : %.b ; cp $< $@ + %.b : %.a ; cp $< $@ +-all : 1.c 2.c', '-rR -j', ++all : 1.c 2.c ++2.a: 1.c', '-rR -j', + 'cp 1.a 1.b +-cp 2.a 2.b + cp 1.b 1.c ++cp 2.a 2.b + cp 2.b 2.c + rm 1.b 2.b'); + +-- +1.7.6.5 + diff --git a/SOURCES/make-3.82-trace.patch b/SOURCES/make-3.82-trace.patch new file mode 100644 index 0000000..b8cafa9 --- /dev/null +++ b/SOURCES/make-3.82-trace.patch @@ -0,0 +1,111 @@ + +This patch add the support for --debug=c and --debug=e to make +this option when activated will trace in stdout the activity of $(call and $(eval in the Makefile + +The trace use the format: + ### xxx --> + ### xxx <-- +the number of space before ### is at least 1 and increase with the nesting of eval/call + +usage: make --debug=c,e + +diff -r -u make-3.82/debug.h make-3.82-lo_trace/debug.h +--- make-3.82/debug.h 2010-07-12 20:20:38.000000000 -0500 ++++ make-3.82-lo_trace/debug.h 2011-06-22 12:06:37.000000000 -0500 +@@ -21,6 +21,8 @@ + #define DB_JOBS (0x004) + #define DB_IMPLICIT (0x008) + #define DB_MAKEFILES (0x100) ++#define DB_CALL (0x01000) ++#define DB_EVAL (0x02000) + + #define DB_ALL (0xfff) + +diff -r -u make-3.82/function.c make-3.82-lo_trace/function.c +--- make-3.82/function.c 2011-06-23 01:01:35.000000000 -0500 ++++ make-3.82-lo_trace/function.c 2011-06-23 01:40:05.000000000 -0500 +@@ -28,6 +28,8 @@ + #include "amiga.h" + #endif + ++static int depth = 0; ++ + + struct function_table_entry + { +@@ -1371,7 +1373,12 @@ + + install_variable_buffer (&buf, &len); + ++ depth += 1; ++ DBS( DB_EVAL, ("### eval -->\n")); ++ DB( DB_EVAL, ("%s\n", argv[0])); + eval_buffer (argv[0]); ++ DBS( DB_EVAL, ("### eval <--\n")); ++ depth -= 1; + + restore_variable_buffer (buf, len); + +@@ -2338,6 +2345,7 @@ + if (v == 0 || *v->value == '\0') + return o; + ++ depth += 1; + body = alloca (flen + 4); + body[0] = '$'; + body[1] = '('; +@@ -2345,6 +2353,7 @@ + body[flen+2] = ')'; + body[flen+3] = '\0'; + ++ DBS(DB_CALL, ("### call %s -->\n", body)); + /* Set up arguments $(1) .. $(N). $(0) is the function name. */ + + push_new_variable_scope (); +@@ -2354,6 +2363,7 @@ + char num[11]; + + sprintf (num, "%d", i); ++ DBS(DB_CALL, ("### arg %i for call %s is '%s'\n", i, body, *argv)); + define_variable (num, strlen (num), *argv, o_automatic, 0); + } + +@@ -2367,6 +2377,7 @@ + char num[11]; + + sprintf (num, "%d", i); ++ DBS(DB_CALL, ("### arg %i for call %s is implicit\n", i, body)); + define_variable (num, strlen (num), "", o_automatic, 0); + } + +@@ -2377,7 +2388,14 @@ + + saved_args = max_args; + max_args = i; ++ + o = variable_expand_string (o, body, flen+3); ++ DBS(DB_CALL, ("### call to %s expended into\n", body)); ++ DB(DB_CALL, ("%s\n", o)); ++ DBS(DB_CALL, ("### call %s <--\n", body)); ++ ++ depth -= 1; ++ + max_args = saved_args; + + v->exp_count = 0; +diff -r -u make-3.82/main.c make-3.82-lo_trace/main.c +--- make-3.82/main.c 2010-07-19 02:10:53.000000000 -0500 ++++ make-3.82-lo_trace/main.c 2011-06-22 11:46:39.000000000 -0500 +@@ -634,6 +634,12 @@ + case 'b': + db_level |= DB_BASIC; + break; ++ case 'c': ++ db_level |= DB_CALL; ++ break; ++ case 'e': ++ db_level |= DB_EVAL; ++ break; + case 'i': + db_level |= DB_BASIC | DB_IMPLICIT; + break; diff --git a/SOURCES/make-3.82-warn_undefined_function.patch b/SOURCES/make-3.82-warn_undefined_function.patch new file mode 100644 index 0000000..d4fd502 --- /dev/null +++ b/SOURCES/make-3.82-warn_undefined_function.patch @@ -0,0 +1,84 @@ +diff --git a/make-3.82-gbuild/function.c b/make-3.82-gbuild/function.c +index e2f6c8c..ff0527f 100644 +--- a/make-3.82/function.c ++++ b/make-3.82/function.c +@@ -2333,8 +2333,10 @@ func_call (char *o, char **argv, const char *funcname UNUSED) + v = lookup_variable (fname, flen); + + if (v == 0) +- warn_undefined (fname, flen); +- ++ { ++ warn_undefined (fname, flen); ++ warn_undefined_function (fname, flen); ++ } + if (v == 0 || *v->value == '\0') + return o; + +diff --git a/make-3.82-gbuild/main.c b/make-3.82-gbuild/main.c +index c6989e3..2f545a7 100644 +--- a/make-3.82/main.c ++++ b/make-3.82/main.c +@@ -275,6 +275,11 @@ static int print_usage_flag = 0; + + int warn_undefined_variables_flag; + ++/* If nonzero, we should print a warning message ++ for each attemtp to call an undefined user function. */ ++ ++int warn_undefined_functions_flag; ++ + /* If nonzero, always build all targets, regardless of whether + they appear out of date or not. */ + +@@ -368,6 +373,8 @@ static const char *const usage[] = + Consider FILE to be infinitely new.\n"), + N_("\ + --warn-undefined-variables Warn when an undefined variable is referenced.\n"), ++ N_("\ ++ --warn-undefined-functions Warn when an undefined user function is called.\n"), + NULL + }; + +@@ -424,6 +431,8 @@ static const struct command_switch switches[] = + { CHAR_MAX+5, flag, &warn_undefined_variables_flag, 1, 1, 0, 0, 0, + "warn-undefined-variables" }, + { CHAR_MAX+6, string, &eval_strings, 1, 0, 0, 0, 0, "eval" }, ++ { CHAR_MAX+7, flag, &warn_undefined_functions_flag, 1, 1, 0, 0, 0, ++ "warn-undefined-functions" }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0 } + }; + +diff --git a/make-3.82-gbuild/make.h b/make-3.82-gbuild/make.h +index 60ade4c..f2ebb56 100644 +--- a/make-3.82/make.h ++++ b/make-3.82/make.h +@@ -513,7 +513,7 @@ extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag; + extern int print_version_flag, print_directory_flag, check_symlink_flag; + extern int warn_undefined_variables_flag, posix_pedantic, not_parallel; + extern int second_expansion, clock_skew_detected, rebuilding_makefiles; +-extern int one_shell; ++extern int one_shell, warn_undefined_functions_flag; + + /* can we run commands via 'sh -c xxx' or must we use batch files? */ + extern int batch_mode_shell; +diff --git a/make-3.82-gbuild/variable.h b/make-3.82-gbuild/variable.h +index c215867..02713c1 100644 +--- a/make-3.82/variable.h ++++ b/make-3.82/variable.h +@@ -220,6 +220,13 @@ void undefine_variable_in_set (const char *name, unsigned int length, + (int)(l), (n)); \ + }while(0) + ++#define warn_undefined_function(n,l) do{\ ++ if (warn_undefined_functions_flag) \ ++ error (reading_file, \ ++ _("warning: undefined function `%.*s'"), \ ++ (int)(l), (n)); \ ++ }while(0) ++ + char **target_environment (struct file *file); + + struct pattern_var *create_pattern_var (const char *target, +-- +cgit v0.9.0.2-2-gbebe diff --git a/SOURCES/make-3.82-weird-shell.patch b/SOURCES/make-3.82-weird-shell.patch new file mode 100644 index 0000000..dfdaf89 --- /dev/null +++ b/SOURCES/make-3.82-weird-shell.patch @@ -0,0 +1,16 @@ +diff -up make-3.82/job.c\~ make-3.82/job.c +--- make-3.82/job.c~ 2010-08-11 16:13:33.000000000 +0200 ++++ make-3.82/job.c 2010-08-12 14:20:08.000000000 +0200 +@@ -2442,7 +2442,11 @@ construct_command_argv_internal (char *l + + /* See if it is safe to parse commands internally. */ + if (shell == 0) +- shell = default_shell; ++ { ++ shell = default_shell; ++ if (shellflags == 0) ++ shellflags = "-c"; ++ } + #ifdef WINDOWS32 + else if (strcmp (shell, default_shell)) + { diff --git a/SPECS/make.spec b/SPECS/make.spec new file mode 100644 index 0000000..3915f95 --- /dev/null +++ b/SPECS/make.spec @@ -0,0 +1,455 @@ +# -*- coding: utf-8 -*- +Summary: A GNU tool which simplifies the build process for users +Name: make +Epoch: 1 +Version: 3.82 +Release: 19%{?dist} +License: GPLv2+ +Group: Development/Tools +URL: http://www.gnu.org/software/make/ +Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2 + +Patch1: make-3.82-noclock_gettime.patch +Patch2: make-3.82-j8k.patch +Patch3: make-3.82-getcwd.patch +Patch4: make-3.82-err-reporting.patch + +# Upstream: https://savannah.gnu.org/bugs/?30748 +Patch6: make-3.82-weird-shell.patch + +Patch7: make-3.82-newlines.patch +Patch8: make-3.82-jobserver.patch + +# Upstream: https://savannah.gnu.org/bugs/?30612 +# Upstream: https://savannah.gnu.org/bugs/?30723 +Patch9: make-3.82-bugfixes.patch + +Patch10: make-3.82-sort-blank.patch +Patch11: make-3.82-copy-on-expand.patch + +# Upstream: https://savannah.gnu.org/bugs/?33873 +Patch12: make-3.82-parallel-remake.patch + +# http://savannah.gnu.org/bugs/?34335 +Patch13: make-3.82-warn_undefined_function.patch + +# http://lists.gnu.org/archive/html/bug-make/2011-06/msg00032.html +Patch14: make-3.82-trace.patch + +# http://lists.gnu.org/archive/html/bug-make/2011-04/msg00002.html +Patch15: make-3.82-expensive_glob.patch + +# Upstream: https://savannah.gnu.org/bugs/?30653 +Patch16: make-3.82-dont-prune-intermediate.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=926115 +Patch17: make-3.82-aarch64.patch + +# Additional fix for https://savannah.gnu.org/bugs/?30612 +Patch18: make-3.82-empty-members.patch + +# Can't use a stem and a glob in the same dependency. +# https://savannah.gnu.org/bugs/?39310 +# https://bugzilla.redhat.com/show_bug.cgi?id=987672 +Patch19: make-3.82-stem_glob.patch + +# Stack limit not restored for processes spawned through $(shell) +# https://savannah.gnu.org/bugs/index.php?39851 +Patch20: make-3.82-func_shell-rlimit.patch + +# This to make the test targets/SECONDARY deterministic. The above +# patch causes this to occasionally fail. +Patch21: make-3.82-tests-SECONDARY.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info +BuildRequires: procps + +%description +A GNU tool for controlling the generation of executables and other +non-source files of a program from the program's source files. Make +allows users to build and install packages without any significant +knowledge about the details of the build process. The details about +how the program should be built are provided for make in the program's +makefile. + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p0 +%patch13 -p2 +%patch14 -p1 +%patch15 -p0 +%patch16 -p0 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 + +rm -f tests/scripts/features/parallelism.orig + +%build +%configure +make %{?_smp_mflags} + +%install +rm -rf ${RPM_BUILD_ROOT} +make DESTDIR=$RPM_BUILD_ROOT install +ln -sf make ${RPM_BUILD_ROOT}/%{_bindir}/gmake +ln -sf make.1 ${RPM_BUILD_ROOT}/%{_mandir}/man1/gmake.1 +rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir + +%find_lang %name + +%check +echo ============TESTING=============== +/usr/bin/env LANG=C make check +echo ============END TESTING=========== + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +if [ -f %{_infodir}/make.info.gz ]; then # for --excludedocs + /sbin/install-info %{_infodir}/make.info.gz %{_infodir}/dir --entry="* Make: (make). The GNU make utility." || : +fi + +%preun +if [ $1 = 0 ]; then + if [ -f %{_infodir}/make.info.gz ]; then # for --excludedocs + /sbin/install-info --delete %{_infodir}/make.info.gz %{_infodir}/dir --entry="* Make: (make). The GNU make utility." || : + fi +fi + +%files -f %{name}.lang +%defattr(-,root,root) +%doc NEWS README COPYING AUTHORS +%{_bindir}/* +%{_mandir}/man*/* +%{_infodir}/*.info* + +%changelog +* Thu Aug 22 2013 Petr Machata - 1:3.82-19 +- make now restores rlimit to its original values before launching + subprocess via $(shell) (make-3.82-func_shell-rlimit.patch) +- Determinize one test (make-3.82-tests-SECONDARY.patch) + +* Fri Jul 26 2013 Petr Machata - 1:3.82-18 +- Backport upstream patch that adds wildcard expansion to pattern + rules. (make-3.82-stem_glob.patch) + +* Wed Jun 19 2013 Petr Machata - 1:3.82-17 +- Add another fix for upstream bug 30612 + +* Thu Apr 4 2013 Petr Machata - 1:3.82-16 +- Update config.sub and config.guess to support aarch64 + +* Thu Feb 14 2013 Fedora Release Engineering - 1:3.82-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Nov 29 2012 Petr Machata - 1:3.82-14 +- Drop patch5, which hasn't been applied for years + +* Mon Sep 10 2012 Petr Machata - 1:3.82-13 +- Add fix for upstream bug 30653 +- Resolves: #835424 + +* Fri Jul 27 2012 Fedora Release Engineering - 1:3.82-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Mar 13 2012 Petr Machata - 1:3.82-11 +- Add a patch for avoiding glob if possible by Michael Meeks + +* Mon Mar 12 2012 Petr Machata - 1:3.82-10 +- Apply the following patches, proposed upstream by Norbert Thiebaud: + - A patch for warning on call of undefined function + - A patch for tracing calls to "eval" and "call" + +* Fri Jan 13 2012 Fedora Release Engineering - 1:3.82-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Nov 3 2011 Petr Machata - 1:3.82-8 +- Add a patch for preserving -j across Makefile rebuild +- Resolves: #698702 + +* Wed Oct 26 2011 Fedora Release Engineering - 1:3.82-7 +- Rebuilt for glibc bug#747377 + +* Tue May 12 2011 Lubomir Rintel - 1:3.82-6 +- Fix free-after-use with nested assignments (#703104) + +* Tue Feb 08 2011 Fedora Release Engineering - 1:3.82-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Oct 27 2010 Petr Machata - 1:3.82-4 +- Fix a discrepancy between behavior of find_next_token and + pre-allocation of token memory in func_sort. +- Resolves: #643359 + +* Wed Sep 29 2010 jkeating - 1:3.82-3 +- Rebuilt for gcc bug 634757 + +* Mon Sep 13 2010 Petr Machata - 1:3.82-2 +- Add upstream fixes for upstream bugs 30612 and 30723 +- Resolves: #631552 + +* Wed Aug 11 2010 Petr Machata - 1:3.82-1 +- Upstream 3.82: + - Drop rlimit, fdleak, strcpy-overlap, recursion-test, double-free + patches, make supports this functionality now + - Disable the memory patch for the time being + - Port remaining patches + - Add weird-shell patch, upstream bug 30748 +- Resolves: #618998 + +* Wed Aug 11 2010 Petr Machata - 1:3.81-21 +- Add BR procps +- Resolves: #616813 + +* Thu Jul 1 2010 Petr Machata - 1:3.81-20 +- Add a patch by Steve Kemp @debian that might fix the double free + problem. +- Related: #609806 + +* Fri Jun 4 2010 Petr Machata - 1:3.81-19 +- Fix testsuite on F13 +- Resolves: #600004 + +* Tue Aug 11 2009 Petr Machata - 1:3.81-18 +- Fix installation with --excludedocs +- Resolves: #515917 + +* Fri Jul 31 2009 Petr Machata - 1:3.81-17 +- Replace the use of strcpy on overlapping areas with memmove +- Resolves: #514721 + +* Sat Jul 25 2009 Fedora Release Engineering - 1:3.81-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Feb 25 2009 Fedora Release Engineering - 1:3.81-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Sep 22 2008 Petr Machata - 1:3.81-14 +- Fix patches to apply cleanly with fuzz=0 + +* Tue Sep 16 2008 Petr Machata - 1:3.81-13 +- Mark opened files as cloexec to prevent their leaking through fork +- Resolves: #462090 + +* Tue Mar 25 2008 Petr Machata - 1:3.81-12 +- Fix the rlimit patch. The success flag is kept in memory shared + with parent process after vfork, and so cannot be reset. +- Related: #214033 + +* Tue Feb 19 2008 Fedora Release Engineering - 1:3.81-11 +- Autorebuild for GCC 4.3 + +* Thu Oct 4 2007 Petr Machata - 1:3.81-10 +- Fix parallel builds with reexec. +- Related: #212111, #211290 + +* Thu Oct 4 2007 Petr Machata - 1:3.81-8 +- Cleaned up per merge review. +- Related: #226120 + +* Thu Aug 16 2007 Petr Machata - 1:3.81-7 +- Fix licensing tag. + +* Fri Mar 16 2007 Petr Machata - 1:3.81-6 +- Always run testsuite with C locale. +- Resolves: #232607 + +* Thu Feb 22 2007 Petr Machata - 1:3.81-5 +- Fix newline handling for quoted SHELL. +- Resolves: #219409 + +* Fri Feb 2 2007 Petr Machata - 1:3.81-4 +- Tidy up the specfile per rpmlint comments +- Use utf-8 and fix national characters in contributor's names + +* Thu Jan 25 2007 Petr Machata - 1:3.81-3 +- Ville Skyttä: patch for non-failing %%post, %%preun +- Resolves: #223709 + +* Thu Jan 25 2007 Petr Machata - 1:3.81-2 +- make now restores rlimit to its original values before launching + subprocess (#214033) + +* Wed Jul 12 2006 Jesse Keating - 1:3.81-1.1 +- rebuild + +* Tue May 23 2006 Petr Machata - 1:3.81-1 +- Upstream 3.81: + - Contains several backwards incompatible changes. See NEWS inside + the source package to find out more. +- memory patch and error reporting patch were ported to this version. + +* Wed Mar 15 2006 Petr Machata 1:3.80-11 +- Applied (five years old) patch from Jonathan Kamens to allow make to + handle several pattern-specific variables (#52962). + + The patch was changed so that it forces make to process pattern + specific variables in the same order as they appear in file. + (Upstream make behaves this way, too.) This is change from old make + behavior, which processed the variables in reverse order. In case + you used only x=a assignments, this had the effect of using the + first pattern specific variable that matched. For x+=a this just + doesn't work, and it produces absolutely nonintuitive results. + +- (It would be great if make's target-specific variables were handled + the same way as pattern-specific ones, just without the pattern + component. However current handling is documented and considered a + feature.) + +* Fri Feb 10 2006 Jesse Keating - 1:3.80-10.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1:3.80-10.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Feb 02 2006 Petr Machata 3.80-10 +- H.J. Lu caught a typo in the patch and provided a new one. (#175376) + +* Mon Jan 09 2006 Petr Machata 3.80-9 +- Applied patch from H.J. Lu. Somehow reduces make's enormous memory + consumption. (#175376) + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Mon Aug 22 2005 Jakub Jelinek 3.80-8 +- make sure errno for error reporting is not lost accross _() calls +- report EOF on read pipe differently from read returning < 0 reporting + +* Mon Mar 7 2005 Jakub Jelinek 3.80-7 +- rebuilt with GCC 4 + +* Mon Dec 13 2004 Jakub Jelinek 3.80-6 +- refuse -jN where N is bigger than PIPE_BUF (#142691, #17374) + +* Thu Oct 7 2004 Jakub Jelinek 3.80-5 +- add URL rpm tag (#134799) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Dec 02 2003 Florian La Roche +- add important bug-fixes from make home-page + +* Sun Nov 30 2003 Florian La Roche +- update to 3.80 + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Sun Dec 29 2002 Tim Powers +- fix references to %%install in the changelog so that the package will build + +* Tue Dec 03 2002 Elliot Lee 3.79.1-15 +- _smp_mflags +- Fix ppc build (sys_siglist issues in patch2) + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Jakub Jelinek +- Run make check during build + +* Thu May 23 2002 Bernhard Rosenkraenzer +- Fix build with current auto* tools + +* Fri Jan 25 2002 Jakub Jelinek +- rebuilt with gcc 3.1 + +* Fri Jul 6 2001 Trond Eivind Glomsrød +- s/Copyright/License/ +- langify +- Make sure it isn't setgid if built as root + +* Sun Jun 24 2001 Elliot Lee +- Bump release + rebuild. + +* Mon Aug 7 2000 Tim Waugh +- change info-dir entry so that 'info make' works (#15029). + +* Tue Aug 1 2000 Jakub Jelinek +- assume we don't have clock_gettime in configure, so that + make is not linked against -lpthread (and thus does not + limit stack to 2MB). + +* Sat Jul 22 2000 Jeff Johnson +- add locale files (#14362). + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Sat Jun 24 2000 Preston Brown +- 3.79.1 bugfix release + +* Mon Jun 5 2000 Jeff Johnson +- FHS packaging. + +* Sun May 7 2000 Bernhard Rosenkraenzer +- Fix build for some odd situations, such as + - previously installed make != GNU make + - /bin/sh != bash + +* Mon Apr 17 2000 Florian La Roche +- update to 3.79 + +* Thu Feb 24 2000 Cristian Gafton +- add patch from Andreas Jaeger to fix dtype lookups (for glibc 2.1.3 + builds) + +* Mon Feb 7 2000 Jeff Johnson +- compress man page. + +* Fri Jan 21 2000 Cristian Gafton +- apply patch to fix a /tmp race condition from Thomas Biege +- simplify %%install + +* Sat Nov 27 1999 Jeff Johnson +- update to 3.78.1. + +* Thu Apr 15 1999 Bill Nottingham +- added a serial tag so it upgrades right + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 5) + +* Wed Sep 16 1998 Cristian Gafton +- added a patch for large file support in glob + +* Tue Aug 18 1998 Jeff Johnson +- update to 3.77 + +* Mon Apr 27 1998 Prospector System +- translations modified for de, fr, tr + +* Thu Oct 16 1997 Donnie Barnes +- udpated from 3.75 to 3.76 +- various spec file cleanups +- added install-info support + +* Mon Jun 02 1997 Erik Troan +- built against glibc