- Rebase to make-4.0
This commit is contained in:
Patsy Franklin 2014-04-30 22:35:14 -04:00
parent 7cf149fc79
commit 7b4e48e3b0
27 changed files with 223 additions and 1652 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ make-3.81.tar.bz2
/make-*/ /make-*/
make-3.82.tar.bz2 make-3.82.tar.bz2
*.rpm *.rpm
/make-4.0.tar.bz2

View File

@ -1,261 +0,0 @@
diff -Bburpd make-3.81_orig/file.c make-3.81/file.c
--- make-3.81_orig/file.c 2006-05-23 13:59:11.000000000 +0200
+++ make-3.81/file.c 2006-05-23 14:39:34.000000000 +0200
@@ -490,7 +490,7 @@ expand_deps (struct file *f)
o = subst_expand (buffer, d->name, "%", "$*", 1, 2, 0);
- free (d->name);
+ hash_strfree (d->name);
d->name = savestring (buffer, o - buffer);
d->staticpattern = 0; /* Clear staticpattern so that we don't
re-expand %s below. */
@@ -549,7 +549,7 @@ expand_deps (struct file *f)
dp->name[0] = '\0';
else
{
- free (dp->name);
+ hash_strfree (dp->name);
dp->name = savestring (buffer, o - buffer);
}
}
@@ -580,7 +580,7 @@ expand_deps (struct file *f)
if (d1->file == 0)
d1->file = enter_file (d1->name);
else
- free (d1->name);
+ hash_strfree (d1->name);
d1->name = 0;
d1->staticpattern = 0;
d1->need_2nd_expansion = 0;
Only in make-3.81: file.c~
diff -Bburpd make-3.81_orig/implicit.c make-3.81/implicit.c
--- make-3.81_orig/implicit.c 2006-05-23 13:59:11.000000000 +0200
+++ make-3.81/implicit.c 2006-05-23 14:40:01.000000000 +0200
@@ -864,7 +864,7 @@ pattern_search (struct file *file, int a
dep->file = enter_file (dep->name);
/* enter_file uses dep->name _if_ we created a new file. */
if (dep->name != dep->file->name)
- free (dep->name);
+ hash_strfree (dep->name);
dep->name = 0;
dep->file->tried_implicit |= dep->changed;
}
Only in make-3.81: implicit.c~
diff -Bburpd make-3.81_orig/main.c make-3.81/main.c
--- make-3.81_orig/main.c 2006-05-23 13:59:11.000000000 +0200
+++ make-3.81/main.c 2006-05-23 14:40:49.000000000 +0200
@@ -540,6 +540,7 @@ initialize_global_hash_tables (void)
init_hash_files ();
hash_init_directories ();
hash_init_function_table ();
+ init_hash_strings ();
}
static struct file *
Only in make-3.81: main.c~
diff -Bburpd make-3.81_orig/make.h make-3.81/make.h
--- make-3.81_orig/make.h 2006-05-23 13:59:11.000000000 +0200
+++ make-3.81/make.h 2006-05-23 14:41:21.000000000 +0200
@@ -431,6 +431,11 @@ extern void print_spaces PARAMS ((unsign
extern char *find_percent PARAMS ((char *));
extern FILE *open_tmpfile PARAMS ((char **, const char *));
+extern void init_hash_strings PARAMS ((void));
+extern char *hash_strdup PARAMS ((const char *));
+extern char *hash_savestring PARAMS ((const char *, unsigned int));
+extern void hash_strfree PARAMS ((char *));
+
#ifndef NO_ARCHIVES
extern int ar_name PARAMS ((char *));
extern void ar_parse_name PARAMS ((char *, char **, char **));
Only in make-3.81: make.h~
diff -Bburpd make-3.81_orig/misc.c make-3.81/misc.c
--- make-3.81_orig/misc.c 2006-05-23 13:59:11.000000000 +0200
+++ make-3.81/misc.c 2006-05-23 14:42:59.000000000 +0200
@@ -16,8 +16,10 @@ You should have received a copy of the G
GNU Make; see the file COPYING. If not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */
+#include <assert.h>
#include "make.h"
#include "dep.h"
+#include "hash.h"
#include "debug.h"
/* Variadic functions. We go through contortions to allow proper function
@@ -511,7 +513,7 @@ void
free_dep (struct dep *d)
{
if (d->name != 0)
- free (d->name);
+ hash_strfree (d->name);
if (d->stem != 0)
free (d->stem);
@@ -535,7 +537,7 @@ copy_dep_chain (const struct dep *d)
bcopy ((char *) d, (char *) c, sizeof (struct dep));
if (c->name != 0)
- c->name = xstrdup (c->name);
+ c->name = hash_strdup (c->name);
if (c->stem != 0)
c->stem = xstrdup (c->stem);
@@ -909,3 +911,154 @@ close_stdout (void)
exit (EXIT_FAILURE);
}
}
+
+/* Hash table of duplicated strings. */
+
+struct hash_string
+{
+ char *string;
+ unsigned int count;
+};
+
+static unsigned long
+string_hash_1 (key)
+ const void *key;
+{
+ return_ISTRING_HASH_1 (((const struct hash_string *) key)->string);
+}
+
+static unsigned long
+string_hash_2 (key)
+ const void *key;
+{
+ return_ISTRING_HASH_2 (((const struct hash_string *) key)->string);
+}
+
+static int
+string_hash_cmp (x, y)
+ const void *x;
+ const void *y;
+{
+ return_ISTRING_COMPARE (((const struct hash_string *) x)->string,
+ ((const struct hash_string *) y)->string);
+}
+
+static struct hash_table strings;
+
+void
+init_hash_strings ()
+{
+ hash_init (&strings, 1000, string_hash_1, string_hash_2,
+ string_hash_cmp);
+}
+
+/* Keep track duplicated string and return the old one if exists. */
+
+char *
+hash_strdup (ptr)
+ const char *ptr;
+{
+ struct hash_string *h, key;
+
+ if (*ptr == '\0')
+ return "";
+
+ key.string = (char *) ptr;
+ key.count = 0;
+ h = (struct hash_string *) hash_find_item (&strings, &key);
+ if (h == NULL)
+ {
+ char *result = (char *) malloc (strlen (ptr) + 1);
+
+ if (result == NULL)
+ fatal (NILF, _("virtual memory exhausted"));
+
+ strcpy (result, ptr);
+
+ h = (struct hash_string *) malloc (sizeof (struct hash_string));
+ if (h == NULL)
+ fatal (NILF, _("virtual memory exhausted"));
+
+ h->string = result;
+ h->count = 1;
+ hash_insert (&strings, h);
+ }
+ else
+ {
+ h->count++;
+ assert (h->count != 0);
+ }
+
+ return h->string;
+}
+
+char *
+hash_savestring (str, length)
+ const char *str;
+ unsigned int length;
+{
+ struct hash_string *h, key;
+
+ if (length == 0 || *str == '\0')
+ return "";
+
+ key.string = alloca (length + 1);
+ key.count = 0;
+ bcopy (str, key.string, length);
+ key.string [length] = '\0';
+
+ h = (struct hash_string *) hash_find_item (&strings, &key);
+ if (h == NULL)
+ {
+ char *out = (char *) xmalloc (length + 1);
+ bcopy (str, out, length);
+ out[length] = '\0';
+
+ h = (struct hash_string *) malloc (sizeof (struct hash_string));
+ if (h == NULL)
+ fatal (NILF, _("virtual memory exhausted"));
+
+ h->string = out;
+ h->count = 1;
+ hash_insert (&strings, h);
+ }
+ else
+ {
+ h->count++;
+ assert (h->count != 0);
+ }
+
+ return h->string;
+}
+
+void
+hash_strfree (ptr)
+ char *ptr;
+{
+ struct hash_string *h, key;
+
+ if (*ptr == '\0')
+ return;
+
+ key.string = ptr;
+ key.count = 0;
+ h = (struct hash_string *) hash_find_item (&strings, &key);
+
+ /* Check if string comes from hash_strdup or hash_savestring. */
+ if (h == NULL || h->string != ptr)
+ {
+ free (ptr);
+ return;
+ }
+
+ h->count--;
+ if (h->count == 0)
+ {
+ struct hash_string *d;
+
+ d = hash_delete (&strings, h);
+ assert (d == h);
+ free (h->string);
+ free (h);
+ }
+}
Only in make-3.81: misc.c~
Only in make-3.81: read.c~

View File

@ -1,36 +0,0 @@
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-* \

View File

@ -1,250 +0,0 @@
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 <psmith@gnu.org>
+
+ * 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 <psmith@gnu.org>
+
+ * main.c (main): Expand MAKEFLAGS before adding it to the
+ environment when re-exec'ing. Fixes Savannah bug #30723.
+
2010-07-28 Paul Smith <psmith@gnu.org>
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 <psmith@gnu.org>
+
+ * 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 <psmith@gnu.org>
+
+ * scripts/features/reinvoke: Ensure command line variable settings
+ are preserved across make re-exec. Tests Savannah bug #30723.
+
2010-07-28 Paul Smith <psmith@gnu.org>
* 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 <http://www.gnu.org/licenses/>.
+%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;

View File

@ -1,77 +0,0 @@
From 2f661dc20617ba6fdeb2d7e243dc898653faafea Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <lkundrak@v3.sk>
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 <lkundrak@v3.sk>
+
+ * expand.c (variable_expand_string): Always copy the string
+ to expand.
+
2010-08-13 Paul Smith <psmith@gnu.org>
* 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

View File

@ -1,57 +0,0 @@
2012-09-09 Paul Smith <psmith@gnu.org>
* 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

View File

@ -1,52 +0,0 @@
From b06b8c64a29a5ba3a8daecd829fa2f98d42cb285 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
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

View File

@ -1,157 +0,0 @@
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

View File

@ -1,116 +0,0 @@
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;

View File

@ -1,35 +0,0 @@
From 552207b506f4d98a6a5f73053aa6bd924758708f Mon Sep 17 00:00:00 2001
From: Petr Machata <pmachata@redhat.com>
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

View File

@ -1,14 +0,0 @@
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

View File

@ -1,19 +0,0 @@
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

View File

@ -1,30 +0,0 @@
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

View File

@ -1,30 +0,0 @@
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);

View File

@ -1,22 +0,0 @@
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~

View File

@ -1,194 +0,0 @@
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;

View File

@ -1,30 +0,0 @@
From 3057357c0a5c2507eef2b61eef9ebfb569b30230 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
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

View File

@ -1,111 +0,0 @@
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;

View File

@ -1,84 +0,0 @@
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

View File

@ -0,0 +1,156 @@
diff -Nrup a/job.c b/job.c
--- a/job.c 2013-10-05 19:12:24.000000000 -0400
+++ b/job.c 2014-02-03 18:15:48.681085207 -0500
@@ -1020,7 +1020,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));
@@ -1956,6 +1956,7 @@ new_job (struct file *file)
#else
/* 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);
@@ -1972,10 +1973,14 @@ new_job (struct file *file)
#ifndef WINDOWS32
/* 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
}
@@ -2117,7 +2122,9 @@ 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;
diff -Nrup a/main.c b/main.c
--- a/main.c 2014-02-03 17:49:03.255939340 -0500
+++ b/main.c 2014-02-03 18:06:25.768024183 -0500
@@ -1580,7 +1580,7 @@ main (int argc, char **argv, char **envp
|| (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."));
@@ -1787,13 +1787,13 @@ main (int argc, char **argv, char **envp
strcat (template, DEFAULT_TMPFILE);
outfile = output_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);
@@ -2030,7 +2030,8 @@ 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);
+
#endif
/* Every make assumes that it always has one job it can run. For the
@@ -2050,7 +2051,8 @@ 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);
+
}
#endif
@@ -2474,7 +2476,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)
diff -Nrup a/makeint.h b/makeint.h
--- a/makeint.h 2014-02-03 17:49:03.265939424 -0500
+++ b/makeint.h 2014-02-03 18:09:31.738695318 -0500
@@ -436,6 +436,8 @@ void fatal (const gmk_floc *flocp, const
void die (int) __attribute__ ((noreturn));
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);
#define xstrlen(_s) ((_s)==NULL ? 0 : strlen (_s))
void *xmalloc (unsigned int);
void *xcalloc (unsigned int);
diff -Nrup a/output.c b/output.c
--- a/output.c 2013-10-05 19:12:24.000000000 -0400
+++ b/output.c 2014-02-03 18:22:48.617908701 -0500
@@ -746,17 +746,31 @@ fatal (const gmk_floc *flocp, const char
/* 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 */
}

