Delay caching of the file name in eval_makefile() until after all the

expansions and searches are complete. This fixes an assertion in a
situation where the MAKEFILES variable contains a file path that
contains tilde.
This commit is contained in:
Boris Kolpackov 2011-04-29 15:27:39 +00:00
parent b34438bee8
commit 15a79d723d
2 changed files with 14 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2011-04-29 Boris Kolpackov <boris@codesynthesis.com>
* read.c (eval_makefile): Delay caching of the file name until after
all the expansions and searches.
2011-04-17 David A. Wheeler <dwheeler@dwheeler.com> 2011-04-17 David A. Wheeler <dwheeler@dwheeler.com>
* doc/make.texi (Reading Makefiles): Document "!=". * doc/make.texi (Reading Makefiles): Document "!=".

15
read.c
View file

@ -324,8 +324,7 @@ eval_makefile (const char *filename, int flags)
char *expanded = 0; char *expanded = 0;
int makefile_errno; int makefile_errno;
filename = strcache_add (filename); ebuf.floc.filenm = filename; /* Use the original file name. */
ebuf.floc.filenm = filename;
ebuf.floc.lineno = 1; ebuf.floc.lineno = 1;
if (ISDB (DB_VERBOSE)) if (ISDB (DB_VERBOSE))
@ -369,13 +368,17 @@ eval_makefile (const char *filename, int flags)
"/", filename); "/", filename);
ebuf.fp = fopen (included, "r"); ebuf.fp = fopen (included, "r");
if (ebuf.fp) if (ebuf.fp)
{ {
filename = strcache_add (included); filename = included;
break; break;
} }
} }
} }
/* Now we have the final name for this makefile. Enter it into
the cache. */
filename = strcache_add (filename);
/* Add FILENAME to the chain of read makefiles. */ /* Add FILENAME to the chain of read makefiles. */
deps = alloc_dep (); deps = alloc_dep ();
deps->next = read_makefiles; deps->next = read_makefiles;