summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2005-10-26 16:06:30 +0000
committerPaul Smith <psmith@gnu.org>2005-10-26 16:06:30 +0000
commit82103b1a49394a7063f8cddfc89f759ddf847de9 (patch)
tree09c74c9e3caf9d6ed43e60053fb878010258d137
parent11095a90f120545c915c92b8ebf48f04723d1837 (diff)
downloadgunmake-82103b1a49394a7063f8cddfc89f759ddf847de9.tar.gz
Fix a crash I introduced last-minute.
Try to avoid extraneous rebuilds of template files.
-rw-r--r--ChangeLog6
-rw-r--r--implicit.c38
-rw-r--r--maintMakefile3
-rw-r--r--read.c12
-rw-r--r--tests/scripts/misc/general45
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 <psmith@gnu.org>
+
+ * 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 <psmith@gnu.org>
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;