We compute various values for vpath lookup the first time through
authorPaul Smith <psmith@gnu.org>
Sun, 18 Sep 2011 20:52:13 +0000 (20:52 +0000)
committerPaul Smith <psmith@gnu.org>
Sun, 18 Sep 2011 20:52:13 +0000 (20:52 +0000)
and store them in static variables; however one value (std_dirs)
was not being stored statically so the second time through it was
not set.
Fixes Savannah bug #32511

ChangeLog
remake.c
tests/ChangeLog
tests/scripts/features/vpath3

index 2345823..e2a9786 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-18  Paul Smith  <psmith@gnu.org>
+
+       * remake.c (library_search): STD_DIRS is computed when other
+       static vars like buflen etc. are computed, so it must be static
+       as well.  See Savannah bug #32511.
+
 2011-09-16  Paul Smith  <psmith@gnu.org>
 
        * maintMakefile (do-po-update): Apparently we have to avoid
index 669eadc..5526624 100644 (file)
--- a/remake.c
+++ b/remake.c
@@ -1538,8 +1538,7 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
   unsigned int liblen;
 
   /* Information about the earliest (in the vpath sequence) match.  */
-  unsigned int best_vpath, best_path;
-  unsigned int std_dirs = 0;
+  unsigned int best_vpath = 0, best_path = 0;
 
   char **dp;
 
@@ -1558,6 +1557,7 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
       static char *buf = NULL;
       static unsigned int buflen = 0;
       static int libdir_maxlen = -1;
+      static unsigned int std_dirs = 0;
       char *libbuf = variable_expand ("");
 
       /* Expand the pattern using LIB as a replacement.  */
index a574724..4629b18 100644 (file)
@@ -1,3 +1,9 @@
+2011-09-18  Paul Smith  <psmith@gnu.org>
+
+       * scripts/features/vpath3: Verify handling of -lfoo libraries
+       found via vpath vs. the standard directory search.
+       See Savannah bug #32511.
+
 2011-09-12  Paul Smith  <psmith@gnu.org>
 
        * scripts/functions/call: Verify that using export in a $(call ...)
index 978c5ee..c6ede28 100644 (file)
@@ -1,50 +1,35 @@
-#                                                                     -*-perl-*-
+#                                                                    -*-perl-*-
 
 $description = "Test the interaction of the -lfoo feature and vpath";
 $details = "";
 
-open(MAKEFILE,"> $makefile");
-
-# The Contents of the MAKEFILE ...
-
-print MAKEFILE "vpath %.a a1\n";
-print MAKEFILE "vpath %.so b1\n";
-print MAKEFILE "vpath % a2 b2\n";
-print MAKEFILE "vpath % b3\n";
-print MAKEFILE "all: -l1 -l2 -l3; \@echo \$^\n";
-
-# END of Contents of MAKEFILE
-
-close(MAKEFILE);
-
-mkdir("a1", 0777);
-mkdir("b1", 0777);
-mkdir("a2", 0777);
-mkdir("b2", 0777);
-mkdir("b3", 0777);
-
-@files_to_touch = ("a1${pathsep}lib1.a",
-                  "b1${pathsep}lib1.so",
-                  "a2${pathsep}lib2.a",
-                  "b2${pathsep}lib2.so",
-                  "lib3.a",
-                  "b3${pathsep}lib3.so");
+my @dirs_to_make = qw(a1 b1 a2 b2 b3);
+for my $d (@dirs_to_make) {
+    mkdir($d, 0777);
+}
 
+my @files_to_touch = ("a1${pathsep}lib1.a",
+                      "a1${pathsep}libc.a",
+                      "b1${pathsep}lib1.so",
+                      "a2${pathsep}lib2.a",
+                      "b2${pathsep}lib2.so",
+                      "lib3.a",
+                      "b3${pathsep}lib3.so");
 &touch(@files_to_touch);
 
-&run_make_with_options($makefile,"",&get_logfile);
-
-# Create the answer to what should be produced by this Makefile
-$answer = "a1${pathsep}lib1.a a2${pathsep}lib2.a lib3.a\n";
-
-if (&compare_output($answer,&get_logfile(1)))
-{
-  unlink @files_to_touch;
-  rmdir("a1");
-  rmdir("b1");
-  rmdir("a2");
-  rmdir("b2");
-  rmdir("b3");
+run_make_test('
+vpath %.h b3
+vpath %.a a1
+vpath %.so b1
+vpath % a2 b2
+vpath % b3
+all: -l1 -lc -l2 -l3; @echo $^
+',
+              '', "a1${pathsep}lib1.a a1${pathsep}libc.a a2${pathsep}lib2.a lib3.a\n");
+
+unlink(@files_to_touch);
+for my $d (@dirs_to_make) {
+    rmdir($d);
 }
 
 1;