From a5c774a51b7bfa564e0e44bfc22213ac55abc562 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Mon, 12 Sep 2011 05:29:58 +0000 Subject: [PATCH] Ensure variables defined in $(call ...) have global scope Add a note about using #!/usr/bin/make -f to the manual. Clean up the w32 subdirectory in the dist tarball. --- ChangeLog | 13 +++++++++++++ Makefile.am | 2 +- doc/make.texi | 4 +++- read.c | 2 +- tests/ChangeLog | 5 +++++ tests/scripts/functions/call | 11 +++++++++++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 34411cf4..53ea4816 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2011-09-12 Paul Smith + + * read.c (eval): Ensure exported variables are defined in the + global scope. Fixes Savannah bug #32498. + +2011-09-11 Paul Smith + + * 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 * remake.c (touch_file): If we have both -n and -t, -n takes diff --git a/Makefile.am b/Makefile.am index 92acdc28..c747ada9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 -) diff --git a/doc/make.texi b/doc/make.texi index 0bbeebb4..02c7a689 100644 --- a/doc/make.texi +++ b/doc/make.texi @@ -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 b0120942..58423f52 100644 --- 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; } diff --git a/tests/ChangeLog b/tests/ChangeLog index 03983ec0..a5747248 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2011-09-12 Paul Smith + + * scripts/functions/call: Verify that using export in a $(call ...) + context creates a global variable. See Savannah bug #32498. + 2011-09-02 Paul Smith * scripts/options/dash-n: Verify that in "-n -t", the -n takes diff --git a/tests/scripts/functions/call b/tests/scripts/functions/call index 6dd48b13..98f1d921 100644 --- a/tests/scripts/functions/call +++ b/tests/scripts/functions/call @@ -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;