OSDN Git Service

* defaults.h (CPLUSPLUS_CPP_SPEC): New macro.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Feb 2001 18:58:07 +0000 (18:58 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Feb 2001 18:58:07 +0000 (18:58 +0000)
* gcc.c (struct compiler): Add cpp_spec field.
(input_file_compiler): New variable.
(do_spec_1): Allow a particular compiler to handle `%C'
specially.
(main): Store the current compiler in input_file_compiler.
* tm.texi (CPLUSPLUS_CPP_SPEC): Document.

* lang-specs.h: Use CPLUSPLUS_CPP_SPEC for the preprocessor
spec.

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

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/lang-specs.h
gcc/defaults.h
gcc/gcc.c
gcc/tm.texi

index 2f385b7..285097e 100644 (file)
@@ -1,3 +1,13 @@
+2001-02-07  Mark Mitchell  <mark@codesourcery.com>
+
+       * defaults.h (CPLUSPLUS_CPP_SPEC): New macro.
+       * gcc.c (struct compiler): Add cpp_spec field.
+       (input_file_compiler): New variable.
+       (do_spec_1): Allow a particular compiler to handle `%C' 
+       specially.
+       (main): Store the current compiler in input_file_compiler.
+       * tm.texi (CPLUSPLUS_CPP_SPEC): Document.
+       
 2001-02-07  Zack Weinberg  <zack@wolery.stanford.edu>
 
        * cpphash.h (struct spec_nodes): Add n_true and n_false.
index 29901cb..6f756a4 100644 (file)
@@ -1,3 +1,8 @@
+2001-02-07  Mark Mitchell  <mark@codesourcery.com>
+
+       * lang-specs.h: Use CPLUSPLUS_CPP_SPEC for the preprocessor 
+       spec.
+
 2001-02-06  Nathan Sidwell  <nathan@codesourcery.com>
 
        * pt.c (lookup_template_class): Make sure it's a primary
index 210255e..cfcac34 100644 (file)
@@ -68,6 +68,9 @@ Boston, MA 02111-1307, USA.  */
        %(cc1_options) %2 %{+e*}\
        %{!fsyntax-only:%(invoke_as)}}}}"
 #endif
+#ifdef CPLUSPLUS_CPP_SPEC
+     , CPLUSPLUS_CPP_SPEC
+#endif
      },
   {".ii", "@c++-cpp-output"},
   {"@c++-cpp-output",
index c1c938b..20ea99a 100644 (file)
@@ -296,5 +296,13 @@ do {                                                               \
 #define BUILD_VA_LIST_TYPE(X) ((X) = ptr_type_node)
 #endif
 
+/* By default, the preprocessor should be invoked the same way in C++
+   as in C.  */
+#ifndef CPLUSPLUS_CPP_SPEC
+#ifdef CPP_SPEC
+#define CPLUSPLUS_CPP_SPEC CPP_SPEC
+#endif
+#endif
+
 #endif  /* GCC_DEFAULTS_H */
 
index 9a7a941..51213c1 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -698,6 +698,10 @@ struct compiler
                                   whose names end in this suffix.  */
 
   const char *spec;            /* To use this compiler, run this spec.  */
+
+  const char *cpp_spec;         /* If non-NULL, substitute this spec
+                                  for `%C', rather than the usual
+                                  cpp_spec.  */
 };
 
 /* Pointer to a vector of `struct compiler' that gives the spec for
@@ -3870,6 +3874,9 @@ static int suffixed_basename_length;
 static const char *input_basename;
 static const char *input_suffix;
 
+/* The compiler used to process the current input file.  */
+static struct compiler *input_file_compiler;
+
 /* These are variables used within do_spec and do_spec_1.  */
 
 /* Nonzero if an arg has been started and not yet terminated
@@ -4441,9 +4448,15 @@ do_spec_1 (spec, inswitch, soft_matched_part)
            break;
 
          case 'C':
-           value = do_spec_1 (cpp_spec, 0, NULL_PTR);
-           if (value != 0)
-             return value;
+           {
+             const char* spec 
+               = (input_file_compiler->cpp_spec 
+                  ? input_file_compiler->cpp_spec 
+                  : cpp_spec);
+             value = do_spec_1 (spec, 0, NULL_PTR);
+             if (value != 0)
+               return value;
+           }
            break;
 
          case 'E':
@@ -5795,7 +5808,6 @@ main (argc, argv)
 
   for (i = 0; (int) i < n_infiles; i++)
     {
-      register struct compiler *cp = 0;
       int this_file_error = 0;
 
       /* Tell do_spec what to substitute for %i.  */
@@ -5809,17 +5821,18 @@ main (argc, argv)
 
       /* Figure out which compiler from the file's suffix.  */
 
-      cp = lookup_compiler (infiles[i].name, input_filename_length,
-                           infiles[i].language);
-
-      if (cp)
+      input_file_compiler
+       = lookup_compiler (infiles[i].name, input_filename_length,
+                          infiles[i].language);
+      
+      if (input_file_compiler)
        {
          /* Ok, we found an applicable compiler.  Run its spec.  */
 
-         if (cp->spec[0] == '#')
+         if (input_file_compiler->spec[0] == '#')
            error ("%s: %s compiler not installed on this system",
-                  input_filename, &cp->spec[1]);
-         value = do_spec (cp->spec);
+                  input_filename, &input_file_compiler->spec[1]);
+         value = do_spec (input_file_compiler->spec);
          if (value < 0)
            this_file_error = 1;
        }
index b8af796..d6557b8 100644 (file)
@@ -109,6 +109,12 @@ give to GCC into options for GCC to pass to the CPP.
 
 Do not define this macro if it does not need to do anything.
 
+@findex CPLUSPLUS_CPP_SPEC
+@item CPLUSPLUS_CPP_SPEC
+This macro is just like @code{CPP_SPEC}, but is used for C++, rather
+than C.  If you do not define this macro, then the value of
+@code{CPP_SPEC} (if any) will be used instead.
+
 @findex NO_BUILTIN_SIZE_TYPE
 @item NO_BUILTIN_SIZE_TYPE
 If this macro is defined, the preprocessor will not define the builtin macro