summaryrefslogtreecommitdiff
path: root/remake.c
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2009-06-07 17:40:06 +0000
committerPaul Smith <psmith@gnu.org>2009-06-07 17:40:06 +0000
commit0b30c8d9cef18f55e2425e32ffc1552af650a1be (patch)
tree40d5d983e80d10d04bee39765bf904c7b83d0f53 /remake.c
parent668af4698040c6524f93165300e0f9a84312ea66 (diff)
downloadgunmake-0b30c8d9cef18f55e2425e32ffc1552af650a1be.tar.gz
- Add a new test suite for LIBPATTERNS
- Fix Savannah bug #21198 - Fix Savannah bug #21823 - Fix Savannah bug #22010
Diffstat (limited to 'remake.c')
-rw-r--r--remake.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/remake.c b/remake.c
index ab8dd80..0d940d6 100644
--- a/remake.c
+++ b/remake.c
@@ -1465,28 +1465,23 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
0
};
- static char *libpatterns = NULL;
-
- const char *libname = lib+2; /* Name without the '-l'. */
+ const char *file = 0;
+ char *libpatterns;
FILE_TIMESTAMP mtime;
/* Loop variables for the libpatterns value. */
char *p;
const char *p2;
unsigned int len;
+ unsigned int liblen;
char **dp;
- /* If we don't have libpatterns, get it. */
- if (!libpatterns)
- {
- int save = warn_undefined_variables_flag;
- warn_undefined_variables_flag = 0;
+ libpatterns = xstrdup (variable_expand ("$(.LIBPATTERNS)"));
- libpatterns = xstrdup (variable_expand ("$(strip $(.LIBPATTERNS))"));
-
- warn_undefined_variables_flag = save;
- }
+ /* Skip the '-l'. */
+ lib += 2;
+ liblen = strlen (lib);
/* Loop through all the patterns in .LIBPATTERNS, and search on each one. */
p2 = libpatterns;
@@ -1497,7 +1492,7 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
static int libdir_maxlen = -1;
char *libbuf = variable_expand ("");
- /* Expand the pattern using LIBNAME as a replacement. */
+ /* Expand the pattern using LIB as a replacement. */
{
char c = p[len];
char *p3, *p4;
@@ -1506,16 +1501,13 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
p3 = find_percent (p);
if (!p3)
{
- /* Give a warning if there is no pattern, then remove the
- pattern so it's ignored next time. */
+ /* Give a warning if there is no pattern. */
error (NILF, _(".LIBPATTERNS element `%s' is not a pattern"), p);
- for (; len; --len, ++p)
- *p = ' ';
- *p = c;
+ p[len] = c;
continue;
}
p4 = variable_buffer_output (libbuf, p, p3-p);
- p4 = variable_buffer_output (p4, libname, strlen (libname));
+ p4 = variable_buffer_output (p4, lib, liblen);
p4 = variable_buffer_output (p4, p3+1, len - (p3-p));
p[len] = c;
}
@@ -1526,15 +1518,16 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
{
if (mtime_ptr != 0)
*mtime_ptr = mtime;
- return strcache_add (libbuf);
+ file = strcache_add (libbuf);
+ goto fini;
}
/* Now try VPATH search on that. */
{
- const char *file = vpath_search (libbuf, mtime_ptr);
+ file = vpath_search (libbuf, mtime_ptr);
if (file)
- return file;
+ goto fini;
}
/* Now try the standard set of directories. */
@@ -1564,10 +1557,13 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
{
if (mtime_ptr != 0)
*mtime_ptr = mtime;
- return strcache_add (buf);
+ file = strcache_add (buf);
+ goto fini;
}
}
}
- return 0;
+ fini:
+ free (libpatterns);
+ return file;
}