summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--implicit.c14
2 files changed, 18 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 03416b9..0440f3e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-03-22 Boris Kolpackov <boris@kolpackov.net>
+
+ * implicit.c (pattern_search): Call set_file_variables only
+ if we have prerequisites that need second expansion. Fixes
+ Savannah bug #16140.
+
2006-03-19 Paul D. Smith <psmith@gnu.org>
* remake.c (update_file): Add alloca(0) to clean up alloca'd
diff --git a/implicit.c b/implicit.c
index a5d3700..878d154 100644
--- a/implicit.c
+++ b/implicit.c
@@ -442,6 +442,7 @@ pattern_search (struct file *file, int archive,
struct file *f;
unsigned int failed = 0;
int check_lastslash;
+ int file_variables_set = 0;
rule = tryrules[i];
@@ -479,9 +480,9 @@ pattern_search (struct file *file, int archive,
strncpy (stem_str, stem, stemlen);
stem_str[stemlen] = '\0';
- /* Temporary assign STEM to file->stem and set file variables. */
+ /* Temporary assign STEM to file->stem (needed to set file
+ variables below). */
file->stem = stem_str;
- set_file_variables (file);
/* Try each dependency; see if it "exists". */
@@ -550,6 +551,15 @@ pattern_search (struct file *file, int archive,
depname[len] = '\0';
}
+ /* Set file variables. Note that we cannot do it once
+ at the beginning of the function because of the stem
+ value. */
+ if (!file_variables_set)
+ {
+ set_file_variables (file);
+ file_variables_set = 1;
+ }
+
p2 = variable_expand_for_file (depname, file);
}
else