OSDN Git Service

* gcc.c (execute): For -### don't quote arguments that
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 May 2010 06:50:24 +0000 (06:50 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:04:51 +0000 (14:04 +0900)
contain just alphanumerics and _/-. characters.
* doc/invoke.texi: Document that change for -###.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159255 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/doc/invoke.texi
gcc/gcc.c

index 07aad7b..40eef02 100644 (file)
@@ -1,5 +1,9 @@
 2010-05-11  Jakub Jelinek  <jakub@redhat.com>
 
+       * gcc.c (execute): For -### don't quote arguments that
+       contain just alphanumerics and _/-. characters.
+       * doc/invoke.texi: Document that change for -###.
+
        PR debug/44023
        * df-problems.c (struct dead_debug): Add to_rescan field.
        (dead_debug_init): Clear to_rescan field.
index 33e4612..98f97cc 100644 (file)
@@ -1172,9 +1172,9 @@ program and of the preprocessor and the compiler proper.
 
 @item -###
 @opindex ###
-Like @option{-v} except the commands are not executed and all command
-arguments are quoted.  This is useful for shell scripts to capture the
-driver-generated command lines.
+Like @option{-v} except the commands are not executed and arguments
+are quoted unless they contain only alphanumeric characters or @code{./-_}.
+This is useful for shell scripts to capture the driver-generated command lines.
 
 @item -pipe
 @opindex pipe
index e2644c4..6455437 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3020,14 +3020,23 @@ execute (void)
              for (j = commands[i].argv; *j; j++)
                {
                  const char *p;
-                 fprintf (stderr, " \"");
                  for (p = *j; *p; ++p)
+                   if (!ISALNUM ((unsigned char) *p)
+                       && *p != '_' && *p != '/' && *p != '-' && *p != '.')
+                     break;
+                 if (*p || !*j)
                    {
-                     if (*p == '"' || *p == '\\' || *p == '$')
-                       fputc ('\\', stderr);
-                     fputc (*p, stderr);
+                     fprintf (stderr, " \"");
+                     for (p = *j; *p; ++p)
+                       {
+                         if (*p == '"' || *p == '\\' || *p == '$')
+                           fputc ('\\', stderr);
+                         fputc (*p, stderr);
+                       }
+                     fputc ('"', stderr);
                    }
-                 fputc ('"', stderr);
+                 else
+                   fprintf (stderr, " %s", *j);
                }
            }
          else