* ldmain.c (set_scripts_dir): Check . and <ld bin dir>/../lib for
authorDavid MacKenzie <djm@cygnus>
Tue, 13 Jul 1993 00:54:45 +0000 (00:54 +0000)
committerDavid MacKenzie <djm@cygnus>
Tue, 13 Jul 1993 00:54:45 +0000 (00:54 +0000)
ldscripts, as well as <ld bin dir> and SCRIPTDIR.

ld/ChangeLog
ld/ldmain.c

index 7445fe316c52b13f06cbc7907368eafdb5041d60..46dadca229390e679a60bd3e8d95887897c38ba5 100644 (file)
@@ -1,5 +1,8 @@
 Mon Jul 12 11:45:48 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
 
+       * ldmain.c (set_scripts_dir): Check . and <ld bin dir>/../lib for
+       ldscripts, as well as <ld bin dir> and SCRIPTDIR.
+
        * ldlang.c (lang_process): Use sizeof instead of magic constant.
 
        * ldmain.c (get_emulation, check_for_scripts_dir,
index 111edea5a0f372ae9b388a5c7c583c253ce49625..9239c4a948684d40cf6aeac0d144e43caa422964 100644 (file)
@@ -338,36 +338,52 @@ check_for_scripts_dir (dir)
   sprintf (buf, "%s/ldscripts", dir);
 
   res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
+  free (buf);
   if (res)
-    {
-      buf[dirlen] = '\0';
-      ldfile_add_library_path (buf);
-    }
-  else
-    free (buf);
-
+    ldfile_add_library_path (dir);
   return res;
 }
 
 /* Set the default directory for finding script files.
-   Libraries will be searched for here too, but that's ok.  */
+   Libraries will be searched for here too, but that's ok.
+   We look for the "ldscripts" directory in:
+
+   the curent dir
+   SCRIPTDIR (passed from Makefile)
+   the dir where this program is
+   the dir where this program is/../lib  */
 
 static void
 set_scripts_dir ()
 {
-  char *end;
+  char *end, *dir;
+  size_t dirlen;
+
+  if (check_for_scripts_dir ("."))
+    return;                    /* Newest version, most likely.  */
 
   if (check_for_scripts_dir (SCRIPTDIR))
-    return;                    /* Good--we've been installed.  */
+    return;                    /* We've been installed normally.  */
 
   /* Look for "ldscripts" in the dir where our binary is.  */
   end = strrchr (program_name, '/');
   if (!end)
-    return;                    /* Hope for the best.  */
+    return;
+
+  /* Make a copy of program_name in dir.  */
+  dirlen = end - program_name;
+  dir = (char *) ldmalloc (dirlen + 8);        /* Leave room for later "/../lib".  */
+  strncpy (dir, program_name, dirlen);
+  dir[dirlen] = '\0';
+  if (check_for_scripts_dir (dir))
+    return;                    /* Don't free dir.  */
+
+  /* Look for "ldscripts" in <the dir where our binary is>/../lib.  */
+  strcpy (dir + dirlen, "/../lib");
+  if (check_for_scripts_dir (dir))
+    return;
 
-  *end = '\0';
-  check_for_scripts_dir (program_name);
-  *end = '/';
+  free (dir);                  /* Well, we tried.  */
 }
 
 void