parent
7cf149fc79
commit
7b4e48e3b0
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ make-3.81.tar.bz2
|
||||
/make-*/
|
||||
make-3.82.tar.bz2
|
||||
*.rpm
|
||||
/make-4.0.tar.bz2
|
||||
|
@ -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~
|
@ -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-* \
|
@ -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;
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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;
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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);
|
@ -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~
|
@ -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;
|
@ -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
|
||||
|
@ -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;
|
@ -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
|
156
make-4.0-err-reporting.patch
Normal file
156
make-4.0-err-reporting.patch
Normal 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
12
make-4.0-getcwd.patch
Normal 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
|
@ -1,9 +1,9 @@
|
||||
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
|
||||
}
|
||||
diff -Nrup a/main.c b/main.c
|
||||
--- a/main.c 2013-10-09 00:22:40.000000000 -0400
|
||||
+++ b/main.c 2014-02-03 17:18:04.238609236 -0500
|
||||
@@ -1987,6 +1987,20 @@ main (int argc, char **argv, char **envp
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef PIPE_BUF
|
||||
+ if (job_slots > PIPE_BUF)
|
||||
@ -14,13 +14,11 @@ diff -up make-3.82/main.c\~ make-3.82/main.c
|
||||
+#endif
|
||||
+ {
|
||||
+ 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."));
|
||||
+ job_slots = 1;
|
||||
+ }
|
||||
+
|
||||
#ifdef MAKE_JOBSERVER
|
||||
/* 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
|
19
make-4.0-newlines.patch
Normal file
19
make-4.0-newlines.patch
Normal 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;
|
94
make.spec
94
make.spec
@ -2,64 +2,22 @@
|
||||
Summary: A GNU tool which simplifies the build process for users
|
||||
Name: make
|
||||
Epoch: 1
|
||||
Version: 3.82
|
||||
Release: 19%{?dist}
|
||||
License: GPLv2+
|
||||
Version: 4.0
|
||||
Release: 1%{?dist}
|
||||
License: GPLv3+
|
||||
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
|
||||
Patch1: make-4.0-noclock_gettime.patch
|
||||
Patch2: make-4.0-j8k.patch
|
||||
Patch3: make-4.0-getcwd.patch
|
||||
Patch4: make-4.0-err-reporting.patch
|
||||
|
||||
# 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
|
||||
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
|
||||
Patch7: make-4.0-newlines.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
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
|
||||
makefile.
|
||||
|
||||
%package devel
|
||||
Summary: Header file for externally visible definitions
|
||||
Group: Development/Libraries
|
||||
|
||||
%description devel
|
||||
The make-devel package contains gnumake.h.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
@ -82,20 +47,6 @@ makefile.
|
||||
%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
|
||||
|
||||
@ -138,8 +89,17 @@ fi
|
||||
%{_bindir}/*
|
||||
%{_mandir}/man*/*
|
||||
%{_infodir}/*.info*
|
||||
%{_includedir}/gnumake.h
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%{_includedir}/gnumake.h
|
||||
|
||||
%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
|
||||
- make now restores rlimit to its original values before launching
|
||||
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
|
||||
- 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)
|
||||
|
||||
* 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
|
||||
- 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)
|
||||
|
||||
* Mon Jan 09 2006 Petr Machata <pmachata@redhat.com> 3.80-9
|
||||
|
Loading…
Reference in New Issue
Block a user