diff options
author | Paul Smith <psmith@gnu.org> | 2005-10-24 13:01:39 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2005-10-24 13:01:39 +0000 |
commit | 11095a90f120545c915c92b8ebf48f04723d1837 (patch) | |
tree | 73dba88903ea90cdac930057fe8619a8a04fb869 /implicit.c | |
parent | 66459baee27374577d32a78564604ad64228f71d (diff) | |
download | gunmake-11095a90f120545c915c92b8ebf48f04723d1837.tar.gz |
Make second expansion optional (partial implementation).
I decided this feature was too impacting to make the permanent default
behavior. This set of changes makes the default behavior of make the
old behavior (no second expansion). If you want second expansion, you
must define the .SECONDEXPANSION: special target before the first target
that needs it.
This set of changes ONLY fixes explicit and static pattern rules to work
like this. Implicit rules still have second expansion enabled all the
time: I'll work on that next.
Note that there is still a backward-incompatibility: now to get the old
SysV behavior using $$@ etc. in the prerequisites list you need to set
.SECONDEXPANSION: as well.
Diffstat (limited to 'implicit.c')
-rw-r--r-- | implicit.c | 14 |
1 files changed, 5 insertions, 9 deletions
@@ -477,12 +477,6 @@ pattern_search (struct file *file, int archive, /* Try each dependency; see if it "exists". */ - /* @@ There is always only one dep line for any given implicit - rule. So the loop is not necessary. Can rule->deps be 0? - - Watch out for conversion of suffix rules to implicit rules. - */ - for (dep = rule->deps; dep != 0; dep = dep->next) { unsigned int len; @@ -513,7 +507,7 @@ pattern_search (struct file *file, int archive, we just replace % with the stem value, later, when we do the second expansion, we will re-expand this stem value once again. This is not good especially if you have - certain characters in your setm (like $). + certain characters in your stem (like $). Instead, we will replace % with $* and allow the second expansion to take care of it for us. This way (since $* @@ -836,6 +830,7 @@ pattern_search (struct file *file, int archive, dep = (struct dep *) xmalloc (sizeof (struct dep)); dep->ignore_mtime = d->ignore_mtime; + dep->staticpattern = 0; dep->need_2nd_expansion = 0; s = d->name; /* Hijacking the name. */ d->name = 0; @@ -917,6 +912,7 @@ pattern_search (struct file *file, int archive, struct dep *new = (struct dep *) xmalloc (sizeof (struct dep)); /* GKM FIMXE: handle '|' here too */ new->ignore_mtime = 0; + new->staticpattern = 0; new->need_2nd_expansion = 0; new->name = p = (char *) xmalloc (rule->lens[i] + fullstemlen + 1); bcopy (rule->targets[i], p, @@ -928,12 +924,12 @@ pattern_search (struct file *file, int archive, rule->lens[i] - (rule->suffixes[i] - rule->targets[i]) + 1); new->file = enter_file (new->name); new->next = file->also_make; - + /* Set precious flag. */ f = lookup_file (rule->targets[i]); if (f && f->precious) new->file->precious = 1; - + file->also_make = new; } |