diff options
author | Paul Smith <psmith@gnu.org> | 2009-06-14 06:08:11 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2009-06-14 06:08:11 +0000 |
commit | be6b22a2837a7a5b12e4d3c0b845266247cfd3ad (patch) | |
tree | 84b80ce3e626d1b42bba8ec493653ca18f7d10c3 | |
parent | dceb954f9c0a948b8d53796fd78b7cfae9148b1b (diff) | |
download | gunmake-be6b22a2837a7a5b12e4d3c0b845266247cfd3ad.tar.gz |
- Fix Savannah bug #13529
-rw-r--r-- | remake.c | 13 | ||||
-rw-r--r-- | tests/ChangeLog | 6 | ||||
-rw-r--r-- | tests/scripts/features/vpath | 19 |
3 files changed, 38 insertions, 0 deletions
@@ -373,6 +373,7 @@ update_file_1 (struct file *file, unsigned int depth) FILE_TIMESTAMP this_mtime; int noexist, must_make, deps_changed; int dep_status = 0; + struct file *ofile; struct dep *d, *ad; struct dep amake; int running = 0; @@ -423,6 +424,10 @@ update_file_1 (struct file *file, unsigned int depth) /* Notice recursive update of the same file. */ start_updating (file); + /* We might change file if we find a different one via vpath; + remember this one to turn off updating. */ + ofile = file; + /* Looking at the file's modtime beforehand allows the possibility that its name may be changed by a VPATH search, and thus it may not need an implicit rule. If this were not done, the file @@ -608,6 +613,7 @@ update_file_1 (struct file *file, unsigned int depth) } finish_updating (file); + finish_updating (ofile); DBF (DB_VERBOSE, _("Finished prerequisites of target file `%s'.\n")); @@ -943,12 +949,17 @@ static int check_dep (struct file *file, unsigned int depth, FILE_TIMESTAMP this_mtime, int *must_make_ptr) { + struct file *ofile; struct dep *d; int dep_status = 0; ++depth; start_updating (file); + /* We might change file if we find a different one via vpath; + remember this one to turn off updating. */ + ofile = file; + if (file->phony || !file->intermediate) { /* If this is a non-intermediate file, update it and record whether it @@ -1054,6 +1065,8 @@ check_dep (struct file *file, unsigned int depth, } finish_updating (file); + finish_updating (ofile); + return dep_status; } diff --git a/tests/ChangeLog b/tests/ChangeLog index 7b414c5..d51290f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2009-06-14 Paul Smith <psmith@gnu.org> + + * scripts/features/vpath: Verify we don't get bogus circular + dependency warnings if we choose a different file via vpath during + update. Savannah bug #13529. + 2009-06-13 Paul Smith <psmith@gnu.org> * scripts/variables/MAKEFILES: Verify that MAKEFILES included diff --git a/tests/scripts/features/vpath b/tests/scripts/features/vpath index 101a25d..a3aebd9 100644 --- a/tests/scripts/features/vpath +++ b/tests/scripts/features/vpath @@ -1,3 +1,5 @@ +# -*-perl-*- + $description = "The following test creates a makefile to test the \n" ."vpath directive which allows you to specify a search \n" ."path for a particular class of filenames, those that\n" @@ -59,4 +61,21 @@ if (&compare_output($answer,&get_logfile(1))) unlink @files_to_touch; } +# TEST 2: after vpath lookup ensure we don't get incorrect circular dependency +# warnings due to change of struct file ptr. Savannah bug #13529. + +mkdir('vpath-d', 0777); + +run_make_test(q! +vpath %.te vpath-d/ +.SECONDARY: +default: vpath-d/a vpath-d/b +vpath-d/a: fail.te +vpath-d/b : fail.te +vpath-d/fail.te: +!, + '', "#MAKE#: Nothing to be done for `default'.\n"); + +rmdir('vpath-d'); + 1; |