From b0d67e0e15490e43bbc074ec50618488c206399b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 5 Oct 2004 16:56:14 +0000 Subject: [PATCH] Moved expansion of simple pattern-specific variables from the rebuild stage to the read stage. --- ChangeLog | 7 +++++ read.c | 7 ++++- tests/ChangeLog | 5 ++++ tests/scripts/features/patspecific_vars | 51 +++++++++++++++++++++++++++++++++ variable.c | 23 ++++++++++++--- 5 files changed, 88 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 53fa8df..51d599d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2004-10-05 Boris Kolpackov + + * 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 * remake.c (update_file_1): When rebuilding makefiles inherit diff --git a/read.c b/read.c index 3704836..291c691 100644 --- a/read.c +++ b/read.c @@ -1675,7 +1675,12 @@ record_target_var (struct nameseq *filenames, char *defn, 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 diff --git a/tests/ChangeLog b/tests/ChangeLog index 87c64d5..f1c59d6 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2004-10-05 Boris Kolpackov + + * scripts/features/patspecific_vars: Test simple/recursive + variable expansion. + 2004-09-28 Boris Kolpackov * scripts/features/include: Test dontcare flag inheritance diff --git a/tests/scripts/features/patspecific_vars b/tests/scripts/features/patspecific_vars index 74de9bb..31359cf 100644 --- a/tests/scripts/features/patspecific_vars +++ b/tests/scripts/features/patspecific_vars @@ -70,4 +70,55 @@ run_make_test(' @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; diff --git a/variable.c b/variable.c index f6cca0d..31b84a4 100644 --- a/variable.c +++ b/variable.c @@ -495,10 +495,25 @@ initialize_file_variables (struct file *file, int reading) 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; -- 2.7.4