From a72bff7cb3090051e75b631694aeb2bdb863aeb5 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sun, 7 Jun 2009 18:16:15 +0000 Subject: - Fix Savannah bug #24622 --- ChangeLog | 5 +++++ file.c | 8 ++++---- tests/ChangeLog | 3 +++ tests/scripts/features/se_explicit | 24 ++++++++++++------------ 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 487b2d3..7c8e87a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-06-07 Paul Smith + * file.c (snap_deps): Set SNAPPED_DEPS at the start of snapping, + not the end, to catch second expansion $(eval ...) defining new + target/prereq relationships during snap_deps. + Fixes Savannah bug #24622. + * read.c (record_files): The second-expansion "f->updating" hack was not completely correct: if assumed that the target with commands always had prerequisites; if one didn't then the ordering diff --git a/file.c b/file.c index 0efd51e..95e3788 100644 --- a/file.c +++ b/file.c @@ -638,6 +638,10 @@ snap_deps (void) struct file **file_slot; struct file **file_end; + /* Remember that we've done this. Once we start snapping deps we can no + longer define new targets. */ + snapped_deps = 1; + /* Perform second expansion and enter each dependency name as a file. */ /* Expand .SUFFIXES first; it's dependencies are used for $$* calculation. */ @@ -737,10 +741,6 @@ snap_deps (void) define_variable (STRING_SIZE_TUPLE("OUTPUT_OPTION"), "", o_default, 1); */ #endif - - /* Remember that we've done this. Once done we can no longer define - new targets. */ - snapped_deps = 1; } /* Set the `command_state' member of FILE and all its `also_make's. */ diff --git a/tests/ChangeLog b/tests/ChangeLog index 062e619..244af41 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,8 @@ 2009-06-07 Paul Smith + * scripts/features/se_explicit: Make sure we catch defining + prereqs during snap_deps(). Savannah bug #24622. + * scripts/variables/automatic: Check prereq ordering when the target with the recipe has no prereqs. Savannah bug #21198. diff --git a/tests/scripts/features/se_explicit b/tests/scripts/features/se_explicit index b0342c7..454d494 100644 --- a/tests/scripts/features/se_explicit +++ b/tests/scripts/features/se_explicit @@ -86,31 +86,19 @@ run_make_test(' all: foo bar baz # Subtest #1 -# foo: foo.1; @: - foo: foo.2 - foo: foo.3 - # Subtest #2 -# bar: bar.2 - bar: bar.1; @: - bar: bar.3 - # Subtest #3 -# baz: baz.1 - baz: baz.2 - baz: ; @: - ', '', 'foo.1 @@ -129,6 +117,18 @@ run_make_test(' all : $$(eval $$(info test)) ', '', "test\n#MAKE#: Nothing to be done for `all'.\n"); +# TEST #5: (NEGATIVE) catch eval in a prereq list trying to create new +# target/prereq relationships. + +run_make_test(' +.SECONDEXPANSION: +proj1.exe : proj1.o $$(eval $$(test)) +define test +proj1.o : proj1.c +proj1.c: proj1.h +endef +', + '', "#MAKE#: *** prerequisites cannot be defined in recipes. Stop.\n", 512); # This tells the test driver that the perl test script executed properly. 1; -- cgit v1.2.3