From 82103b1a49394a7063f8cddfc89f759ddf847de9 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 26 Oct 2005 16:06:30 +0000 Subject: [PATCH] Fix a crash I introduced last-minute. Try to avoid extraneous rebuilds of template files. --- ChangeLog | 6 ++++++ implicit.c | 38 ++++++++++++++++++-------------------- maintMakefile | 3 ++- read.c | 12 ++++++++---- tests/scripts/misc/general4 | 5 ++--- 5 files changed, 36 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1aadcd6..7565fb0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-10-26 Paul Smith + + * read.c (record_files): Don't set deps flags if there are no deps. + * maintMakefile: We only need to build the templates when we are + creating a distribution, so don't do it for "all". + 2005-10-24 Paul D. Smith Make secondary expansion optional: its enabled by declaring the diff --git a/implicit.c b/implicit.c index 57510d7..ad873f1 100644 --- a/implicit.c +++ b/implicit.c @@ -484,13 +484,13 @@ pattern_search (struct file *file, int archive, unsigned int order_only = 0; /* Set if '|' was seen. */ /* In an ideal world we would take the dependency line, - substitute the stem, re-expand the whole line and - chop it into individual prerequisites. Unfortunately - this won't work because of the "check_lastslash" twist. - Instead, we will have to go word by word, taking $()'s - into account, for each word we will substitute the stem, - re-expand, chop it up, and, if check_lastslash != 0, - add the directory part to each resulting prerequisite. */ + substitute the stem, re-expand the whole line and chop it + into individual prerequisites. Unfortunately this won't work + because of the "check_lastslash" twist. Instead, we will + have to go word by word, taking $()'s into account, for each + word we will substitute the stem, re-expand, chop it up, and, + if check_lastslash != 0, add the directory part to each + resulting prerequisite. */ p = get_next_word (dep->name, &len); @@ -555,8 +555,8 @@ pattern_search (struct file *file, int archive, 1), sizeof (struct idep)); /* @@ It would be nice to teach parse_file_seq or - multi_glob to add prefix. This would save us - some reallocations. */ + multi_glob to add prefix. This would save us some + reallocations. */ if (order_only || add_dir || had_stem) { @@ -612,10 +612,9 @@ pattern_search (struct file *file, int archive, if (file_impossible_p (name)) { - /* If this dependency has already been ruled - "impossible", then the rule fails and don't - bother trying it on the second pass either - since we know that will fail too. */ + /* If this dependency has already been ruled "impossible", + then the rule fails and don't bother trying it on the + second pass either since we know that will fail too. */ DBS (DB_IMPLICIT, (d->had_stem ? _("Rejecting impossible implicit prerequisite `%s'.\n") @@ -632,10 +631,9 @@ pattern_search (struct file *file, int archive, ? _("Trying implicit prerequisite `%s'.\n") : _("Trying rule prerequisite `%s'.\n"), name)); - /* If this prerequisite also happened to be explicitly - mentioned for FILE skip all the test below since it - it has to be built anyway, no matter which implicit - rule we choose. */ + /* If this prerequisite also happened to be explicitly mentioned + for FILE skip all the test below since it it has to be built + anyway, no matter which implicit rule we choose. */ for (expl_d = file->deps; expl_d != 0; expl_d = expl_d->next) if (strcmp (dep_name (expl_d), name) == 0) break; @@ -675,9 +673,9 @@ pattern_search (struct file *file, int archive, } - /* We could not find the file in any place we should look. - Try to make this dependency as an intermediate file, - but only on the second pass. */ + /* We could not find the file in any place we should look. Try + to make this dependency as an intermediate file, but only on + the second pass. */ if (intermed_ok) { diff --git a/maintMakefile b/maintMakefile index b679eb4..708e718 100644 --- a/maintMakefile +++ b/maintMakefile @@ -13,7 +13,8 @@ TEMPLATES = README README.DOS README.W32 README.OS2 \ config.ami configh.dos config.h.W32 config.h-vms MTEMPLATES = Makefile.DOS SMakefile -all-am: $(TEMPLATES) $(MTEMPLATES) build.sh.in +# These are built as a side-effect of the dist rule +#all-am: $(TEMPLATES) $(MTEMPLATES) build.sh.in # General rule for turning a .template into a regular file. # diff --git a/read.c b/read.c index bad07eb..9fbfd35 100644 --- a/read.c +++ b/read.c @@ -1969,7 +1969,8 @@ record_files (struct nameseq *filenames, char *pattern, char *pattern_percent, the last one. It is not safe for the same deps to go in more than one place in the database. */ this = nextf != 0 ? copy_dep_chain (deps) : deps; - this->need_2nd_expansion = second_expansion; + this->need_2nd_expansion = (second_expansion + && strchr (this->name, '$')); } if (!two_colon) @@ -2129,9 +2130,12 @@ record_files (struct nameseq *filenames, char *pattern, char *pattern_percent, { targets[target_idx] = 0; target_percents[target_idx] = 0; - deps->need_2nd_expansion = second_expansion; - /* We set this to indicate we've not yet parsed the prereq string. */ - deps->staticpattern = 1; + if (deps) + { + deps->need_2nd_expansion = second_expansion; + /* We set this to indicate the prereq string hasn't been parsed. */ + deps->staticpattern = 1; + } create_pattern_rule (targets, target_percents, two_colon, deps, cmds, 1); free ((char *) target_percents); } diff --git a/tests/scripts/misc/general4 b/tests/scripts/misc/general4 index 0b5c94a..bce4a30 100644 --- a/tests/scripts/misc/general4 +++ b/tests/scripts/misc/general4 @@ -48,10 +48,9 @@ run_make_test(q! %.foo : baz$$bar ; @echo 'done $<' %.foo : bar$$baz ; @echo 'done $<' test.foo: -fox: baz -.DEFAULT baz$$bar bar$$baz: ; @echo '$@' +baz$$bar bar$$baz: ; @echo '$@' !, '', - 'done bar'); + "baz\$bar\ndone baz\$bar"); 1; -- 2.7.4