Christian Wiese
12 years ago
13 changed files with 1128 additions and 171 deletions
@ -1,41 +0,0 @@ |
|||||||
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
||||||
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
||||||
#
|
|
||||||
# Filename: package/.../make/0001-fix-memory-area-overlap.patch
|
|
||||||
# Copyright (C) 2010 The OpenSDE Project
|
|
||||||
#
|
|
||||||
# More information can be found in the files COPYING and README.
|
|
||||||
#
|
|
||||||
# This patch file is dual-licensed. It is available under the license the
|
|
||||||
# patched project is licensed under, as long as it is an OpenSource license
|
|
||||||
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
|
||||||
# of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
||||||
|
|
||||||
bug #27148: Use of strcpy on overlapping memory areas
|
|
||||||
http://savannah.gnu.org/bugs/?27148
|
|
||||||
http://cvs.savannah.gnu.org/viewvc/make/job.c?root=make&r1=1.194&r2=1.195
|
|
||||||
|
|
||||||
2009-08-01 Paul Smith <psmith@gnu.org>
|
|
||||||
* job.c (new_job): Use memmove() instead of strcpy() since both
|
|
||||||
pointers are in the same memory block. Fixes Savannah bug #27148.
|
|
||||||
Patch by Petr Machata.
|
|
||||||
|
|
||||||
diff --git a/job.c b/job.c
|
|
||||||
index a81cd81..3251efe 100644
|
|
||||||
--- a/job.c
|
|
||||||
+++ b/job.c
|
|
||||||
@@ -1594,7 +1594,7 @@ new_job (struct file *file)
|
|
||||||
/* There are no more references in this line to worry about.
|
|
||||||
Copy the remaining uninteresting text to the output. */
|
|
||||||
if (out != in)
|
|
||||||
- strcpy (out, in);
|
|
||||||
+ memmove (out, in, strlen (in) + 1);
|
|
||||||
|
|
||||||
/* Finally, expand the line. */
|
|
||||||
lines[i] = allocated_variable_expand_for_file (cmds->command_lines[i],
|
|
||||||
--
|
|
||||||
1.6.5.3
|
|
||||||
|
|
@ -1,127 +0,0 @@ |
|||||||
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
||||||
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
||||||
#
|
|
||||||
# Filename: package/.../make/0002-fix-stack-limit.patch
|
|
||||||
# Copyright (C) 2010 The OpenSDE Project
|
|
||||||
#
|
|
||||||
# More information can be found in the files COPYING and README.
|
|
||||||
#
|
|
||||||
# This patch file is dual-licensed. It is available under the license the
|
|
||||||
# patched project is licensed under, as long as it is an OpenSource license
|
|
||||||
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
|
||||||
# of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
||||||
|
|
||||||
bug #22010: The increased stack rlimit is inherited by the subprocesses to make.
|
|
||||||
http://savannah.gnu.org/bugs/?22010
|
|
||||||
http://cvs.savannah.gnu.org/viewvc/make/make.h?root=make&r1=1.132&r2=1.133&view=patch
|
|
||||||
http://cvs.savannah.gnu.org/viewvc/make/main.c?root=make&r1=1.228&r2=1.229&view=patch
|
|
||||||
http://cvs.savannah.gnu.org/viewvc/make/job.c?root=make&r1=1.191&r2=1.192&view=patch
|
|
||||||
|
|
||||||
2009-06-07 Paul Smith <psmith@gnu.org>
|
|
||||||
* make.h: Move SET_STACK_SIZE determination to make.h.
|
|
||||||
* main.c (main): New global variable, STACK_LIMIT, holds the
|
|
||||||
original stack limit when make was started.
|
|
||||||
* job.c (start_job_command): Reset the stack limit, if we changed it.
|
|
||||||
Fixes Savannah bug #22010.
|
|
||||||
|
|
||||||
diff --git a/job.c b/job.c
|
|
||||||
index 3251efe..7fe08fa 100644
|
|
||||||
--- a/job.c
|
|
||||||
+++ b/job.c
|
|
||||||
@@ -1275,6 +1275,12 @@ start_job_command (struct child *child)
|
|
||||||
if (job_rfd >= 0)
|
|
||||||
close (job_rfd);
|
|
||||||
|
|
||||||
+#ifdef SET_STACK_SIZE
|
|
||||||
+ /* Reset limits, if necessary. */
|
|
||||||
+ if (stack_limit.rlim_cur)
|
|
||||||
+ setrlimit (RLIMIT_STACK, &stack_limit);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
child_execute_job (child->good_stdin ? 0 : bad_stdin, 1,
|
|
||||||
argv, child->environment);
|
|
||||||
}
|
|
||||||
@@ -2237,7 +2243,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
|
||||||
"for", "case", "if", ":", ".", "break",
|
|
||||||
"continue", "export", "read", "readonly",
|
|
||||||
"shift", "times", "trap", "switch", "unset",
|
|
||||||
- 0 };
|
|
||||||
+ "ulimit", 0 };
|
|
||||||
|
|
||||||
char *sh_chars;
|
|
||||||
char **sh_cmds;
|
|
||||||
diff --git a/main.c b/main.c
|
|
||||||
index 483babf..42964e0 100644
|
|
||||||
--- a/main.c
|
|
||||||
+++ b/main.c
|
|
||||||
@@ -44,14 +44,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
# include <fcntl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
|
|
||||||
-# define SET_STACK_SIZE
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-#ifdef SET_STACK_SIZE
|
|
||||||
-# include <sys/resource.h>
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#ifdef _AMIGA
|
|
||||||
int __stack = 20000; /* Make sure we have 20K of stack space */
|
|
||||||
#endif
|
|
||||||
@@ -213,6 +205,13 @@ int print_version_flag = 0;
|
|
||||||
|
|
||||||
static struct stringlist *makefiles = 0;
|
|
||||||
|
|
||||||
+/* Size of the stack when we started. */
|
|
||||||
+
|
|
||||||
+#ifdef SET_STACK_SIZE
|
|
||||||
+struct rlimit stack_limit;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* Number of job slots (commands that can be run at once). */
|
|
||||||
|
|
||||||
unsigned int job_slots = 1;
|
|
||||||
@@ -919,11 +918,15 @@ main (int argc, char **argv, char **envp)
|
|
||||||
struct rlimit rlim;
|
|
||||||
|
|
||||||
/* Set the stack limit huge so that alloca does not fail. */
|
|
||||||
- if (getrlimit (RLIMIT_STACK, &rlim) == 0)
|
|
||||||
+ if (getrlimit (RLIMIT_STACK, &rlim) == 0
|
|
||||||
+ && rlim.rlim_cur > 0 && rlim.rlim_cur < rlim.rlim_max)
|
|
||||||
{
|
|
||||||
+ stack_limit = rlim;
|
|
||||||
rlim.rlim_cur = rlim.rlim_max;
|
|
||||||
setrlimit (RLIMIT_STACK, &rlim);
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ stack_limit.rlim_cur = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
diff --git a/make.h b/make.h
|
|
||||||
index 994f4f2..25c2bef 100644
|
|
||||||
--- a/make.h
|
|
||||||
+++ b/make.h
|
|
||||||
@@ -378,6 +378,14 @@ extern int no_default_sh_exe;
|
|
||||||
extern int unixy_shell;
|
|
||||||
#endif /* WINDOWS32 */
|
|
||||||
|
|
||||||
+#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
|
|
||||||
+# define SET_STACK_SIZE
|
|
||||||
+#endif
|
|
||||||
+#ifdef SET_STACK_SIZE
|
|
||||||
+# include <sys/resource.h>
|
|
||||||
+struct rlimit stack_limit;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
struct floc
|
|
||||||
{
|
|
||||||
const char *filenm;
|
|
||||||
--
|
|
||||||
1.6.5.3
|
|
||||||
|
|
@ -0,0 +1,85 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0001-MAKEFLAGS-re-exec.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From 09a507e60034ce2ca38210a6eeaf1f9552edda68 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 17:39:10 +0200
|
||||||
|
Subject: [PATCH] MAKEFLAGS re-exec
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
tests/ChangeLog:
|
||||||
|
|
||||||
|
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.
|
||||||
|
---
|
||||||
|
main.c | 2 +-
|
||||||
|
tests/scripts/features/reinvoke | 17 ++++++++++++++++-
|
||||||
|
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/main.c b/main.c
|
||||||
|
index c6989e3..9fe8090 100644
|
||||||
|
--- a/main.c
|
||||||
|
+++ b/main.c
|
||||||
|
@@ -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 --git a/tests/scripts/features/reinvoke b/tests/scripts/features/reinvoke
|
||||||
|
index 9952ced..eb1a349 100644
|
||||||
|
--- a/tests/scripts/features/reinvoke
|
||||||
|
+++ b/tests/scripts/features/reinvoke
|
||||||
|
@@ -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.7.2.3
|
||||||
|
|
@ -0,0 +1,74 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0002-oneshell.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From cfa19c5629f0252c4ab9058cadb582890ec3300b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 17:47:09 +0200
|
||||||
|
Subject: [PATCH] oneshell
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2010-08-13 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* main.c (main): Add "oneshell" to $(.FEATURES) (forgot to add
|
||||||
|
this in 3.82!)
|
||||||
|
|
||||||
|
test/ChangeLog:
|
||||||
|
|
||||||
|
* run_make_tests.pl (set_more_defaults): Set a %FEATURES hash to
|
||||||
|
the features available in $(.FEATURES).
|
||||||
|
---
|
||||||
|
main.c | 2 +-
|
||||||
|
tests/run_make_tests.pl | 3 +++
|
||||||
|
2 files changed, 4 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/main.c b/main.c
|
||||||
|
index 9fe8090..782b0de 100644
|
||||||
|
--- a/main.c
|
||||||
|
+++ b/main.c
|
||||||
|
@@ -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
|
||||||
|
diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl
|
||||||
|
index 2c8c08b..7291c55 100755
|
||||||
|
--- a/tests/run_make_tests.pl
|
||||||
|
+++ b/tests/run_make_tests.pl
|
||||||
|
@@ -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) {
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,141 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0003-archives-many-objects.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From d3df5370acf8000b7319417f885a584230658ddc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 17:50:44 +0200
|
||||||
|
Subject: [PATCH] archives many objects
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2010-08-13 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* read.c (parse_file_seq): Fix various errors parsing archives
|
||||||
|
with multiple objects in the parenthesis, as well as wildcards.
|
||||||
|
Fixes Savannah bug #30612.
|
||||||
|
|
||||||
|
tests/ChangeLog:
|
||||||
|
|
||||||
|
2010-08-13 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* scripts/features/archives: New regression tests for archive
|
||||||
|
support. Test for fix to Savannah bug #30612.
|
||||||
|
---
|
||||||
|
read.c | 15 ++++++++-----
|
||||||
|
tests/scripts/features/archives | 42 +++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 51 insertions(+), 6 deletions(-)
|
||||||
|
create mode 100644 tests/scripts/features/archives
|
||||||
|
|
||||||
|
diff --git a/read.c b/read.c
|
||||||
|
index a3ad88e..9dfd4ea 100644
|
||||||
|
--- a/read.c
|
||||||
|
+++ b/read.c
|
||||||
|
@@ -3028,7 +3028,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
||||||
|
{
|
||||||
|
/* 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 int size, int stopchar,
|
||||||
|
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 int size, int stopchar,
|
||||||
|
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 --git a/tests/scripts/features/archives b/tests/scripts/features/archives
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..00aa1af
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/scripts/features/archives
|
||||||
|
@@ -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;
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,154 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0004-improve-glob-speed.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From b905f2002daaacc62cc5c083ebc6f7ba787a793e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 17:58:00 +0200
|
||||||
|
Subject: [PATCH] improve glob speed
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2011-05-07 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* read.c (parse_file_seq): Ensure existence checks use glob().
|
||||||
|
|
||||||
|
2011-05-01 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* read.c (parse_file_seq): Don't try to invoke glob() unless there
|
||||||
|
are potential wildcard characters in the filename. Performance
|
||||||
|
enhancement suggested by Michael Meeks <michael.meeks@novell.com>
|
||||||
|
|
||||||
|
tests/Changelog:
|
||||||
|
|
||||||
|
2011-05-07 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* scripts/functions/wildcard: Verify wildcard used to test for
|
||||||
|
file existence/non-existence.
|
||||||
|
---
|
||||||
|
read.c | 58 ++++++++++++++++++++++---------------
|
||||||
|
tests/scripts/functions/wildcard | 12 ++++++++
|
||||||
|
2 files changed, 46 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/read.c b/read.c
|
||||||
|
index 9dfd4ea..8587e85 100644
|
||||||
|
--- a/read.c
|
||||||
|
+++ b/read.c
|
||||||
|
@@ -2904,6 +2904,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
||||||
|
const char *name;
|
||||||
|
const char **nlist = 0;
|
||||||
|
char *tildep = 0;
|
||||||
|
+ int globme = 1;
|
||||||
|
#ifndef NO_ARCHIVES
|
||||||
|
char *arname = 0;
|
||||||
|
char *memname = 0;
|
||||||
|
@@ -3112,32 +3113,40 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
||||||
|
}
|
||||||
|
#endif /* !NO_ARCHIVES */
|
||||||
|
|
||||||
|
- switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl))
|
||||||
|
- {
|
||||||
|
- case GLOB_NOSPACE:
|
||||||
|
- fatal (NILF, _("virtual memory exhausted"));
|
||||||
|
+ /* glob() is expensive: don't call it unless we need to. */
|
||||||
|
+ if (!(flags & PARSEFS_EXISTS) && strpbrk (name, "?*[") == NULL)
|
||||||
|
+ {
|
||||||
|
+ globme = 0;
|
||||||
|
+ i = 1;
|
||||||
|
+ nlist = &name;
|
||||||
|
+ }
|
||||||
|
+ 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 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 */
|
||||||
|
+ 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;
|
||||||
|
- }
|
||||||
|
+ default:
|
||||||
|
+ /* By default keep this name. */
|
||||||
|
+ i = 1;
|
||||||
|
+ nlist = &name;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* For each matched element, add it to the list. */
|
||||||
|
while (i-- > 0)
|
||||||
|
@@ -3177,7 +3186,8 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
||||||
|
#endif /* !NO_ARCHIVES */
|
||||||
|
NEWELT (concat (2, prefix, nlist[i]));
|
||||||
|
|
||||||
|
- globfree (&gl);
|
||||||
|
+ if (globme)
|
||||||
|
+ globfree (&gl);
|
||||||
|
|
||||||
|
#ifndef NO_ARCHIVES
|
||||||
|
if (arname)
|
||||||
|
diff --git a/tests/scripts/functions/wildcard b/tests/scripts/functions/wildcard
|
||||||
|
index 2841f5d..bcd84ad 100644
|
||||||
|
--- a/tests/scripts/functions/wildcard
|
||||||
|
+++ b/tests/scripts/functions/wildcard
|
||||||
|
@@ -88,4 +88,16 @@ all: ; @echo $(wildcard xz--y*.7)
|
||||||
|
!,
|
||||||
|
'', "\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.7.2.3
|
||||||
|
|
@ -0,0 +1,186 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0005-sort-word-count-algorithm.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From 1515cb543da14853a1751b397317f46dcbdbbbdf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 18:01:40 +0200
|
||||||
|
Subject: [PATCH] sort word count algorithm
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2011-05-02 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* function.c (func_sort): Use the same algorithm to count the
|
||||||
|
number of words we will get after the split, as we use to split.
|
||||||
|
Based on a patch from Matthias Hopf. Fixes Savannah bug #33125.
|
||||||
|
|
||||||
|
tests/ChangeLog:
|
||||||
|
|
||||||
|
2011-05-02 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* scripts/functions/sort: Add a test for Savannah bug #33125.
|
||||||
|
---
|
||||||
|
function.c | 17 ++-----
|
||||||
|
tests/scripts/functions/sort | 98 +++++++++++++++++++----------------------
|
||||||
|
2 files changed, 50 insertions(+), 65 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/function.c b/function.c
|
||||||
|
index e2f6c8c..17ca6a4 100644
|
||||||
|
--- a/function.c
|
||||||
|
+++ b/function.c
|
||||||
|
@@ -706,7 +706,7 @@ func_words (char *o, char **argv, const char *funcname UNUSED)
|
||||||
|
const char *word_iterator = argv[0];
|
||||||
|
char buf[20];
|
||||||
|
|
||||||
|
- while (find_next_token (&word_iterator, (unsigned int *) 0) != 0)
|
||||||
|
+ while (find_next_token (&word_iterator, NULL) != 0)
|
||||||
|
++i;
|
||||||
|
|
||||||
|
sprintf (buf, "%d", i);
|
||||||
|
@@ -1133,21 +1133,14 @@ func_sort (char *o, char **argv, const char *funcname UNUSED)
|
||||||
|
|
||||||
|
/* Find the maximum number of words we'll have. */
|
||||||
|
t = argv[0];
|
||||||
|
- wordi = 1;
|
||||||
|
- while (*t != '\0')
|
||||||
|
+ wordi = 0;
|
||||||
|
+ while ((p = find_next_token (&t, NULL)) != 0)
|
||||||
|
{
|
||||||
|
- char c = *(t++);
|
||||||
|
-
|
||||||
|
- if (! isspace ((unsigned char)c))
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
+ ++t;
|
||||||
|
++wordi;
|
||||||
|
-
|
||||||
|
- while (isspace ((unsigned char)*t))
|
||||||
|
- ++t;
|
||||||
|
}
|
||||||
|
|
||||||
|
- words = xmalloc (wordi * sizeof (char *));
|
||||||
|
+ words = xmalloc ((wordi == 0 ? 1 : wordi) * sizeof (char *));
|
||||||
|
|
||||||
|
/* Now assign pointers to each string in the array. */
|
||||||
|
t = argv[0];
|
||||||
|
diff --git a/tests/scripts/functions/sort b/tests/scripts/functions/sort
|
||||||
|
index d472102..b558910 100644
|
||||||
|
--- a/tests/scripts/functions/sort
|
||||||
|
+++ b/tests/scripts/functions/sort
|
||||||
|
@@ -1,55 +1,47 @@
|
||||||
|
-$description = "The following test creates a makefile to verify\n"
|
||||||
|
- ."the ability of make to sort lists of object. Sort\n"
|
||||||
|
- ."will also remove any duplicate entries. This will also\n"
|
||||||
|
- ."be tested.";
|
||||||
|
-
|
||||||
|
-$details = "The make file is built with a list of object in a random order\n"
|
||||||
|
- ."and includes some duplicates. Make should sort all of the elements\n"
|
||||||
|
- ."remove all duplicates\n";
|
||||||
|
-
|
||||||
|
-open(MAKEFILE,"> $makefile");
|
||||||
|
-
|
||||||
|
-# The Contents of the MAKEFILE ...
|
||||||
|
-
|
||||||
|
-print MAKEFILE "foo := moon_light days \n"
|
||||||
|
- ."foo1:= jazz\n"
|
||||||
|
- ."bar := captured \n"
|
||||||
|
- ."bar2 = boy end, has rise A midnight \n"
|
||||||
|
- ."bar3:= \$(foo)\n"
|
||||||
|
- ."s1 := _by\n"
|
||||||
|
- ."s2 := _and_a\n"
|
||||||
|
- ."t1 := \$(addsuffix \$(s1), \$(bar) )\n"
|
||||||
|
- ."t2 := \$(addsuffix \$(s2), \$(foo1) )\n"
|
||||||
|
- ."t3 := \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \n"
|
||||||
|
- ."t4 := \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \n"
|
||||||
|
- ."t5 := \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \n"
|
||||||
|
- ."t6 := \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \n"
|
||||||
|
- ."t7 := \$(t6) \$(t6) \$(t6) \n"
|
||||||
|
- ."p1 := \$(addprefix \$(foo1), \$(s2) )\n"
|
||||||
|
- ."blank:= \n"
|
||||||
|
- ."all:\n"
|
||||||
|
- ."\t\@echo \$(sort \$(bar2) \$(foo) \$(addsuffix \$(s1), \$(bar) ) \$(t2) \$(bar2) \$(bar3))\n"
|
||||||
|
- ."\t\@echo \$(sort \$(blank) \$(foo) \$(bar2) \$(t1) \$(p1) )\n"
|
||||||
|
- ."\t\@echo \$(sort \$(foo) \$(bar2) \$(t1) \$(t4) \$(t5) \$(t7) \$(t6) )\n";
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-# END of Contents of MAKEFILE
|
||||||
|
-
|
||||||
|
-close(MAKEFILE);
|
||||||
|
-
|
||||||
|
-&run_make_with_options($makefile,"",&get_logfile);
|
||||||
|
-
|
||||||
|
-# Create the answer to what should be produced by this Makefile
|
||||||
|
-$answer = "A boy captured_by days end, has jazz_and_a midnight moon_light rise\n"
|
||||||
|
- ."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n"
|
||||||
|
- ."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n";
|
||||||
|
-
|
||||||
|
-&compare_output($answer,&get_logfile(1));
|
||||||
|
+# -*-perl-*-
|
||||||
|
+
|
||||||
|
+$description = "The following test creates a makefile to verify
|
||||||
|
+the ability of make to sort lists of object. Sort
|
||||||
|
+will also remove any duplicate entries. This will also
|
||||||
|
+be tested.";
|
||||||
|
+
|
||||||
|
+$details = "The make file is built with a list of object in a random order
|
||||||
|
+and includes some duplicates. Make should sort all of the elements
|
||||||
|
+remove all duplicates\n";
|
||||||
|
+
|
||||||
|
+run_make_test('
|
||||||
|
+foo := moon_light days
|
||||||
|
+foo1:= jazz
|
||||||
|
+bar := captured
|
||||||
|
+bar2 = boy end, has rise A midnight
|
||||||
|
+bar3:= $(foo)
|
||||||
|
+s1 := _by
|
||||||
|
+s2 := _and_a
|
||||||
|
+t1 := $(addsuffix $(s1), $(bar) )
|
||||||
|
+t2 := $(addsuffix $(s2), $(foo1) )
|
||||||
|
+t3 := $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2)
|
||||||
|
+t4 := $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3)
|
||||||
|
+t5 := $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4)
|
||||||
|
+t6 := $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5)
|
||||||
|
+t7 := $(t6) $(t6) $(t6)
|
||||||
|
+p1 := $(addprefix $(foo1), $(s2) )
|
||||||
|
+blank:=
|
||||||
|
+all:
|
||||||
|
+ @echo $(sort $(bar2) $(foo) $(addsuffix $(s1), $(bar) ) $(t2) $(bar2) $(bar3))
|
||||||
|
+ @echo $(sort $(blank) $(foo) $(bar2) $(t1) $(p1) )
|
||||||
|
+ @echo $(sort $(foo) $(bar2) $(t1) $(t4) $(t5) $(t7) $(t6) )
|
||||||
|
+',
|
||||||
|
+ '', 'A boy captured_by days end, has jazz_and_a midnight moon_light rise
|
||||||
|
+A boy captured_by days end, has jazz_and_a midnight moon_light rise
|
||||||
|
+A boy captured_by days end, has jazz_and_a midnight moon_light rise
|
||||||
|
+');
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Test with non-space/tab whitespace. Note that you can't see the
|
||||||
|
+# original bug except using valgrind.
|
||||||
|
+
|
||||||
|
+run_make_test("FOO = a b\tc\rd\fe \f \f \f \f \ff
|
||||||
|
+all: ; \@echo \$(words \$(sort \$(FOO)))\n",
|
||||||
|
+ '', "5\n");
|
||||||
|
|
||||||
|
1;
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,89 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0006-construct-command-line.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From 12e4f0b3019ddd621147358500e87b91ac6361cf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 18:03:56 +0200
|
||||||
|
Subject: [PATCH] construct command line
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2011-05-07 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* job.c (construct_command_argv_internal): Don't assume shellflags
|
||||||
|
is always non-NULL. Escape-protect characters special to the
|
||||||
|
shell when copying the value of SHELL into new_line. Fixes
|
||||||
|
Savannah bug #23922.
|
||||||
|
---
|
||||||
|
job.c | 23 ++++++++++++++++-------
|
||||||
|
1 files changed, 16 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/job.c b/job.c
|
||||||
|
index aacfb84..535a751 100644
|
||||||
|
--- a/job.c
|
||||||
|
+++ b/job.c
|
||||||
|
@@ -2792,12 +2792,12 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||||
|
|
||||||
|
unsigned int shell_len = strlen (shell);
|
||||||
|
unsigned int line_len = strlen (line);
|
||||||
|
- unsigned int sflags_len = strlen (shellflags);
|
||||||
|
+ unsigned int sflags_len = shellflags ? strlen (shellflags) : 0;
|
||||||
|
char *command_ptr = NULL; /* used for batch_mode_shell mode */
|
||||||
|
char *new_line;
|
||||||
|
|
||||||
|
# ifdef __EMX__ /* is this necessary? */
|
||||||
|
- if (!unixy_shell)
|
||||||
|
+ if (!unixy_shell && shellflags)
|
||||||
|
shellflags[0] = '/'; /* "/c" */
|
||||||
|
# endif
|
||||||
|
|
||||||
|
@@ -2859,19 +2859,28 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||||
|
|
||||||
|
new_argv = xmalloc (4 * sizeof (char *));
|
||||||
|
new_argv[0] = xstrdup(shell);
|
||||||
|
- new_argv[1] = xstrdup(shellflags);
|
||||||
|
+ new_argv[1] = xstrdup(shellflags ? shellflags : "");
|
||||||
|
new_argv[2] = line;
|
||||||
|
new_argv[3] = NULL;
|
||||||
|
return new_argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
- new_line = alloca (shell_len + 1 + sflags_len + 1
|
||||||
|
+ new_line = alloca ((shell_len*2) + 1 + sflags_len + 1
|
||||||
|
+ (line_len*2) + 1);
|
||||||
|
ap = new_line;
|
||||||
|
- memcpy (ap, shell, shell_len);
|
||||||
|
- ap += shell_len;
|
||||||
|
+ /* Copy SHELL, escaping any characters special to the shell. If
|
||||||
|
+ we don't escape them, construct_command_argv_internal will
|
||||||
|
+ recursively call itself ad nauseam, or until stack overflow,
|
||||||
|
+ whichever happens first. */
|
||||||
|
+ for (p = shell; *p != '\0'; ++p)
|
||||||
|
+ {
|
||||||
|
+ if (strchr (sh_chars, *p) != 0)
|
||||||
|
+ *(ap++) = '\\';
|
||||||
|
+ *(ap++) = *p;
|
||||||
|
+ }
|
||||||
|
*(ap++) = ' ';
|
||||||
|
- memcpy (ap, shellflags, sflags_len);
|
||||||
|
+ if (shellflags)
|
||||||
|
+ memcpy (ap, shellflags, sflags_len);
|
||||||
|
ap += sflags_len;
|
||||||
|
*(ap++) = ' ';
|
||||||
|
command_ptr = ap;
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,148 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0007-copy-on-expand.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From 3d11dcdc977ef7db3897663b806fe08856ca4190 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 18:05:12 +0200
|
||||||
|
Subject: [PATCH] copy on expand
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2011-08-29 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* expand.c (variable_expand_string): Always allocate a new buffer
|
||||||
|
for a string we're expanding. The string we're working on can get
|
||||||
|
freed while we work on it (for example if it's the value of a
|
||||||
|
variable which modifies itself using an eval operation).
|
||||||
|
See Savannah patch #7534 for the original report by Lubomir Rintel.
|
||||||
|
|
||||||
|
tests/ChangeLog:
|
||||||
|
|
||||||
|
2011-08-29 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* scripts/features/varnesting: Test resetting of variables while
|
||||||
|
expanding them. See Savannah patch #7534
|
||||||
|
---
|
||||||
|
expand.c | 20 +++++----------
|
||||||
|
tests/scripts/features/varnesting | 47 +++++++++++++++++++------------------
|
||||||
|
2 files changed, 31 insertions(+), 36 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/expand.c b/expand.c
|
||||||
|
index 2315b06..9aeaa13 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 *save;
|
||||||
|
char *o;
|
||||||
|
unsigned int line_offset;
|
||||||
|
|
||||||
|
@@ -212,16 +212,11 @@ variable_expand_string (char *line, const char *string, long length)
|
||||||
|
return (variable_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* 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')
|
||||||
|
- {
|
||||||
|
- abuf = xmalloc(length+1);
|
||||||
|
- memcpy(abuf, string, length);
|
||||||
|
- abuf[length] = '\0';
|
||||||
|
- string = abuf;
|
||||||
|
- }
|
||||||
|
- p = string;
|
||||||
|
+ /* We need a copy of STRING: due to eval, it's possible that it will get
|
||||||
|
+ freed as we process it (it might be the value of a variable that's reset
|
||||||
|
+ for example). Also having a nil-terminated string is handy. */
|
||||||
|
+ save = length < 0 ? xstrdup (string) : xstrndup (string, length);
|
||||||
|
+ p = save;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
@@ -411,8 +406,7 @@ variable_expand_string (char *line, const char *string, long length)
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (abuf)
|
||||||
|
- free (abuf);
|
||||||
|
+ free (save);
|
||||||
|
|
||||||
|
variable_buffer_output (o, "", 1);
|
||||||
|
return (variable_buffer + line_offset);
|
||||||
|
diff --git a/tests/scripts/features/varnesting b/tests/scripts/features/varnesting
|
||||||
|
index 15d5071..d8f3ffb 100644
|
||||||
|
--- a/tests/scripts/features/varnesting
|
||||||
|
+++ b/tests/scripts/features/varnesting
|
||||||
|
@@ -1,29 +1,30 @@
|
||||||
|
-$description = "The following test creates a makefile to ...";
|
||||||
|
+# -*-perl-*-
|
||||||
|
+$description = "Test recursive variables";
|
||||||
|
|
||||||
|
$details = "";
|
||||||
|
|
||||||
|
-open(MAKEFILE,"> $makefile");
|
||||||
|
-
|
||||||
|
-# The Contents of the MAKEFILE ...
|
||||||
|
-
|
||||||
|
-print MAKEFILE "x = variable1\n"
|
||||||
|
- ."variable2 := Hello\n"
|
||||||
|
- ."y = \$(subst 1,2,\$(x))\n"
|
||||||
|
- ."z = y\n"
|
||||||
|
- ."a := \$(\$(\$(z)))\n"
|
||||||
|
- ."all: \n"
|
||||||
|
- ."\t\@echo \$(a)\n";
|
||||||
|
-
|
||||||
|
-# END of Contents of MAKEFILE
|
||||||
|
-
|
||||||
|
-close(MAKEFILE);
|
||||||
|
-
|
||||||
|
-&run_make_with_options($makefile,"",&get_logfile);
|
||||||
|
-
|
||||||
|
-# Create the answer to what should be produced by this Makefile
|
||||||
|
-$answer = "Hello\n";
|
||||||
|
-
|
||||||
|
-&compare_output($answer,&get_logfile(1));
|
||||||
|
+run_make_test('
|
||||||
|
+x = variable1
|
||||||
|
+variable2 := Hello
|
||||||
|
+y = $(subst 1,2,$(x))
|
||||||
|
+z = y
|
||||||
|
+a := $($($(z)))
|
||||||
|
+all:
|
||||||
|
+ @echo $(a)
|
||||||
|
+',
|
||||||
|
+ '', "Hello\n");
|
||||||
|
+
|
||||||
|
+# This tests resetting the value of a variable while expanding it.
|
||||||
|
+# You may only see problems with this if you're using valgrind or
|
||||||
|
+# some other memory checker that poisons freed memory.
|
||||||
|
+# See Savannah patch #7534
|
||||||
|
+
|
||||||
|
+run_make_test('
|
||||||
|
+VARIABLE = $(eval VARIABLE := echo hi)$(VARIABLE)
|
||||||
|
+wololo:
|
||||||
|
+ @$(VARIABLE)
|
||||||
|
+',
|
||||||
|
+ '', "hi\n");
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,97 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0008-parallel-remake.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From 4c7a70c558579d5b42d54fde1397c121d3df31c4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 18:06:56 +0200
|
||||||
|
Subject: [PATCH] parallel remake
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2011-09-18 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* main.c (main): If we're re-exec'ing and we're the master make,
|
||||||
|
then restore the job_slots value so it goes back into MAKEFLAGS
|
||||||
|
properly. See Savannah bug #33873.
|
||||||
|
|
||||||
|
test/ChangeLog:
|
||||||
|
|
||||||
|
2011-09-18 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* scripts/features/parallelism: On re-exec make sure we preserve
|
||||||
|
the value of MAKEFLAGS when necessary. See Savannah bug #33873.
|
||||||
|
---
|
||||||
|
main.c | 8 +++++---
|
||||||
|
tests/scripts/features/parallelism | 17 +++++++++++++++++
|
||||||
|
2 files changed, 22 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/main.c b/main.c
|
||||||
|
index 782b0de..68587ae 100644
|
||||||
|
--- a/main.c
|
||||||
|
+++ b/main.c
|
||||||
|
@@ -2088,6 +2088,11 @@ main (int argc, char **argv, char **envp)
|
||||||
|
|
||||||
|
++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);
|
||||||
|
@@ -2824,9 +2829,6 @@ define_makeflags (int all, int makefile)
|
||||||
|
&& (*(unsigned int *) cs->value_ptr ==
|
||||||
|
*(unsigned int *) cs->noarg_value))
|
||||||
|
ADD_FLAG ("", 0); /* Optional value omitted; see below. */
|
||||||
|
- else if (cs->c == 'j')
|
||||||
|
- /* Special case for `-j'. */
|
||||||
|
- ADD_FLAG ("1", 1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *buf = alloca (30);
|
||||||
|
diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism
|
||||||
|
index cc0f84f..6122412 100644
|
||||||
|
--- a/tests/scripts/features/parallelism
|
||||||
|
+++ b/tests/scripts/features/parallelism
|
||||||
|
@@ -164,6 +164,23 @@ inc.mk:
|
||||||
|
|
||||||
|
rmfiles('inc.mk');
|
||||||
|
|
||||||
|
+# TEST #11: Make sure -jN from MAKEFLAGS is processed even when we re-exec
|
||||||
|
+# See Savannah bug #33873
|
||||||
|
+
|
||||||
|
+$extraENV{MAKEFLAGS} = '-j4';
|
||||||
|
+
|
||||||
|
+run_make_test(q!
|
||||||
|
+things = thing1 thing2
|
||||||
|
+all: $(things)
|
||||||
|
+$(things):; @echo '$@ start'; sleep 1; echo '$@ end'
|
||||||
|
+-include inc.mk
|
||||||
|
+inc.mk: ; @touch $@
|
||||||
|
+!,
|
||||||
|
+ '', "thing1 start\nthing2 start\nthing1 end\nthing2 end\n");
|
||||||
|
+
|
||||||
|
+delete $extraENV{MAKEFLAGS};
|
||||||
|
+rmfiles('inc.mk');
|
||||||
|
+
|
||||||
|
if ($all_tests) {
|
||||||
|
# Implicit files aren't properly recreated during parallel builds
|
||||||
|
# Savannah bug #26864
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,72 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0009-long-command-line.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From 23a3b958d8a80e601c1a0bf0770af6b854d00187 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 18:12:47 +0200
|
||||||
|
Subject: [PATCH] long command line
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
2012-09-09 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* job.c (construct_command_argv_internal): Keep the command line
|
||||||
|
on the heap for very long lines. Fixes Savannah bug #36451.
|
||||||
|
---
|
||||||
|
job.c | 13 +++++++++----
|
||||||
|
1 files changed, 9 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/job.c b/job.c
|
||||||
|
index 535a751..386d241 100644
|
||||||
|
--- a/job.c
|
||||||
|
+++ b/job.c
|
||||||
|
@@ -2865,8 +2865,8 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||||
|
return new_argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
- new_line = alloca ((shell_len*2) + 1 + sflags_len + 1
|
||||||
|
- + (line_len*2) + 1);
|
||||||
|
+ new_line = xmalloc ((shell_len*2) + 1 + sflags_len + 1
|
||||||
|
+ + (line_len*2) + 1);
|
||||||
|
ap = new_line;
|
||||||
|
/* Copy SHELL, escaping any characters special to the shell. If
|
||||||
|
we don't escape them, construct_command_argv_internal will
|
||||||
|
@@ -2933,8 +2933,11 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||||
|
*ap++ = *p;
|
||||||
|
}
|
||||||
|
if (ap == new_line + shell_len + sflags_len + 2)
|
||||||
|
- /* Line was empty. */
|
||||||
|
- return 0;
|
||||||
|
+ {
|
||||||
|
+ /* Line was empty. */
|
||||||
|
+ free (new_line);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
*ap = '\0';
|
||||||
|
|
||||||
|
#ifdef WINDOWS32
|
||||||
|
@@ -3074,6 +3077,8 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||||
|
fatal (NILF, _("%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"),
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+ free (new_line);
|
||||||
|
}
|
||||||
|
#endif /* ! AMIGA */
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.2.3
|
||||||
|
|
@ -0,0 +1,79 @@ |
|||||||
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||||
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||||
|
#
|
||||||
|
# Filename: package/.../make/make-3.82-0010-intermediate-parallel.patch
|
||||||
|
# Copyright (C) 2012 The OpenSDE Project
|
||||||
|
#
|
||||||
|
# More information can be found in the files COPYING and README.
|
||||||
|
#
|
||||||
|
# This patch file is dual-licensed. It is available under the license the
|
||||||
|
# patched project is licensed under, as long as it is an OpenSource license
|
||||||
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||||
|
|
||||||
|
From b1260285aca75246e8028d1b5221304540bd59c7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Wiese <chris@opensde.org>
|
||||||
|
Date: Mon, 22 Oct 2012 18:15:13 +0200
|
||||||
|
Subject: [PATCH] intermediate parallel
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
|
||||||
|
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.
|
||||||
|
---
|
||||||
|
remake.c | 4 ++++
|
||||||
|
tests/scripts/features/parallelism | 17 +++++++++++++++++
|
||||||
|
2 files changed, 21 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/remake.c b/remake.c
|
||||||
|
index 27d2550..a8d7cdf 100644
|
||||||
|
--- a/remake.c
|
||||||
|
+++ b/remake.c
|
||||||
|
@@ -614,6 +614,10 @@ update_file_1 (struct file *file, unsigned int depth)
|
||||||
|
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);
|
||||||
|
|
||||||
|
diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism
|
||||||
|
index 6122412..090827b 100644
|
||||||
|
--- a/tests/scripts/features/parallelism
|
||||||
|
+++ b/tests/scripts/features/parallelism
|
||||||
|
@@ -211,6 +211,23 @@ rm main.x");
|
||||||
|
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.7.2.3
|
||||||
|
|
Loading…
Reference in new issue