summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2007-06-19 04:47:58 +0000
committerPaul Smith <psmith@gnu.org>2007-06-19 04:47:58 +0000
commitc649f3c3fbc36ab0f6074639bc3da84456ac93af (patch)
treea2681e0b310d732452b899b6091d7d5afe81dbfe
parenta28aa5ea92491770cfed99cbbc727410bb3a1053 (diff)
downloadmake-c649f3c3fbc36ab0f6074639bc3da84456ac93af.tar.gz
Fix a core dump when reading_file is 0 (20033).
Fix some manual typos (20018).
-rw-r--r--ChangeLog10
-rw-r--r--doc/make.texi2
-rw-r--r--expand.c13
-rw-r--r--read.c6
4 files changed, 23 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 85756904..3a309175 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-06-13 Paul Smith <psmith@gnu.org>
+
+ * doc/make.texi (Reading Makefiles): "Expansion of deferred" ->
+ "Expansion of a deferred"
+ Fixes Savannah bug #20018.
+
+ * expand.c (variable_expand_for_file): Preserve the value of
+ reading_file rather than setting it to 0 at the end.
+ Fixes Savannah bug #20033.
+
2007-05-11 Paul Smith <psmith@gnu.org>
* job.c (new_job): Add debug info to specify where make found the
diff --git a/doc/make.texi b/doc/make.texi
index baf92afd..3928db7f 100644
--- a/doc/make.texi
+++ b/doc/make.texi
@@ -1541,7 +1541,7 @@ constructs within the makefile. We say that expansion is
@code{make} will expand any variables or functions in that section of a
construct as the makefile is parsed. We say that expansion is
@dfn{deferred} if expansion is not performed immediately. Expansion of
-deferred construct is not performed until either the construct appears
+a deferred construct is not performed until either the construct appears
later in an immediate context, or until the second phase.
You may not be familiar with some of these constructs yet. You can
diff --git a/expand.c b/expand.c
index cc8ede41..3d0229c5 100644
--- a/expand.c
+++ b/expand.c
@@ -460,20 +460,25 @@ char *
variable_expand_for_file (const char *line, struct file *file)
{
char *result;
- struct variable_set_list *save;
+ struct variable_set_list *savev;
+ const struct floc *savef;
if (file == 0)
return variable_expand (line);
- save = current_variable_set_list;
+ savev = current_variable_set_list;
current_variable_set_list = file->variables;
+
+ savef = reading_file;
if (file->cmds && file->cmds->fileinfo.filenm)
reading_file = &file->cmds->fileinfo;
else
reading_file = 0;
+
result = variable_expand (line);
- current_variable_set_list = save;
- reading_file = 0;
+
+ current_variable_set_list = savev;
+ reading_file = savef;
return result;
}
diff --git a/read.c b/read.c
index e50a76c9..6f13e40b 100644
--- a/read.c
+++ b/read.c
@@ -463,7 +463,7 @@ eval (struct ebuffer *ebuf, int set_default)
#define record_waiting_files() \
do \
- { \
+ { \
if (filenames != 0) \
{ \
fi.lineno = tgts_started; \
@@ -570,7 +570,7 @@ eval (struct ebuffer *ebuf, int set_default)
remove_comments (collapsed);
/* Compare a word, both length and contents. */
-#define word1eq(s) (wlen == sizeof(s)-1 && strneq (s, p, sizeof(s)-1))
+#define word1eq(s) (wlen == sizeof(s)-1 && strneq (s, p, sizeof(s)-1))
p = collapsed;
while (isspace ((unsigned char)*p))
++p;
@@ -608,7 +608,7 @@ eval (struct ebuffer *ebuf, int set_default)
if (!in_ignored_define)
{
- int i = conditional_line (p, wlen, fstart);
+ int i = conditional_line (p, wlen, fstart);
if (i != -2)
{
if (i == -1)