defaults.h (CPLUSPLUS_CPP_SPEC): New macro.

* 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.

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

From-SVN: r39524
This commit is contained in:
Mark Mitchell 2001-02-07 18:58:07 +00:00 committed by Mark Mitchell
parent 7d4918a2d9
commit a937484185
6 changed files with 56 additions and 11 deletions

View 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> 2001-02-07 Zack Weinberg <zack@wolery.stanford.edu>
* cpphash.h (struct spec_nodes): Add n_true and n_false. * cpphash.h (struct spec_nodes): Add n_true and n_false.

View 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> 2001-02-06 Nathan Sidwell <nathan@codesourcery.com>
* pt.c (lookup_template_class): Make sure it's a primary * pt.c (lookup_template_class): Make sure it's a primary

View File

@ -67,6 +67,9 @@ Boston, MA 02111-1307, USA. */
%{ansi:-trigraphs -$}\ %{ansi:-trigraphs -$}\
%(cc1_options) %2 %{+e*}\ %(cc1_options) %2 %{+e*}\
%{!fsyntax-only:%(invoke_as)}}}}" %{!fsyntax-only:%(invoke_as)}}}}"
#endif
#ifdef CPLUSPLUS_CPP_SPEC
, CPLUSPLUS_CPP_SPEC
#endif #endif
}, },
{".ii", "@c++-cpp-output"}, {".ii", "@c++-cpp-output"},

View File

@ -296,5 +296,13 @@ do { \
#define BUILD_VA_LIST_TYPE(X) ((X) = ptr_type_node) #define BUILD_VA_LIST_TYPE(X) ((X) = ptr_type_node)
#endif #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 */ #endif /* GCC_DEFAULTS_H */

View File

@ -698,6 +698,10 @@ struct compiler
whose names end in this suffix. */ whose names end in this suffix. */
const char *spec; /* To use this compiler, run this spec. */ 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 /* 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_basename;
static const char *input_suffix; 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. */ /* These are variables used within do_spec and do_spec_1. */
/* Nonzero if an arg has been started and not yet terminated /* Nonzero if an arg has been started and not yet terminated
@ -4441,9 +4448,15 @@ do_spec_1 (spec, inswitch, soft_matched_part)
break; break;
case 'C': case 'C':
value = do_spec_1 (cpp_spec, 0, NULL_PTR); {
if (value != 0) const char* spec
return value; = (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; break;
case 'E': case 'E':
@ -5795,7 +5808,6 @@ main (argc, argv)
for (i = 0; (int) i < n_infiles; i++) for (i = 0; (int) i < n_infiles; i++)
{ {
register struct compiler *cp = 0;
int this_file_error = 0; int this_file_error = 0;
/* Tell do_spec what to substitute for %i. */ /* Tell do_spec what to substitute for %i. */
@ -5809,17 +5821,18 @@ main (argc, argv)
/* Figure out which compiler from the file's suffix. */ /* Figure out which compiler from the file's suffix. */
cp = lookup_compiler (infiles[i].name, input_filename_length, input_file_compiler
infiles[i].language); = lookup_compiler (infiles[i].name, input_filename_length,
infiles[i].language);
if (cp)
if (input_file_compiler)
{ {
/* Ok, we found an applicable compiler. Run its spec. */ /* 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", error ("%s: %s compiler not installed on this system",
input_filename, &cp->spec[1]); input_filename, &input_file_compiler->spec[1]);
value = do_spec (cp->spec); value = do_spec (input_file_compiler->spec);
if (value < 0) if (value < 0)
this_file_error = 1; this_file_error = 1;
} }

View 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. 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 @findex NO_BUILTIN_SIZE_TYPE
@item NO_BUILTIN_SIZE_TYPE @item NO_BUILTIN_SIZE_TYPE
If this macro is defined, the preprocessor will not define the builtin macro If this macro is defined, the preprocessor will not define the builtin macro