OSDN Git Service

* doc/invoke.texi: Remove Chill references.
[pf3gnuchains/gcc-fork.git] / gcc / mkdeps.c
index f83d82f..2c30063 100644 (file)
@@ -38,7 +38,6 @@ struct deps
 };
 
 static const char *munge       PARAMS ((const char *));
-static const char *base_name   PARAMS ((const char *));
 
 /* Given a filename, quote characters in that filename which are
    significant to Make.  Note that it's not possible to quote all such
@@ -107,33 +106,6 @@ munge (filename)
   return buffer;
 }
 
-/* Given a pathname, calculate the non-directory part.  This always
-   knows how to handle Unix-style pathnames, and understands VMS and
-   DOS paths on those systems.  */
-
-/* Find the base name of a (partial) pathname FNAME.
-   Returns a pointer into the string passed in.
-   Accepts Unix (/-separated) paths on all systems,
-   DOS and VMS paths on those systems.  */
-
-static const char *
-base_name (fname)
-     const char *fname;
-{
-  const char *s = fname;
-  const char *p;
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  if (ISALPHA (s[0]) && s[1] == ':') s += 2;
-  if ((p = strrchr (s, '\\'))) s = p + 1;
-#elif defined VMS
-  if ((p = strrchr (s, ':'))) s = p + 1; /* Skip device.  */
-  if ((p = strrchr (s, ']'))) s = p + 1; /* Skip directory.  */
-  if ((p = strrchr (s, '>'))) s = p + 1; /* Skip alternate (int'n'l) dir.  */
-#endif
-  if ((p = strrchr (s, '/'))) s = p + 1;
-  return s;
-}
-
 /* Public routines.  */
 
 struct deps *
@@ -141,15 +113,15 @@ deps_init ()
 {
   struct deps *d = (struct deps *) xmalloc (sizeof (struct deps));
 
-  /* Allocate space for the vectors now.  */
+  /* Allocate space for the vectors only if we need it.  */
 
-  d->targetv = (const char **) xmalloc (2 * sizeof (const char *));
-  d->depv = (const char **) xmalloc (8 * sizeof (const char *));
+  d->targetv = 0;
+  d->depv = 0;
 
   d->ntargets = 0;
-  d->targets_size = 2;
+  d->targets_size = 0;
   d->ndeps = 0;
-  d->deps_size = 8;
+  d->deps_size = 0;
 
   return d;
 }
@@ -160,14 +132,20 @@ deps_free (d)
 {
   unsigned int i;
 
-  for (i = 0; i < d->ntargets; i++)
-    free ((PTR) d->targetv[i]);
+  if (d->targetv)
+    {
+      for (i = 0; i < d->ntargets; i++)
+       free ((PTR) d->targetv[i]);
+      free (d->targetv);
+    }
 
-  for (i = 0; i < d->ndeps; i++)
-    free ((PTR) d->depv[i]);
+  if (d->depv)
+    {
+      for (i = 0; i < d->ndeps; i++)
+       free ((PTR) d->depv[i]);
+      free (d->depv);
+    }
 
-  free (d->targetv);
-  free (d->depv);
   free (d);
 }
 
@@ -181,7 +159,7 @@ deps_add_target (d, t, quote)
 {
   if (d->ntargets == d->targets_size)
     {
-      d->targets_size *= 2;
+      d->targets_size = d->targets_size * 2 + 4;
       d->targetv = (const char **) xrealloc (d->targetv,
                             d->targets_size * sizeof (const char *));
     }
@@ -202,8 +180,6 @@ deps_add_default_target (d, tgt)
      struct deps *d;
      const char *tgt;
 {
-  char *o, *suffix;
-
   /* Only if we have no targets.  */
   if (d->ntargets)
     return;
@@ -212,20 +188,20 @@ deps_add_default_target (d, tgt)
     deps_add_target (d, "-", 1);
   else
     {
-      tgt = base_name (tgt);
-      o = (char *) alloca (strlen (tgt) + 8);
-
-      strcpy (o, tgt);
-      suffix = strrchr (o, '.');
-
-#ifndef OBJECT_SUFFIX
-# define OBJECT_SUFFIX ".o"
+#ifndef TARGET_OBJECT_SUFFIX
+# define TARGET_OBJECT_SUFFIX ".o"
 #endif
+      const char *start = lbasename (tgt);
+      char *o = (char *) alloca (strlen (start) + strlen (TARGET_OBJECT_SUFFIX) + 1);
+      char *suffix;
 
-      if (suffix)
-       strcpy (suffix, OBJECT_SUFFIX);
-      else
-       strcat (o, OBJECT_SUFFIX);
+      strcpy (o, start);
+      
+      suffix = strrchr (o, '.');
+      if (!suffix)
+        suffix = o + strlen (o);
+      strcpy (suffix, TARGET_OBJECT_SUFFIX);
+      
       deps_add_target (d, o, 1);
     }
 }
@@ -239,7 +215,7 @@ deps_add_dep (d, t)
 
   if (d->ndeps == d->deps_size)
     {
-      d->deps_size *= 2;
+      d->deps_size = d->deps_size * 2 + 8;
       d->depv = (const char **)
        xrealloc (d->depv, d->deps_size * sizeof (const char *));
     }