diff options
author | Boris Kolpackov <boris@kolpackov.net> | 2009-10-05 14:40:18 +0000 |
---|---|---|
committer | Boris Kolpackov <boris@kolpackov.net> | 2009-10-05 14:40:18 +0000 |
commit | 174e910a1d73f6b12338b6bd0a0727085b041f22 (patch) | |
tree | 827783310224c81157dbd8970905471a7919949b | |
parent | acbdc33e1c82aaf9d229042d1955ea7a11c8bd45 (diff) | |
download | gunmake-174e910a1d73f6b12338b6bd0a0727085b041f22.tar.gz |
Performance improvements
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | implicit.c | 15 |
2 files changed, 16 insertions, 4 deletions
@@ -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 @@ -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. */ |