2009-06-07 Paul Smith <psmith@gnu.org>
+ * 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
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. */
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;
}
\f
/* Set the `command_state' member of FILE and all its `also_make's. */
2009-06-07 Paul Smith <psmith@gnu.org>
+ * 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.
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
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;