summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--implicit.c15
2 files changed, 16 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 860a1f4..83e687f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-05 Boris Kolpackov <boris@codesynthesis.com>
+
+ * implicit.c (pattern_search): Initialize file variables only
+ if we need to parse a rule that requires the second expansion.
+
2009-10-03 Paul Smith <psmith@gnu.org>
* make.h: Include <alloca.h> even on systems where __GNUC__ is
diff --git a/implicit.c b/implicit.c
index 8ad6395..08e56bc 100644
--- a/implicit.c
+++ b/implicit.c
@@ -247,6 +247,9 @@ pattern_search (struct file *file, int archive,
/* Nonzero if should consider intermediate files as dependencies. */
int intermed_ok;
+ /* Nonzero if we have initialized file variables for this target. */
+ int file_vars_initialized = 0;
+
/* Nonzero if we have matched a pattern-rule target
that is not just `%'. */
int specific_rule_matched = 0;
@@ -431,10 +434,6 @@ pattern_search (struct file *file, int archive,
}
}
- /* We are going to do second expansion so initialize file variables
- for the rule. */
- initialize_file_variables (file, 0);
-
/* Try each rule once without intermediate files, then once with them. */
for (intermed_ok = 0; intermed_ok < 2; ++intermed_ok)
{
@@ -613,6 +612,14 @@ pattern_search (struct file *file, int archive,
add_dir = 1;
}
+ /* Initialize file variables if we haven't already
+ done so. */
+ if (!file_vars_initialized)
+ {
+ initialize_file_variables (file, 0);
+ file_vars_initialized = 1;
+ }
+
/* Set file variables. Note that we cannot do it once at the
beginning of the function because the stem value changes
for each rule. */