summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog20
-rw-r--r--gcc/ch/ChangeLog4
-rw-r--r--gcc/ch/lang-specs.h26
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/lang-specs.h102
-rw-r--r--gcc/f/ChangeLog4
-rw-r--r--gcc/f/lang-specs.h88
-rw-r--r--gcc/gcc.c370
-rw-r--r--gcc/java/ChangeLog4
-rw-r--r--gcc/java/lang-specs.h24
-rw-r--r--gcc/objc/lang-specs.h86
11 files changed, 244 insertions, 488 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1cb16340243..b4dff549003 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,23 @@
+2000-07-13 Zack Weinberg <zack@wolery.cumb.org>
+
+ * gcc.c (do_spec_1): Add new %B operator.
+ (set_input): Prepare for %B.
+
+ (link_command_spec): Move up with the other tm.h-
+ overrideable specs. Factor out the portion conditional on
+ LINK_LIBGCC_SPECIAL into a new spec, %(link_libgcc).
+ (struct compiler): Just have a single spec string. All users
+ updated.
+ (default_compilers): Remove unnecessary braces.
+ (static_specs): Update.
+
+ (trad_capable_cpp, cpp_options, cc1_options, asm_options): New
+ named specs.
+ (C and assembly specs): Use the new named specs, as appropriate.
+
+ * objc/lang-specs.h: Use the new named specs.
+ Remove unnecessary braces.
+
2000-07-12 Zack Weinberg <zack@wolery.cumb.org>
* gcc.c (execute): If a subprocess gets a fatal signal, report
diff --git a/gcc/ch/ChangeLog b/gcc/ch/ChangeLog
index 59ab9342336..339f48dfc13 100644
--- a/gcc/ch/ChangeLog
+++ b/gcc/ch/ChangeLog
@@ -1,3 +1,7 @@
+2000-07-13 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Use the new named specs. Remove unnecessary braces.
+
2000-06-13 Jakub Jelinek <jakub@redhat.com>
* decl.c (init_decl_processing): Set TYPE_USER_ALIGN.
diff --git a/gcc/ch/lang-specs.h b/gcc/ch/lang-specs.h
index 9d286a04df0..3813e5a94fa 100644
--- a/gcc/ch/lang-specs.h
+++ b/gcc/ch/lang-specs.h
@@ -21,24 +21,10 @@ Boston, MA 02111-1307, USA. */
/* This is the contribution to the `default_compilers' array in gcc.c for
CHILL. */
- {".ch", {"@chill"}},
- {".chi", {"@chill"}},
+ {".ch", "@chill"},
+ {".chi", "@chill"},
{"@chill",
- {"tradcpp -lang-chill %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU CHILL does not support -C without using -E}}\
- %{!no-gcc:-D__GNUCHILL__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:-D__OPTIMIZE__} \
- %{!undef:%{!ansi:%p} %P} \
- %{fshow-column} %{fno-show-column}\
- %{g*} %{W*} %{w} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!E:%g.i}%{E:%W{o*}} \n",
- "%{!E:cc1chill %g.i %1 \
- %{!Q:-quiet} -dumpbase %b.ch %{d*} %{m*} %{a}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{itu} \
- %{v:-version} %{pg:-p} %{p} %{f*} %{I*} \
- %{aux-info*} %{Qn:-fno-ident} %X \
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y \
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}"}},
+ "tradcpp -lang-chill %{!no-gcc:-D__GNUCHILL__=%v1} %(cpp_options)\
+ %{!M:%{!MM:%{!E:%{!pipe:%g.i} |\n\
+ cc1chill %{!pipe:%g.i} %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}\n"},
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 923a1229a5d..49f9a02790c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2000-07-13 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Use the new named specs. Remove unnecessary braces.
+
2000-07-12 Mark Mitchell <mark@codesourcery.com>
* Makefile.in ($(PARSE_H)): Depend directly on parse.y.
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index 804a079d574..04025a523fa 100644
--- a/gcc/cp/lang-specs.h
+++ b/gcc/cp/lang-specs.h
@@ -22,84 +22,34 @@ Boston, MA 02111-1307, USA. */
/* This is the contribution to the `default_compilers' array in gcc.c for
g++. */
- {".cc", {"@c++"}},
- {".cp", {"@c++"}},
- {".cxx", {"@c++"}},
- {".cpp", {"@c++"}},
- {".c++", {"@c++"}},
- {".C", {"@c++"}},
+ {".cc", "@c++"},
+ {".cp", "@c++"},
+ {".cxx", "@c++"},
+ {".cpp", "@c++"},
+ {".c++", "@c++"},
+ {".C", "@c++"},
{"@c++",
#if USE_CPPLIB
- {
- "%{E|M|MM:cpp -lang-c++ %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C++ does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUG__=%v1 -D__GNUC_MINOR__=%v2\
- -D__GNUC_PATCHLEVEL__=%v3} -D__cplusplus\
- %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\
- %{!fno-exceptions:-D__EXCEPTIONS}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} %{trigraphs}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}}\n}\
- %{!E:%{!M:%{!MM:cc1plus %i %1 %2\
- -lang-c++ %{nostdinc*} %{C} %{A*} %{I*} %{P} %{$} %I\
- %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUG__=%v1\
- -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- -D__cplusplus\
- %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\
- %{!fno-exceptions:-D__EXCEPTIONS}\
- %{fnew-abi:-D__GXX_ABI_VERSION=100}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{trigraphs}\
- %{!Q:-quiet} -dumpbase %b.cc %{d*} %{m*} %{a}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi}\
- %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %{v:-version} %{pg:-p} %{p}\
- %{f*} %{+e*} %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}}|\n\
- %{!S:%{!fsyntax-only:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}}"}},
+ "%{E|M|MM:cpp -lang-c++ %{!no-gcc:-D__GNUG__=%v1}\
+ %{fnew-abi:-D__GXX_ABI_VERSION=100}\
+ %{ansi:-trigraphs -$ -D__STRICT_ANSI__} %(cpp_options)}\
+ %{!E:%{!M:%{!MM:cc1plus -lang-c++ %{!no-gcc:-D__GNUG__=%v1}\
+ %{fnew-abi:-D__GXX_ABI_VERSION=100}\
+ %{ansi:-trigraphs -$ -D__STRICT_ANSI__}\
+ %(cpp_options) %(cc1_options) %{+e*}\
+ %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}"
#else /* ! USE_CPPLIB */
- {"cpp -lang-c++ %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C++ does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUG__=%v1 -D__GNUC_MINOR__=%v2\
- -D__GNUC_PATCHLEVEL__=%v3} -D__cplusplus\
- %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\
- %{!fno-exceptions:-D__EXCEPTIONS}\
- %{fnew-abi:-D__GXX_ABI_VERSION=100}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} %{trigraphs}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshow-column} %{fno-show-column}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!M:%{!MM:%{!E:%{!pipe:%g.ii}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:cc1plus %{!pipe:%g.ii} %1 %2\
- %{!Q:-quiet} -dumpbase %b.cc %{d*} %{m*} %{a}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi}\
- %{v:-version} %{pg:-p} %{p}\
- %{f*} %{+e*} %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}}|\n\
- %{!S:%{!fsyntax-only:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}}"}},
+ "cpp -lang-c++ %{!no-gcc:-D__GNUG__=%v1}\
+ %{fnew-abi:-D__GXX_ABI_VERSION=100}\
+ %{ansi:-trigraphs -$ -D__STRICT_ANSI__} %(cpp_options)\
+ %{!M:%{!MM:%{!E:%{!pipe:%g.ii} |\n\
+ cc1plus %{!pipe:%g.ii} %(cc1_options) %{+e*} %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}\n"
#endif /* ! USE_CPPLIB */
- {".ii", {"@c++-cpp-output"}},
+ },
+ {".ii", "@c++-cpp-output"},
{"@c++-cpp-output",
- {"%{!M:%{!MM:%{!E:cc1plus %i %1 %2 %{!Q:-quiet} %{d*} %{m*} %{a}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi}\
- %{v:-version} %{pg:-p} %{p} -fpreprocessed\
- %{f*} %{+e*} %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
+ "%{!M:%{!MM:%{!E:\
+ cc1plus -fpreprocessed %{!pipe:%g.ii} %(cc1_options) %{+e*}\
+ %{!S:-o %{|!pipe:%g.s} |\n as %(asm_options) %{!pipe:%g.s} %A }}}}"},
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index 0a7faf69dcd..a33696c8c2d 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,7 @@
+2000-07-13 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Use the new named specs. Remove unnecessary braces.
+
2000-07-02 Toon Moene <toon@moene.indiv.nluug.nl>
* version.c: Bump version number.
diff --git a/gcc/f/lang-specs.h b/gcc/f/lang-specs.h
index bca41d3370c..5d1852ec975 100644
--- a/gcc/f/lang-specs.h
+++ b/gcc/f/lang-specs.h
@@ -24,77 +24,29 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* This is the contribution to the `default_compilers' array in gcc.c for
g77. */
- {".F", {"@f77-cpp-input"}},
- {".fpp", {"@f77-cpp-input"}},
- {".FPP", {"@f77-cpp-input"}},
+ {".F", "@f77-cpp-input"},
+ {".fpp", "@f77-cpp-input"},
+ {".FPP", "@f77-cpp-input"},
{"@f77-cpp-input",
- /* For f77 we want -traditional to avoid errors with, for
- instance, mismatched '. Also, we avoid unpleasant surprises
- with substitution of names not prefixed by `_' by using %P
- rather than %p (although this isn't consistent with SGI and
- Sun f77, at least) so you test `__unix' rather than `unix'.
- -D_LANGUAGE_FORTRAN is used by some compilers like SGI and
- might as well be in there. */
- {"tradcpp -lang-fortran %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%P} \
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} \
- %{ffast-math:-D__FAST_MATH__}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!M:%{!MM:%{!E:%{!pipe:%g.i}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:f771 %{!pipe:%g.i} %1 %(f771) \
- %{!Q:-quiet} -dumpbase %b.F %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} \
- %{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
- {".r", {"@ratfor"}},
+ "tradcpp -lang-fortran %(cpp_options) %{!M:%{!MM:%{!E:%{!pipe:%g.f |\n\
+ f771 %{!pipe:%g.f} %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}}\n"},
+ {".r", "@ratfor"},
{"@ratfor",
- {"ratfor %{C} %{v}\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{!E:%{!pipe:-o %g.f}}%{E:%W{o*}} %i |\n",
- "%{!E:f771 %{!pipe:%g.f} %1 %(f771) \
- %{!Q:-quiet} -dumpbase %b.r %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} \
- %{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}"}},
- {".f", {"@f77"}},
- {".for", {"@f77"}},
- {".FOR", {"@f77"}},
+ "%{C:%{!E:%eGNU C does not support -C without using -E}}\
+ ratfor %{C} %{v} %i %{E:%W{o*}} %{!E: %{!pipe:-o %g.f} |\n\
+ f771 %{!pipe:%g.f} %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}\n"},
+ {".f", "@f77"},
+ {".for", "@f77"},
+ {".FOR", "@f77"},
{"@f77",
- {"%{!M:%{!MM:%{!E:f771 %i %1 %(f771) \
- %{!Q:-quiet} -dumpbase %b.f %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*}\
- %{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
+ "%{!M:%{!MM:%{!E:f771 %i %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}\n"},
+ /* XXX This is perverse and should not be necessary. */
{"@f77-version",
- {"tradcpp -lang-fortran %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I \
- %{C:%{!E:%eGNU C does not support -C without using -E}} \
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG} \
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} \
- %{ansi:-trigraphs -$ -D__STRICT_ANSI__} \
- %{!undef:%P} -D_LANGUAGE_FORTRAN %{trigraphs} \
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} -traditional \
- %{ffast-math:-D__FAST_MATH__}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z \
- /dev/null /dev/null \n\
- f771 -fnull-version %1 %(f771) \
+ "tradcpp -lang-fortran %(cpp_options) /dev/null /dev/null \n\
+ f771 -fnull-version %1 \
%{!Q:-quiet} -dumpbase g77-version.f %{d*} %{m*} %{a*} \
%{g*} %{O*} %{W*} %{w} %{pedantic*} \
-version -fversion %{f*} %{I*} -o %g.s /dev/null \n\
@@ -106,4 +58,4 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
%{!nostdlib:%{!nodefaultlibs:%G %L %G}} \
%{!A:%{!nostdlib:%{!nostartfiles:%E}}} \
%{T*} \n\
- %g \n"}},
+ %g \n"},
diff --git a/gcc/gcc.c b/gcc/gcc.c
index c2e2a472e8e..e8efb17e3ab 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -267,6 +267,7 @@ or with constant text in a single argument.
%b substitute the basename of the input file being processed.
This is the substring up to (and not including) the last period
and not including the directory.
+ %B same as %b, but include the file suffix (text after the last period).
%gSUFFIX
substitute a file name that has suffix SUFFIX and is chosen
once per compilation, and mark the argument a la %d. To reduce
@@ -496,6 +497,33 @@ proper position among the other output files. */
#define LINKER_NAME "collect2"
#endif
+/* Here is the spec for running the linker, after compiling all files. */
+
+/* -u* was put back because both BSD and SysV seem to support it. */
+/* %{static:} simply prevents an error message if the target machine
+ doesn't handle -static. */
+/* We want %{T*} after %{L*} and %D so that it can be used to specify linker
+ scripts which exist in user specified directories, or in standard
+ directories. */
+#ifndef LINK_COMMAND_SPEC
+#define LINK_COMMAND_SPEC "\
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
+ %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}\
+ %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
+ %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%G %L %G}}\
+ %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}"
+#endif
+
+#ifndef LINK_LIBGCC_SPEC
+# ifdef LINK_LIBGCC_SPECIAL
+/* Don't generate -L options for startfile prefix list. */
+# define LINK_LIBGCC_SPEC ""
+# else
+/* Do generate them. */
+# define LINK_LIBGCC_SPEC "%D"
+# endif
+#endif
+
static const char *cpp_spec = CPP_SPEC;
static const char *cpp_predefines = CPP_PREDEFINES;
static const char *cc1_spec = CC1_SPEC;
@@ -510,6 +538,43 @@ static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *switches_need_spaces = SWITCHES_NEED_SPACES;
static const char *linker_name_spec = LINKER_NAME;
+static const char *link_command_spec = LINK_COMMAND_SPEC;
+static const char *link_libgcc_spec = LINK_LIBGCC_SPEC;
+
+/* Standard options to cpp, cc1, and as, to reduce duplication in specs.
+ There should be no need to override these in target dependent files,
+ but we need to copy them to the specs file so that newer versions
+ of the GCC driver can correctly drive older tool chains with the
+ appropriate -B options. */
+
+static const char *trad_capable_cpp =
+"%{traditional|ftraditional|traditional-cpp:trad}cpp";
+
+static const char *cpp_options =
+"%{C:%{!E:%eGNU C does not support -C without using -E}}\
+ %{std*} %{nostdinc*}\
+ %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
+ %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
+ %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
+ %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
+ %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
+ %{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
+ %{fshow-column} %{fno-show-column}\
+ %{fleading-underscore} %{fno-leading-underscore}\
+ %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z %i\
+ %{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}}";
+
+static const char *cc1_options =
+"%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
+ %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\
+ %{g*} %{O*} %{W*} %{w} %{pedantic*} %{std*} %{ansi}\
+ %{traditional} %{v:-version} %{pg:-p} %{p} %{f*}\
+ %{aux-info*} %{Qn:-fno-ident} %{--help:--help}\
+ %{S:%W{o*}%{!o*:-o %b.s}}";
+
+static const char *asm_options =
+"%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
/* Some compilers have limits on line lengths, and the multilib_select
and/or multilib_matches strings can be very long, so we build them at
@@ -583,8 +648,7 @@ struct compiler
const char *suffix; /* Use this compiler for input files
whose names end in this suffix. */
- const char *spec[4]; /* To use this compiler, concatenate these
- specs and pass to do_spec. */
+ const char *spec; /* To use this compiler, run this spec. */
};
/* Pointer to a vector of `struct compiler' that gives the spec for
@@ -610,152 +674,54 @@ static struct compiler default_compilers[] =
were not present when we built the driver, we will hit these copies
and be given a more meaningful error than "file not used since
linking is not done". */
- {".m", {"#Objective-C"}},
- {".cc", {"#C++"}}, {".cxx", {"#C++"}}, {".cpp", {"#C++"}},
- {".c++", {"#C++"}}, {".C", {"#C++"}},
- {".ads", {"#Ada"}}, {".adb", {"#Ada"}}, {".ada", {"#Ada"}},
- {".f", {"#Fortran"}}, {".for", {"#Fortran"}}, {".F", {"#Fortran"}},
- {".fpp", {"#Fortran"}},
- {".p", {"#Pascal"}}, {".pas", {"#Pascal"}},
+ {".m", "#Objective-C"},
+ {".cc", "#C++"}, {".cxx", "#C++"}, {".cpp", "#C++"},
+ {".c++", "#C++"}, {".C", "#C++"},
+ {".ads", "#Ada"}, {".adb", "#Ada"}, {".ada", "#Ada"},
+ {".f", "#Fortran"}, {".for", "#Fortran"}, {".F", "#Fortran"},
+ {".fpp", "#Fortran"}, {".r", "#Ratfor"},
+ {".p", "#Pascal"}, {".pas", "#Pascal"},
+ {".ch", "#Chill"}, {".chi", "#Chill"},
+ {".java", "#Java"}, {".class", "#Java"},
+ {".zip", "#Java"}, {".jar", "#Java"},
/* Next come the entries for C. */
- {".c", {"@c"}},
+ {".c", "@c"},
{"@c",
- {
#if USE_CPPLIB
- "%{E|M|MM:cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
- %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{traditional} %{ftraditional:-traditional}\
- %{traditional-cpp:-traditional}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{fshow-column} %{fno-show-column}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}}\n}\
- %{!E:%{!M:%{!MM:cc1 %i %1 \
- %{std*} %{nostdinc*} %{A*} %{I*} %I\
- %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
- %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{H} %C %{D*} %{U*} %{i*} %Z\
- %{ftraditional:-traditional}\
- %{traditional-cpp:-traditional}\
- %{traditional} %{v:-version} %{pg:-p} %{p} %{f*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{--help:--help}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"
+ "%{E|M|MM:cpp -lang-c %{ansi:-std=c89} %(cpp_options)}\
+ %{!E:%{!M:%{!MM:cc1 -lang-c %{ansi:-std=c89} %(cpp_options)\
+ %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}"
#else /* ! USE_CPPLIB */
- "%{traditional|ftraditional|traditional-cpp:trad}cpp -lang-c \
- %{ansi:-std=c89} %{std*} %{nostdinc*}\
- %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshow-column} %{fno-show-column}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!M:%{!MM:%{!E:%{!pipe:%g.i}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:cc1 %{!pipe:%g.i} %1 \
- %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{std*}\
- %{traditional} %{v:-version} %{pg:-p} %{p} %{f*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{--help:--help} \
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"
+ "%(trad_capable_cpp) -lang-c %{ansi:-std=c89} %(cpp_options) \
+ %{!M:%{!MM:%{!E:%{!pipe:%g.i} |\n\
+ cc1 %{!pipe:%g.i} %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}\n"
#endif /* ! USE_CPPLIB */
- }},
+ },
{"-",
- {"%{E:%{traditional|ftraditional|traditional-cpp:trad}cpp \
- -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
- %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshow-column} %{fno-show-column}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %W{o*}}\
- %{!E:%e-E required when input is from standard input}"}},
- {".h", {"@c-header"}},
+ "%{!E:%e-E required when input is from standard input}\
+ %(trad_capable_cpp) -lang-c %{ansi:-std=c89} %(cpp_options)"},
+ {".h", "@c-header"},
{"@c-header",
- {"%{!E:%eCompilation of header file requested} \
- %{traditional|ftraditional|traditional-cpp:trad}cpp \
- %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%{!std=*:%p}%{std=gnu*:%p} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshow-column} %{fno-show-column}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %W{o*}"}},
- {".i", {"@cpp-output"}},
+ "%{!E:%eCompilation of header file requested} \
+ %(trad_capable_cpp) -lang-c %{ansi:-std=c89} %(cpp-options)"},
+ {".i", "@cpp-output"},
{"@cpp-output",
- {"%{!M:%{!MM:%{!E:cc1 %i %1 %{!Q:-quiet} %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{std*}\
- %{traditional} %{v:-version} %{pg:-p} %{p} %{f*}\
- %{aux-info*} %{Qn:-fno-ident} -fpreprocessed\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
- {".s", {"@assembler"}},
+ "%{!M:%{!MM:%{!E:\
+ cc1 %i %(cc1_options) %{!S:|\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}"},
+ {".s", "@assembler"},
{"@assembler",
- {"%{!M:%{!MM:%{!E:%{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %i %A\n }}}}"}},
- {".S", {"@assembler-with-cpp"}},
+ "%{!M:%{!MM:%{!E:%{!S:as %(asm_options) %i %A }}}}"},
+ {".S", "@assembler-with-cpp"},
{"@assembler-with-cpp",
- {"%{traditional|ftraditional|traditional-cpp:trad}cpp -lang-asm \
- %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG} %{trigraphs}\
- -$ %{!undef:%p %P} \
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
- %{fshow-column} %{fno-show-column}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!M:%{!MM:%{!E:%{!pipe:%g.s}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:%{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
+ "%(trad_capable_cpp) -lang-asm %(cpp_options) \
+ %{!M:%{!MM:%{!E:%{!S: %{!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}"},
#include "specs.h"
/* Mark end of table */
- {0, {0}}
+ {0, 0}
};
/* Number of elements in default_compilers, not counting the terminator. */
@@ -763,47 +729,6 @@ static struct compiler default_compilers[] =
static int n_default_compilers
= (sizeof default_compilers / sizeof (struct compiler)) - 1;
-/* Here is the spec for running the linker, after compiling all files. */
-
-/* -u* was put back because both BSD and SysV seem to support it. */
-/* %{static:} simply prevents an error message if the target machine
- doesn't handle -static. */
-/* We want %{T*} after %{L*} and %D so that it can be used to specify linker
- scripts which exist in user specified directories, or in standard
- directories. */
-#ifdef LINK_COMMAND_SPEC
-/* Provide option to override link_command_spec from machine specific
- configuration files. */
-static const char *link_command_spec =
- LINK_COMMAND_SPEC;
-#else
-#ifdef LINK_LIBGCC_SPECIAL
-/* Don't generate -L options. */
-static const char *link_command_spec = "\
-%{!fsyntax-only: \
- %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
- %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
- %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
- %{static:} %{L*} %o\
- %{!nostdlib:%{!nodefaultlibs:%G %L %G}}\
- %{!A:%{!nostdlib:%{!nostartfiles:%E}}}\
- %{T*}\
- \n }}}}}}";
-#else
-/* Use -L. */
-static const char *link_command_spec = "\
-%{!fsyntax-only: \
- %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
- %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
- %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
- %{static:} %{L*} %D %o\
- %{!nostdlib:%{!nodefaultlibs:%G %L %G}}\
- %{!A:%{!nostdlib:%{!nostartfiles:%E}}}\
- %{T*}\
- \n }}}}}}";
-#endif
-#endif
-
/* A vector of options to give to the linker.
These options are accumulated by %x,
and substituted into the linker command with %X. */
@@ -1137,8 +1062,12 @@ static struct spec_list static_specs[] =
{
INIT_STATIC_SPEC ("asm", &asm_spec),
INIT_STATIC_SPEC ("asm_final", &asm_final_spec),
+ INIT_STATIC_SPEC ("asm_options", &asm_options),
INIT_STATIC_SPEC ("cpp", &cpp_spec),
+ INIT_STATIC_SPEC ("cpp_options", &cpp_options),
+ INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp),
INIT_STATIC_SPEC ("cc1", &cc1_spec),
+ INIT_STATIC_SPEC ("cc1_options", &cc1_options),
INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec),
INIT_STATIC_SPEC ("endfile", &endfile_spec),
INIT_STATIC_SPEC ("link", &link_spec),
@@ -1156,6 +1085,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("multilib_matches", &multilib_matches),
INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions),
INIT_STATIC_SPEC ("linker", &linker_name_spec),
+ INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec),
};
#ifdef EXTRA_SPECS /* additional specs needed */
@@ -1732,9 +1662,7 @@ read_specs (filename, main_p)
(n_compilers + 2) * sizeof (struct compiler)));
compilers[n_compilers].suffix = suffix;
- memset (compilers[n_compilers].spec, 0,
- sizeof compilers[n_compilers].spec);
- compilers[n_compilers].spec[0] = spec;
+ compilers[n_compilers].spec = spec;
n_compilers++;
memset (&compilers[n_compilers], 0, sizeof compilers[n_compilers]);
}
@@ -3716,6 +3644,7 @@ const char *input_filename;
static int input_file_number;
size_t input_filename_length;
static int basename_length;
+static int suffixed_basename_length;
static const char *input_basename;
static const char *input_suffix;
@@ -3900,6 +3829,11 @@ do_spec_1 (spec, inswitch, soft_matched_part)
arg_going = 1;
break;
+ case 'B':
+ obstack_grow (&obstack, input_basename, suffixed_basename_length);
+ arg_going = 1;
+ break;
+
case 'd':
delete_this_arg = 2;
break;
@@ -5118,6 +5052,7 @@ set_input (filename)
/* Find a suffix starting with the last period,
and set basename_length to exclude that suffix. */
basename_length = strlen (input_basename);
+ suffixed_basename_length = basename_length;
p = input_basename + basename_length;
while (p != input_basename && *p != '.') --p;
if (*p == '.' && p != input_basename)
@@ -5150,8 +5085,7 @@ main (argc, argv)
int argc;
char **argv;
{
- register size_t i;
- size_t j;
+ size_t i;
int value;
int linker_was_run = 0;
char *explicit_link_files;
@@ -5550,32 +5484,11 @@ main (argc, argv)
if (cp)
{
/* Ok, we found an applicable compiler. Run its spec. */
- /* First say how much of input_filename to substitute for %b */
- int len;
- if (cp->spec[0][0] == '#')
+ if (cp->spec[0] == '#')
error ("%s: %s compiler not installed on this system",
- input_filename, &cp->spec[0][1]);
-
- len = 0;
- for (j = 0; j < sizeof cp->spec / sizeof cp->spec[0]; j++)
- if (cp->spec[j])
- len += strlen (cp->spec[j]);
-
- {
- char *p1 = (char *) xmalloc (len + 1);
-
- len = 0;
- for (j = 0; j < sizeof cp->spec / sizeof cp->spec[0]; j++)
- if (cp->spec[j])
- {
- strcpy (p1 + len, cp->spec[j]);
- len += strlen (cp->spec[j]);
- }
-
- value = do_spec (p1);
- free (p1);
- }
+ input_filename, &cp->spec[1]);
+ value = do_spec (cp->spec);
if (value < 0)
this_file_error = 1;
}
@@ -5726,30 +5639,17 @@ lookup_compiler (name, length, language)
}
#endif
-
if (cp >= compilers)
{
- if (cp->spec[0][0] == '@')
- {
- struct compiler *new;
-
- /* An alias entry maps a suffix to a language.
- Search for the language; pass 0 for NAME and LENGTH
- to avoid infinite recursion if language not found.
- Construct the new compiler spec. */
- language = cp->spec[0] + 1;
- new = (struct compiler *) xmalloc (sizeof (struct compiler));
- new->suffix = cp->suffix;
- memcpy (new->spec,
- lookup_compiler (NULL_PTR, 0, language)->spec,
- sizeof new->spec);
- return new;
- }
-
- /* A non-alias entry: return it. */
- return cp;
+ if (cp->spec[0] != '@')
+ /* A non-alias entry: return it. */
+ return cp;
+
+ /* An alias entry maps a suffix to a language.
+ Search for the language; pass 0 for NAME and LENGTH
+ to avoid infinite recursion if language not found. */
+ return lookup_compiler (NULL_PTR, 0, cp->spec + 1);
}
-
return 0;
}
@@ -5881,17 +5781,13 @@ validate_all_switches ()
register char c;
struct spec_list *spec;
- for (comp = compilers; comp->spec[0]; comp++)
+ for (comp = compilers; comp->spec; comp++)
{
- size_t i;
- for (i = 0; i < sizeof comp->spec / sizeof comp->spec[0] && comp->spec[i]; i++)
- {
- p = comp->spec[i];
- while ((c = *p++))
- if (c == '%' && *p == '{')
- /* We have a switch spec. */
- validate_switches (p + 1);
- }
+ p = comp->spec;
+ while ((c = *p++))
+ if (c == '%' && *p == '{')
+ /* We have a switch spec. */
+ validate_switches (p + 1);
}
/* Look through the linked list of specs read from the specs file. */
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 621fbcc8ca0..0edfafbceff 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,7 @@
+2000-07-13 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Use the new named specs. Remove unnecessary braces.
+
2000-07-12 Mark Mitchell <mark@codesourcery.com>
* parse-scan.c: Remove.
diff --git a/gcc/java/lang-specs.h b/gcc/java/lang-specs.h
index 019fca6373c..c03301852dc 100644
--- a/gcc/java/lang-specs.h
+++ b/gcc/java/lang-specs.h
@@ -25,20 +25,12 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
/* This is the contribution to the `default_compilers' array in gcc.c for
Java. */
- {".java", {"@java"} },
- {".class", {"@java"} },
- {".zip", {"@java"} },
- {".jar", {"@java"} },
+ {".java", "@java" },
+ {".class", "@java" },
+ {".zip", "@java" },
+ {".jar", "@java" },
{"@java",
- {"%{!E:jc1 %i %1 %(jc1) %{!Q:-quiet} %{d*} %{m*} %{a}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi}\
- %{traditional} %{v:-version} %{pg:-p} %{p}\
- %{f*} %{+e*} %{aux-info*} %{Qn:-fno-ident}\
- %{I*}\
- %{MD} %{MMD} %{M} %{MM}\
- %{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}"}},
+ "%{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\
+ %{!E:jc1 %i %(cc1_options) %{+e*} %{MD} %{MMD} %{M} %{MM}\
+ %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}"},
diff --git a/gcc/objc/lang-specs.h b/gcc/objc/lang-specs.h
index 992e973953a..58de4596838 100644
--- a/gcc/objc/lang-specs.h
+++ b/gcc/objc/lang-specs.h
@@ -21,79 +21,23 @@ Boston, MA 02111-1307, USA. */
/* This is the contribution to the `default_compilers' array in gcc.c for
objc. */
- {".m", {"@objective-c"}},
+ {".m", "@objective-c"},
{"@objective-c",
#if USE_CPPLIB
- {"%{E|M|MM:cpp -lang-objc %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- -D__OBJC__ %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
- -D__GNUC_PATCHLEVEL__=%v3} %{ansi:-trigraphs -D__STRICT_ANSI__}\
- %{!undef:%{!ansi:%p} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{traditional} %{ftraditional:-traditional}\
- %{traditional-cpp:-traditional}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{fshow-column} %{fno-show-column}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}}\n}",
- "%{!M:%{!MM:%{!E:cc1obj %i %1 \
- %{nostdinc*} %{A*} %{I*} %{P} %I\
- %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- -D__OBJC__ %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
- -D__GNUC_PATCHLEVEL__=%v3}\
- %{!undef:%{!ansi:%p} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{!Q:-quiet} -dumpbase %b.m %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi} \
- %{traditional} %{v:-version} %{pg:-p} %{p} %{f*} \
- -lang-objc %{gen-decls} \
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}
+ "%{E|M|MM:cpp -lang-objc %{ansi:-std=c89} %(cpp_options)}\
+ %{!E:%{!M:%{!MM:cc1obj -lang-objc %(cpp_options) %(cc1_options)\
+ %{gen-decls} %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}"
#else /* ! USE_CPPLIB */
- {"%{traditional|ftraditional|traditional-cpp:trad}cpp -lang-objc \
- %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 \
- -D__GNUC_PATCHLEVEL__=%v3}\
- %{ansi:-trigraphs -D__STRICT_ANSI__}\
- %{!undef:%{!ansi:%p} %P} %{trigraphs}\
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
- %{ffast-math:-D__FAST_MATH__}\
- %{fleading-underscore} %{fno-leading-underscore}\
- %{fshow-column} %{fno-show-column}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!M:%{!MM:%{!E:%{!pipe:%g.mi}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:cc1obj %{!pipe:%g.mi} %1 \
- %{!Q:-quiet} -dumpbase %b.m %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi} \
- %{traditional} %{v:-version} %{pg:-p} %{p} %{f*} \
- -lang-objc %{gen-decls} \
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}
+ "%(trad_capable_cpp) -lang-objc %{ansi:-std=c89} %(cpp_options)\
+ %{!M:%{!MM:%{!E:%{!pipe:%g.mi} |\n\
+ cc1obj -lang-objc %{!pipe:%g.mi} %(cc1_options) %{gen-decls}\
+ %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}\n"
#endif /* ! USE_CPPLIB */
- },
- {".mi", {"@objc-cpp-output"}},
+ },
+ {".mi", "@objc-cpp-output"},
{"@objc-cpp-output",
- {"%{!M:%{!MM:%{!E:cc1obj %i %1 \
- %{!Q:-quiet} -dumpbase %b.m %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi} \
- %{traditional} %{v:-version} %{pg:-p} %{p} %{f*} \
- -lang-objc %{gen-decls} \
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n",
- "%{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
+ "%{!M:%{!MM:%{!E:cc1obj -lang-objc %i %(cc1_options) %{gen-decls}\
+ %{!S:-o %{|!pipe:%g.s} |\n\
+ as %(asm_options) %{!pipe:%g.s} %A }}}}"},
OpenPOWER on IntegriCloud