OSDN Git Service

* doc/invoke.texi: Remove Chill references.
[pf3gnuchains/gcc-fork.git] / gcc / mkdeps.c
index 8d3e0bf..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
@@ -73,8 +72,7 @@ munge (filename)
          break;
 
        case '$':
-         /* '$' is quoted by doubling it. This can mishandle things
-            like "$(" but there's no easy fix.  */
+         /* '$' is quoted by doubling it.  */
          len++;
          break;
        }
@@ -108,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 *
@@ -142,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;
 }
@@ -161,66 +132,77 @@ 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);
 }
 
+/* Adds a target T.  We make a copy, so it need not be a permanent
+   string.  QUOTE is true if the string should be quoted.  */
 void
-deps_add_target (d, t)
+deps_add_target (d, t, quote)
      struct deps *d;
      const char *t;
+     int quote;
 {
-  t = munge (t);  /* Also makes permanent copy.  */
-
   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 *));
     }
 
+  if (quote)
+    t = munge (t);  /* Also makes permanent copy.  */
+  else
+    t = xstrdup (t);
+
   d->targetv[d->ntargets++] = t;
 }
 
 /* Sets the default target if none has been given already.  An empty
-   string as the default target in interpreted as stdin.  */
+   string as the default target in interpreted as stdin.  The string
+   is quoted for MAKE.  */
 void
 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;
 
   if (tgt[0] == '\0')
-    deps_add_target (d, "-");
+    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);
-      deps_add_target (d, o);
+      strcpy (o, start);
+      
+      suffix = strrchr (o, '.');
+      if (!suffix)
+        suffix = o + strlen (o);
+      strcpy (suffix, TARGET_OBJECT_SUFFIX);
+      
+      deps_add_target (d, o, 1);
     }
 }
 
@@ -233,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 *));
     }
@@ -293,7 +275,7 @@ deps_write (d, fp, colmax)
 }
   
 void
-deps_dummy_targets (d, fp)
+deps_phony_targets (d, fp)
      const struct deps *d;
      FILE *fp;
 {
@@ -301,6 +283,7 @@ deps_dummy_targets (d, fp)
 
   for (i = 1; i < d->ndeps; i++)
     {
+      putc ('\n', fp);
       fputs (d->depv[i], fp);
       putc (':', fp);
       putc ('\n', fp);