Assorted code cleanup and fixes for hppa. Re-enable elf32-hppa as
[deliverable/binutils-gdb.git] / gas / depend.c
index fcb150040473a0cbb39ad12a92df45f8b6424736..f17c7c8e3a06fe7621a32012321652c43a00230f 100644 (file)
@@ -1,5 +1,5 @@
 /* depend.c - Handle dependency tracking.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -35,6 +35,7 @@ static struct dependency *dep_chain = NULL;
 /* Current column in output file.  */
 static int column = 0;
 
+static int quote_string_for_make PARAMS ((FILE *, char *));
 static void wrap_output PARAMS ((FILE *, char *, int));
 
 /* Number of columns allowable.  */
@@ -75,6 +76,70 @@ register_dependency (filename)
   dep_chain = dep;
 }
 
+/* Quote a file name the way `make' wants it, and print it to FILE.
+   If FILE is NULL, do no printing, but return the length of the
+   quoted string.
+
+   This code is taken from gcc with only minor changes.  */
+
+static int
+quote_string_for_make (file, src)
+     FILE *file;
+     char *src;
+{
+  char *p = src;
+  int i = 0;
+  for (;;)
+    {
+      char c = *p++;
+      switch (c)
+       {
+       case '\0':
+       case ' ':
+       case '\t':
+         {
+           /* GNU make uses a weird quoting scheme for white space.
+              A space or tab preceded by 2N+1 backslashes represents
+              N backslashes followed by space; a space or tab
+              preceded by 2N backslashes represents N backslashes at
+              the end of a file name; and backslashes in other
+              contexts should not be doubled.  */
+           char *q;
+           for (q = p - 1; src < q && q[-1] == '\\';  q--)
+             {
+               if (file)
+                 putc ('\\', file);
+               i++;
+             }
+         }
+         if (!c)
+           return i;
+         if (file)
+           putc ('\\', file);
+         i++;
+         goto ordinary_char;
+         
+       case '$':
+         if (file)
+           putc (c, file);
+         i++;
+         /* Fall through.  This can mishandle things like "$(" but
+            there's no easy fix.  */
+       default:
+       ordinary_char:
+         /* This can mishandle characters in the string "\0\n%*?[\\~";
+            exactly which chars are mishandled depends on the `make' version.
+            We know of no portable solution for this;
+            even GNU make 3.76.1 doesn't solve the problem entirely.
+            (Also, '\0' is mishandled due to our calling conventions.)  */
+         if (file)
+           putc (c, file);
+         i++;
+         break;
+       }
+    }
+}
+
 /* Append some output to the file, keeping track of columns and doing
    wrapping as necessary.  */
 
@@ -84,7 +149,7 @@ wrap_output (f, string, spacer)
      char *string;
      int spacer;
 {
-  int len = strlen (string);
+  int len = quote_string_for_make (NULL, string);
 
   if (len == 0)
     return;
@@ -103,7 +168,7 @@ wrap_output (f, string, spacer)
       ++column;
     }
 
-  fputs (string, f);
+  quote_string_for_make (f, string);
   column += len;
 
   if (spacer == ':')
@@ -127,7 +192,7 @@ print_dependencies ()
   f = fopen (dep_file, "w");
   if (f == NULL)
     {
-      as_warn ("Can't open `%s' for writing", dep_file);
+      as_warn (_("Can't open `%s' for writing"), dep_file);
       return;
     }
 
@@ -139,5 +204,5 @@ print_dependencies ()
   putc ('\n', f);
 
   if (fclose (f))
-    as_warn ("Can't close %s", dep_file);
+    as_warn (_("Can't close `%s'"), dep_file);
 }
This page took 0.040574 seconds and 4 git commands to generate.