to the read stage.
+2004-10-05 Boris Kolpackov <boris@kolpackov.net>
+
+ * read.c (record_target_var): Expand simple pattern-specific
+ variable.
+ * variable.c (initialize_file_variables): Do not expand simple
+ pattern-specific variable.
+
2004-09-28 Boris Kolpackov <boris@kolpackov.net>
* remake.c (update_file_1): When rebuilding makefiles inherit
variable definition. */
v = parse_variable_definition (&p->variable, defn);
assert (v != 0);
- v->value = xstrdup (v->value);
+
+ if (v->flavor == f_simple)
+ v->value = allocated_variable_expand (v->value);
+ else
+ v->value = xstrdup (v->value);
+
fname = p->target;
}
else
+2004-10-05 Boris Kolpackov <boris@kolpackov.net>
+
+ * scripts/features/patspecific_vars: Test simple/recursive
+ variable expansion.
+
2004-09-28 Boris Kolpackov <boris@kolpackov.net>
* scripts/features/include: Test dontcare flag inheritance
@test "$(foo)" == "$$foo"
', '', '');
+
+# TEST #6 -- test expansion of pattern-specific simple variables
+#
+run_make_test('
+.PHONY: all
+
+all: inherit := good $$t
+all: bar baz
+
+b%: pattern := good $$t
+
+global := orginal $$t
+
+
+# normal target
+#
+ifdef rec
+bar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
+else
+bar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
+endif
+
+bar: ; @echo \'normal: $a;\'
+
+
+# pattern target
+#
+ifdef rec
+%z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
+else
+%z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
+endif
+
+%z: ; @echo \'pattrn: $a;\'
+
+
+global := new $$t
+',
+'',
+'normal: global: orginal $t pattern: inherit: ;
+pattrn: global: orginal $t pattern: inherit: ;');
+
+
+# TEST #7 -- test expansion of pattern-specific recursive variables
+#
+run_make_test(undef, # reuse previous makefile
+'rec=1',
+'normal: global: new $t pattern: good $t inherit: good $t;
+pattrn: global: new $t pattern: good $t inherit: good $t;');
+
+
1;
do
{
/* We found one, so insert it into the set. */
- struct variable *v = do_variable_definition (
- &p->variable.fileinfo, p->variable.name,
- p->variable.value, p->variable.origin,
- p->variable.flavor, 1);
+
+ struct variable *v;
+
+ if (p->variable.flavor == f_simple)
+ {
+ v = define_variable_loc (
+ p->variable.name, strlen (p->variable.name),
+ p->variable.value, p->variable.origin,
+ 0, &p->variable.fileinfo);
+
+ v->flavor = f_simple;
+ }
+ else
+ {
+ v = do_variable_definition (
+ &p->variable.fileinfo, p->variable.name,
+ p->variable.value, p->variable.origin,
+ p->variable.flavor, 1);
+ }
/* Also mark it as a per-target and copy export status. */
v->per_target = p->variable.per_target;