From dceb954f9c0a948b8d53796fd78b7cfae9148b1b Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sat, 13 Jun 2009 23:10:52 +0000 Subject: [PATCH] - Fix Savannah bug #13401 --- ChangeLog | 5 +++++ doc/make.texi | 11 ++++++----- read.c | 6 ++++-- tests/ChangeLog | 4 ++++ tests/scripts/variables/MAKEFILES | 19 +++++++++++++++++++ 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 92637f74..00831378 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-06-13 Paul Smith + * doc/make.texi (MAKEFILES Variable): Be explicit that files + included by MAKEFILES cannot give default goals. + * read.c (eval): If set_default is not set, pass the no-default-goal + value when we read included makefiles. Fixes Savannah bug #13401. + * ar.c (ar_name): Ensure that targets with empty parens aren't considered archive member references: archive members must have a non-empty "member" string. Fixes Savannah bug #18435. diff --git a/doc/make.texi b/doc/make.texi index 3dea3d6c..9ca410bf 100644 --- a/doc/make.texi +++ b/doc/make.texi @@ -1191,11 +1191,12 @@ For compatibility with some other @code{make} implementations, @vindex MAKEFILES If the environment variable @code{MAKEFILES} is defined, @code{make} considers its value as a list of names (separated by whitespace) of -additional makefiles to be read before the others. This works much like -the @code{include} directive: various directories are searched for those -files (@pxref{Include, ,Including Other Makefiles}). In addition, the -default goal is never taken from one of these makefiles and it is not an -error if the files listed in @code{MAKEFILES} are not found.@refill +additional makefiles to be read before the others. This works much +like the @code{include} directive: various directories are searched +for those files (@pxref{Include, ,Including Other Makefiles}). In +addition, the default goal is never taken from one of these makefiles +(or any makefile included by them) and it is not an error if the files +listed in @code{MAKEFILES} are not found.@refill @cindex recursion, and @code{MAKEFILES} variable The main use of @code{MAKEFILES} is in communication between recursive diff --git a/read.c b/read.c index 3071ae56..19d55591 100644 --- a/read.c +++ b/read.c @@ -857,8 +857,10 @@ eval (struct ebuffer *ebuf, int set_default) free (files); files = next; - r = eval_makefile (name, (RM_INCLUDED | RM_NO_TILDE - | (noerror ? RM_DONTCARE : 0))); + r = eval_makefile (name, + (RM_INCLUDED | RM_NO_TILDE + | (noerror ? RM_DONTCARE : 0) + | (set_default ? 0 : RM_NO_DEFAULT_GOAL))); if (!r && !noerror) error (fstart, "%s: %s", name, strerror (errno)); } diff --git a/tests/ChangeLog b/tests/ChangeLog index ddae67e3..7b414c57 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,9 @@ 2009-06-13 Paul Smith + * scripts/variables/MAKEFILES: Verify that MAKEFILES included + files (and files included by them) don't set the default goal. + Savannah bug #13401. + * scripts/functions/wildcard: Test that wildcards with non-existent glob matchers return empty. diff --git a/tests/scripts/variables/MAKEFILES b/tests/scripts/variables/MAKEFILES index 3be284b3..b23da8ea 100644 --- a/tests/scripts/variables/MAKEFILES +++ b/tests/scripts/variables/MAKEFILES @@ -31,4 +31,23 @@ close(MAKEFILE); $answer = "DEFAULT RULE: M2=m2 M3=m3\n"; &compare_output($answer,&get_logfile(1)); +# TEST 2: Verify that included makefiles don't set the default goal. +# See Savannah bug #13401. + +create_file('xx-inc.mk', ' +include_goal: ; @echo $@ +include xx-ind.mk +'); + +create_file('xx-ind.mk', ' +indirect_goal: ; @echo $@ +'); + +run_make_test(q! +top: ; @echo $@ +!, + 'MAKEFILES=xx-inc.mk', "top\n"); + +unlink(qw(xx-inc.mk xx-ind.mk)); + 1;