Ensure variables defined in $(call ...) have global scope
authorPaul Smith <psmith@gnu.org>
Mon, 12 Sep 2011 05:29:58 +0000 (05:29 +0000)
committerPaul Smith <psmith@gnu.org>
Mon, 12 Sep 2011 05:29:58 +0000 (05:29 +0000)
Add a note about using #!/usr/bin/make -f to the manual.
Clean up the w32 subdirectory in the dist tarball.

ChangeLog
Makefile.am
doc/make.texi
read.c
tests/ChangeLog
tests/scripts/functions/call

index 34411cf454902b0a857655020c7ec684694e5ff3..53ea48167775e95800697161dde3e32e7eda2446 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2011-09-12  Paul Smith  <psmith@gnu.org>
+
+       * read.c (eval): Ensure exported variables are defined in the
+       global scope.  Fixes Savannah bug #32498.
+
+2011-09-11  Paul Smith  <psmith@gnu.org>
+
+       * Makefile.am (dist-hook): Remove w32/Makefile and .deps/ from the
+       dist file.  Fixes Savannah bug #31489.
+
+       * doc/make.texi (Complex Makefile): Add a hint about using
+       #!/usr/bin/make (for Savannah support request #106459)
+
 2011-09-02  Paul Smith  <psmith@gnu.org>
 
        * remake.c (touch_file): If we have both -n and -t, -n takes
index 92acdc28b120913c7ccb0083c68de2ecd5ca98f1..c747ada9a4b60c48cff467f4d1ef278e05b41ebe 100644 (file)
@@ -129,7 +129,7 @@ install-exec-local:
 #
 dist-hook:
        (cd $(srcdir); \
-        sub=`find w32 tests -follow \( -name CVS -prune -o -name .cvsignore -o -name work -prune \) -o \( -name \*.orig -o -name \*.rej -o -name \*~ -prune \) -o -type f -print`; \
+        sub=`find w32 tests -follow \( -name CVS -o -name .deps -o -name work -o -name .cvsignore -o -name \*.orig -o -name \*.rej -o -name \*~ -o -name Makefile \) -prune -o -type f -print`; \
         tar chf - $$sub) \
        | (cd $(distdir); tar xfBp -)
 
index 0bbeebb47e0b9eb23837f3311417e463b436a6e4..02c7a6899abe7f6bcbc5e3319dada2e5f81abe80 100644 (file)
@@ -11246,7 +11246,8 @@ sequential manner.
 @appendix Complex Makefile Example
 
 Here is the makefile for the GNU @code{tar} program.  This is a
-moderately complex makefile.
+moderately complex makefile.  The first line uses a @code{#!} setting
+to allow the makefile to be executed directly.
 
 Because it is the first target, the default goal is @samp{all}.  An
 interesting feature of this makefile is that @file{testpad.h} is a
@@ -11282,6 +11283,7 @@ distribution kits.
 
 @example
 @group
+#!/usr/bin/make -f
 # Generated automatically from Makefile.in by configure.
 # Un*x Makefile for GNU tar program.
 # Copyright (C) 1991 Free Software Foundation, Inc.
diff --git a/read.c b/read.c
index b012094235be41d8834276fa6389b0310c9067a1..58423f52434ec017dbee1c0e037fa29e044f302a 100644 (file)
--- a/read.c
+++ b/read.c
@@ -782,7 +782,7 @@ eval (struct ebuffer *ebuf, int set_default)
                 {
                   struct variable *v = lookup_variable (p, l);
                   if (v == 0)
-                    v = define_variable_loc (p, l, "", o_file, 0, fstart);
+                    v = define_variable_global (p, l, "", o_file, 0, fstart);
                   v->export = exporting ? v_export : v_noexport;
                 }
 
index 03983ec0ae42144dd5fd753676f38410f956705e..a5747248ba88feeeb9fed87f099fed9e1ae45f6a 100644 (file)
@@ -1,3 +1,8 @@
+2011-09-12  Paul Smith  <psmith@gnu.org>
+
+       * scripts/functions/call: Verify that using export in a $(call ...)
+       context creates a global variable.  See Savannah bug #32498.
+
 2011-09-02  Paul Smith  <psmith@gnu.org>
 
        * scripts/options/dash-n: Verify that in "-n -t", the -n takes
index 6dd48b13eceadd2701780da413c4380ae25e5a0d..98f1d921dfcd103baefd0f4e494265d00405cebc 100644 (file)
@@ -96,4 +96,15 @@ close(MAKEFILE);
 $answer = "1 2 3 4 5 6 7 8 9\n1 2 3 4 5\n1 2 3\n1 2 3\n";
 &compare_output($answer,&get_logfile(1));
 
+# Ensure that variables are defined in global scope even in a $(call ...)
+
+delete $ENV{X123};
+
+run_make_test('
+tst = $(eval export X123)
+$(call tst)
+all: ; @echo "$${X123-not set}"
+',
+              '', "\n");
+
 1;