From e298e580764861ff1cf22f3d39539e9ed5640311 Mon Sep 17 00:00:00 2001 From: psmith Date: Sun, 18 Sep 2011 20:52:13 +0000 Subject: [PATCH] We compute various values for vpath lookup the first time through 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 | 6 +++ remake.c | 4 +- tests/ChangeLog | 6 +++ tests/scripts/features/vpath3 | 85 ++++++++++++++++++------------------------- 4 files changed, 49 insertions(+), 52 deletions(-) rewrite tests/scripts/features/vpath3 (83%) diff --git a/ChangeLog b/ChangeLog index 2345823..e2a9786 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-09-18 Paul Smith + + * 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 * maintMakefile (do-po-update): Apparently we have to avoid diff --git a/remake.c b/remake.c index 669eadc..5526624 100644 --- 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. */ diff --git a/tests/ChangeLog b/tests/ChangeLog index a574724..4629b18 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2011-09-18 Paul Smith + + * 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 * scripts/functions/call: Verify that using export in a $(call ...) diff --git a/tests/scripts/features/vpath3 b/tests/scripts/features/vpath3 dissimilarity index 83% index 978c5ee..c6ede28 100644 --- a/tests/scripts/features/vpath3 +++ b/tests/scripts/features/vpath3 @@ -1,50 +1,35 @@ -# -*-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"); - -&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"); -} - -1; +# -*-perl-*- + +$description = "Test the interaction of the -lfoo feature and vpath"; +$details = ""; + +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_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; -- 2.11.4.GIT