12
make-4.0-getcwd.patch Normal file
View File

@ -0,0 +1,12 @@
diff -Nrup a/makeint.h b/makeint.h
--- a/makeint.h 2013-10-09 00:22:40.000000000 -0400
+++ b/makeint.h 2014-02-03 17:46:24.969618708 -0500
@@ -528,7 +528,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

View File

@ -1,9 +1,9 @@
diff -up make-3.82/main.c\~ make-3.82/main.c diff -Nrup a/main.c b/main.c
--- make-3.82/main.c~ 2010-07-19 09:10:53.000000000 +0200 --- a/main.c 2013-10-09 00:22:40.000000000 -0400
+++ make-3.82/main.c 2010-08-11 15:12:09.000000000 +0200 +++ b/main.c 2014-02-03 17:18:04.238609236 -0500
@@ -1765,6 +1765,20 @@ main (int argc, char **argv, char **envp @@ -1987,6 +1987,20 @@ main (int argc, char **argv, char **envp
}
} }
#endif
+#ifdef PIPE_BUF +#ifdef PIPE_BUF
+ if (job_slots > PIPE_BUF) + if (job_slots > PIPE_BUF)
@ -14,13 +14,11 @@ diff -up make-3.82/main.c\~ make-3.82/main.c
+#endif +#endif
+ { + {
+ error (NILF, + error (NILF,
+ _("More parallel jobs (-jN) than this platform can handle requested.")); + _("More parallel jobs (-jN) than this platform can handle requested."));
+ error (NILF, _("Resetting to single job (-j1) mode.")); + error (NILF, _("Resetting to single job (-j1) mode."));
+ job_slots = 1; + job_slots = 1;
+ } + }
+ +
#ifdef MAKE_JOBSERVER
/* If we have >1 slot but no jobserver-fds, then we're a top-level make. /* 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. */ Set up the pipe and install the fds option for our children. */
Diff finished. Wed Aug 11 15:12:32 2010

19
make-4.0-newlines.patch Normal file
View File

@ -0,0 +1,19 @@
diff -Nrup a/job.c b/job.c
--- a/job.c 2014-02-03 18:23:45.936436714 -0500
+++ b/job.c 2014-02-04 00:17:53.232074893 -0500
@@ -3269,13 +3269,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;

View File

@ -2,64 +2,22 @@
Summary: A GNU tool which simplifies the build process for users Summary: A GNU tool which simplifies the build process for users
Name: make Name: make
Epoch: 1 Epoch: 1
Version: 3.82 Version: 4.0
Release: 19%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv3+
Group: Development/Tools Group: Development/Tools
URL: http://www.gnu.org/software/make/ URL: http://www.gnu.org/software/make/
Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2 Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2
Patch1: make-3.82-noclock_gettime.patch Patch1: make-4.0-noclock_gettime.patch
Patch2: make-3.82-j8k.patch Patch2: make-4.0-j8k.patch
Patch3: make-3.82-getcwd.patch Patch3: make-4.0-getcwd.patch
Patch4: make-3.82-err-reporting.patch Patch4: make-4.0-err-reporting.patch
# Upstream: https://savannah.gnu.org/bugs/?30748 # Upstream: https://savannah.gnu.org/bugs/?30748
Patch6: make-3.82-weird-shell.patch Patch6: make-4.0-weird-shell.patch
Patch7: make-3.82-newlines.patch Patch7: make-4.0-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) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires(post): /sbin/install-info Requires(post): /sbin/install-info
@ -74,6 +32,13 @@ 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 how the program should be built are provided for make in the program's
makefile. makefile.
%package devel
Summary: Header file for externally visible definitions
Group: Development/Libraries
%description devel
The make-devel package contains gnumake.h.
%prep %prep
%setup -q %setup -q
%patch1 -p1 %patch1 -p1
@ -82,20 +47,6 @@ makefile.
%patch4 -p1 %patch4 -p1
%patch6 -p1 %patch6 -p1
%patch7 -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 rm -f tests/scripts/features/parallelism.orig
@ -138,8 +89,17 @@ fi
%{_bindir}/* %{_bindir}/*
%{_mandir}/man*/* %{_mandir}/man*/*
%{_infodir}/*.info* %{_infodir}/*.info*
%{_includedir}/gnumake.h
%files devel
%defattr(-,root,root)
%{_includedir}/gnumake.h
%changelog %changelog
* Wed Apr 30 2014 Patsy Franklin <pfrankli@redhat.com> 1:4.0-1
- Rebase to make-4.0
- Created make-devel sub-package to handle new dependency on gnumake.h.
* Thu Aug 22 2013 Petr Machata <pmachata@redhat.com> - 1:3.82-19 * Thu Aug 22 2013 Petr Machata <pmachata@redhat.com> - 1:3.82-19
- make now restores rlimit to its original values before launching - make now restores rlimit to its original values before launching
subprocess via $(shell) (make-3.82-func_shell-rlimit.patch) subprocess via $(shell) (make-3.82-func_shell-rlimit.patch)
@ -186,7 +146,7 @@ fi
* Wed Oct 26 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:3.82-7 * Wed Oct 26 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:3.82-7
- Rebuilt for glibc bug#747377 - Rebuilt for glibc bug#747377
* Tue May 12 2011 Lubomir Rintel <lkundrak@v3.sk> - 1:3.82-6 * Thu May 12 2011 Lubomir Rintel <lkundrak@v3.sk> - 1:3.82-6
- Fix free-after-use with nested assignments (#703104) - Fix free-after-use with nested assignments (#703104)
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:3.82-5 * Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:3.82-5
@ -318,7 +278,7 @@ fi
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1:3.80-10.1 * Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1:3.80-10.1
- rebuilt for new gcc4.1 snapshot and glibc changes - rebuilt for new gcc4.1 snapshot and glibc changes
* Mon Feb 02 2006 Petr Machata <pmachata@redhat.com> 3.80-10 * Thu Feb 02 2006 Petr Machata <pmachata@redhat.com> 3.80-10
- H.J. Lu caught a typo in the patch and provided a new one. (#175376) - H.J. Lu caught a typo in the patch and provided a new one. (#175376)
* Mon Jan 09 2006 Petr Machata <pmachata@redhat.com> 3.80-9 * Mon Jan 09 2006 Petr Machata <pmachata@redhat.com> 3.80-9

View File

@ -1 +1 @@
1a11100f3c63fcf5753818e59d63088f make-3.82.tar.bz2 571d470a7647b455e3af3f92d79f1c18 make-4.0.tar.bz2