common.opt (-assemble, [...]): New.

* common.opt (-assemble, -compile, -coverage, -debug, -dump,
	-dump=, -dumpbase, -dumpdir, -entry, -entry=, -extra-warnings,
	-for-assembler, -for-assembler=, -for-linker, -for-linker=,
	-force-link, -force-link=, -language, -language=,
	-library-directory, -library-directory=, -no-canonical-prefixes,
	-no-standard-libraries, -no-warnings, -optimize, -output,
	-output=, -pass-exit-codes, -pedantic, -pedantic-errors, -pie,
	-pipe, -prefix, -prefix=, -preprocess, -print-file-name,
	-print-file-name=, -print-libgcc-file-name,
	-print-multi-directory, -print-multi-lib,
	-print-multi-os-directory, -print-prog-name, -print-prog-name=,
	-print-search-dirs, -print-sysroot, -print-sysroot-headers-suffix,
	-profile, -save-temps, -shared, -specs, -specs=, -static,
	-symbolic, -time, -verbose, -param=, -sysroot, coverage, e, u,
	symbolic): New.
	(fhelp, fhelp=, ftarget-help, fversion): Make into aliases.
	* gcc.c (A Short Introduction to Adding a Command-Line Option):
	Remove comment.
	(cc1_options): Correct specs for passing down --help,
	--target-help and --help=*.  Add spec for passing down --version.
	(struct option_map, option_map, target_option_translations,
	translate_options): Remove.
	(driver_handle_option): Handle OPT__version, OPT__help, OPT__help_
	and OPT__target_help instead of OPT_fversion, OPT_fhelp,
	OPT_fhelp_ and OPT_ftarget_help.
	(process_command): Don't call translate_options.  Call
	decode_cmdline_options_to_array before checking for
	-no-canonical-prefixes using decoded options.
	* opts-common.c (tm.h): Update comment on #include.
	(find_opt): Allow abbreviations of long options.
	(struct option_map, option_map): New.
	(decode_cmdline_option): Use them instead of hardcoding -Wno, -fno
	and -mno handling.
	(target_option_translations): New.
	(decode_cmdline_options_to_array): Handle
	TARGET_OPTION_TRANSLATE_TABLE in driver.
	* opts.c (common_handle_option): Don't handle OPT_fhelp,
	OPT_ftarget_help, OPT_fhelp_ or OPT_fversion.

ada:
	* gcc-interface/lang.opt (-all-warnings, -include-barrier,
	-include-directory, -include-directory=, -no-standard-includes,
	-no-standard-libraries): New.

c-family:
	* c.opt (-all-warnings, -ansi, -assert, -assert=, -comments,
	-comments-in-macros, -define-macro, -define-macro=, -dependencies,
	-dump, -dump=, -imacros, -imacros=, -include, -include=,
	-include-barrier, -include-directory, -include-directory=,
	-include-directory-after, -include-directory-after=,
	-include-prefix, -include-prefix=, -include-with-prefix,
	-include-with-prefix=, -include-with-prefix-after,
	-include-with-prefix-after=, -include-with-prefix-before,
	-include-with-prefix-before=, -no-integrated-cpp,
	-no-line-commands, -no-standard-includes, -no-warnings, -output,
	-output=, -pedantic, -pedantic-errors, -preprocess,
	-print-missing-file-dependencies, -trace-includes, -traditional,
	-traditional-cpp, -trigraphs, -undefine-macro, -undefine-macro=,
	-user-dependencies, -verbose, -write-dependencies,
	-write-user-dependencies, no-integrated-cpp, traditional): New.

fortran:
	* gfortranspec.c (lang_specific_driver): Handle OPT__version and
	OPT__help instead of OPT_fversion and OPT_fhelp.
	* lang.opt (-all-warnings, -assert, -assert=, -comments,
	-comments-in-macros, -define-macro, -define-macro=, -dependencies,
	-dump, -dump=, -include-barrier, -include-directory,
	-include-directory=, -include-directory-after,
	-include-directory-after=, -include-prefix, -include-prefix=,
	-no-line-commands, -no-standard-includes, -output, -output=,
	-preprocess, -print-missing-file-dependencies, -trace-includes,
	-undefine-macro, -undefine-macro=, -user-dependencies, -verbose,
	-write-dependencies, -write-user-dependencies): New.

java:
	* jvspec.c (lang_specific_driver): Handle OPT__help instead of
	OPT_fhelp.
	* lang.opt (-CLASSPATH, -all-warnings, -bootclasspath, -classpath,
	-dependencies, -encoding, -extdirs, -include-directory,
	-include-directory=, -output-class-directory,
	-output-class-directory=, -resource, -resource=,
	-user-dependencies): New.

From-SVN: r164531
This commit is contained in:
Joseph Myers 2010-09-22 21:12:06 +01:00 committed by Joseph Myers
parent c98ca4c79c
commit e200444e3b
15 changed files with 820 additions and 444 deletions

View File

@ -1,3 +1,44 @@
2010-09-22 Joseph Myers <joseph@codesourcery.com>
* common.opt (-assemble, -compile, -coverage, -debug, -dump,
-dump=, -dumpbase, -dumpdir, -entry, -entry=, -extra-warnings,
-for-assembler, -for-assembler=, -for-linker, -for-linker=,
-force-link, -force-link=, -language, -language=,
-library-directory, -library-directory=, -no-canonical-prefixes,
-no-standard-libraries, -no-warnings, -optimize, -output,
-output=, -pass-exit-codes, -pedantic, -pedantic-errors, -pie,
-pipe, -prefix, -prefix=, -preprocess, -print-file-name,
-print-file-name=, -print-libgcc-file-name,
-print-multi-directory, -print-multi-lib,
-print-multi-os-directory, -print-prog-name, -print-prog-name=,
-print-search-dirs, -print-sysroot, -print-sysroot-headers-suffix,
-profile, -save-temps, -shared, -specs, -specs=, -static,
-symbolic, -time, -verbose, -param=, -sysroot, coverage, e, u,
symbolic): New.
(fhelp, fhelp=, ftarget-help, fversion): Make into aliases.
* gcc.c (A Short Introduction to Adding a Command-Line Option):
Remove comment.
(cc1_options): Correct specs for passing down --help,
--target-help and --help=*. Add spec for passing down --version.
(struct option_map, option_map, target_option_translations,
translate_options): Remove.
(driver_handle_option): Handle OPT__version, OPT__help, OPT__help_
and OPT__target_help instead of OPT_fversion, OPT_fhelp,
OPT_fhelp_ and OPT_ftarget_help.
(process_command): Don't call translate_options. Call
decode_cmdline_options_to_array before checking for
-no-canonical-prefixes using decoded options.
* opts-common.c (tm.h): Update comment on #include.
(find_opt): Allow abbreviations of long options.
(struct option_map, option_map): New.
(decode_cmdline_option): Use them instead of hardcoding -Wno, -fno
and -mno handling.
(target_option_translations): New.
(decode_cmdline_options_to_array): Handle
TARGET_OPTION_TRANSLATE_TABLE in driver.
* opts.c (common_handle_option): Don't handle OPT_fhelp,
OPT_ftarget_help, OPT_fhelp_ or OPT_fversion.
2010-09-22 Richard Guenther <rguenther@suse.de>
* tree-inline.c (optimize_inline_calls): Schedule cleanups

View File

@ -1,3 +1,9 @@
2010-09-22 Joseph Myers <joseph@codesourcery.com>
* gcc-interface/lang.opt (-all-warnings, -include-barrier,
-include-directory, -include-directory=, -no-standard-includes,
-no-standard-libraries): New.
2010-09-20 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity): Replace calls to

View File

@ -1,5 +1,5 @@
; Options for the Ada front end.
; Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc.
; Copyright (C) 2003, 2007, 2008, 2010 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
@ -25,6 +25,24 @@
Language
Ada
-all-warnings
Ada Alias(Wall)
-include-barrier
Ada Alias(I, -)
-include-directory
Ada Separate Alias(I)
-include-directory=
Ada Joined Alias(I)
-no-standard-includes
Ada Alias(nostdinc)
-no-standard-libraries
Ada Alias(nostdlib)
I
Ada Joined Separate
; Documented for C

View File

@ -1,3 +1,21 @@
2010-09-22 Joseph Myers <joseph@codesourcery.com>
* c.opt (-all-warnings, -ansi, -assert, -assert=, -comments,
-comments-in-macros, -define-macro, -define-macro=, -dependencies,
-dump, -dump=, -imacros, -imacros=, -include, -include=,
-include-barrier, -include-directory, -include-directory=,
-include-directory-after, -include-directory-after=,
-include-prefix, -include-prefix=, -include-with-prefix,
-include-with-prefix=, -include-with-prefix-after,
-include-with-prefix-after=, -include-with-prefix-before,
-include-with-prefix-before=, -no-integrated-cpp,
-no-line-commands, -no-standard-includes, -no-warnings, -output,
-output=, -pedantic, -pedantic-errors, -preprocess,
-print-missing-file-dependencies, -trace-includes, -traditional,
-traditional-cpp, -trigraphs, -undefine-macro, -undefine-macro=,
-user-dependencies, -verbose, -write-dependencies,
-write-user-dependencies, no-integrated-cpp, traditional): New.
2010-09-21 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/23710

View File

@ -34,9 +34,153 @@ C++
Language
ObjC++
-all-warnings
C ObjC C++ ObjC++ Warning Alias(Wall)
-ansi
C ObjC C++ ObjC++ Alias(ansi)
-assert
C ObjC C++ ObjC++ Separate Alias(A) MissingArgError(assertion missing after %qs)
-assert=
C ObjC C++ ObjC++ Joined Alias(A) MissingArgError(assertion missing after %qs)
-comments
C ObjC C++ ObjC++ Alias(C)
-comments-in-macros
C ObjC C++ ObjC++ Alias(CC)
-define-macro
C ObjC C++ ObjC++ Separate Alias(D) MissingArgError(macro name missing after %qs)
-define-macro=
C ObjC C++ ObjC++ Joined Alias(D) MissingArgError(macro name missing after %qs)
-dependencies
C ObjC C++ ObjC++ Alias(M)
-dump
C ObjC C++ ObjC++ Separate Alias(d)
-dump=
C ObjC C++ ObjC++ Joined Alias(d)
-imacros
C ObjC C++ ObjC++ Separate Alias(imacros) MissingArgError(missing filename after %qs)
-imacros=
C ObjC C++ ObjC++ Joined Alias(imacros) MissingArgError(missing filename after %qs)
-include
C ObjC C++ ObjC++ Separate Alias(include) MissingArgError(missing filename after %qs)
-include=
C ObjC C++ ObjC++ Joined Alias(include) MissingArgError(missing filename after %qs)
-include-barrier
C ObjC C++ ObjC++ Alias(I, -)
-include-directory
C ObjC C++ ObjC++ Separate Alias(I) MissingArgError(missing path after %qs)
-include-directory=
C ObjC C++ ObjC++ Joined Alias(I) MissingArgError(missing path after %qs)
-include-directory-after
C ObjC C++ ObjC++ Separate Alias(idirafter) MissingArgError(missing path after %qs)
-include-directory-after=
C ObjC C++ ObjC++ Joined Alias(idirafter) MissingArgError(missing path after %qs)
-include-prefix
C ObjC C++ ObjC++ Separate Alias(iprefix)
-include-prefix=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iprefix)
-include-with-prefix
C ObjC C++ ObjC++ Separate Alias(iwithprefix)
-include-with-prefix=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iwithprefix)
-include-with-prefix-after
C ObjC C++ ObjC++ Separate Alias(iwithprefix)
-include-with-prefix-after=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iwithprefix)
-include-with-prefix-before
C ObjC C++ ObjC++ Separate Alias(iwithprefixbefore)
-include-with-prefix-before=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iwithprefixbefore)
-no-integrated-cpp
Driver Alias(no-integrated-cpp)
-no-line-commands
C ObjC C++ ObjC++ Alias(P)
-no-standard-includes
C ObjC C++ ObjC++ Alias(nostdinc)
-no-warnings
C ObjC C++ ObjC++ Alias(w)
-output
C ObjC C++ ObjC++ Separate Alias(o)
-output=
C ObjC C++ ObjC++ Joined Alias(o)
-output-pch=
C ObjC C++ ObjC++ Joined Separate
-pedantic
C ObjC C++ ObjC++ Alias(pedantic)
-pedantic-errors
C ObjC C++ ObjC++ Alias(pedantic-errors)
-preprocess
C ObjC C++ ObjC++ Undocumented Alias(E)
-print-missing-file-dependencies
C ObjC C++ ObjC++ Alias(MG)
-trace-includes
C ObjC C++ ObjC++ Alias(H)
-traditional
Driver Alias(traditional)
-traditional-cpp
C ObjC C++ ObjC++ Alias(traditional-cpp)
-trigraphs
C ObjC C++ ObjC++ Alias(trigraphs)
-undefine-macro
C ObjC C++ ObjC++ Separate Alias(U) MissingArgError(macro name missing after %qs)
-undefine-macro=
C ObjC C++ ObjC++ Joined Alias(U) MissingArgError(macro name missing after %qs)
-user-dependencies
C ObjC C++ ObjC++ Alias(MM)
-verbose
Common C ObjC C++ ObjC++ Alias(v)
-write-dependencies
C ObjC C++ ObjC++ NoDriverArg Separate Alias(MD) MissingArgError(missing filename after %qs)
-write-user-dependencies
C ObjC C++ ObjC++ NoDriverArg Separate Alias(MMD) MissingArgError(missing filename after %qs)
A
C ObjC C++ ObjC++ Joined Separate MissingArgError(assertion missing after %qs)
-A<question>=<answer> Assert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>
@ -932,6 +1076,9 @@ C ObjC C++ ObjC++ Joined Separate
lang-asm
C Undocumented RejectDriver
no-integrated-cpp
Driver
nostdinc
C ObjC C++ ObjC++
Do not search standard system include directories (those specified with -isystem will still be used)
@ -1038,6 +1185,9 @@ std=iso9899:199x
C ObjC Alias(std=c99)
Deprecated in favor of -std=iso9899:1999
traditional
Driver
traditional-cpp
C ObjC C++ ObjC++
Enable traditional preprocessing

View File

@ -29,37 +29,208 @@ int target_flags
###
Driver
-assemble
Driver Alias(S)
-compile
Driver Alias(c)
-coverage
Driver Alias(coverage)
-debug
Common Alias(g)
-dump
Common Separate Alias(d)
-dump=
Common Joined Alias(d)
-dumpbase
Common Separate Alias(dumpbase)
-dumpdir
Common Separate Alias(dumpdir)
-entry
Driver Separate Alias(e)
-entry=
Driver Joined Alias(e)
-extra-warnings
Common Warning Alias(Wextra)
-for-assembler
Driver Separate Alias(Xassembler)
-for-assembler=
Driver JoinedOrMissing Alias(Xassembler)
-for-linker
Driver Separate Alias(Xlinker)
-for-linker=
Driver JoinedOrMissing Alias(Xlinker)
-force-link
Driver Separate Alias(u)
-force-link=
Driver Joined Alias(u)
-help
Common Driver
Common Driver Var(help_flag)
Display this information
-help=
Common Driver Report Joined
--help=<class> Display descriptions of a specific class of options. <class> is one or more of optimizers, target, warnings, undocumented, params
-language
Driver Separate Alias(x)
-language=
Driver Joined Alias(x)
-library-directory
Driver Separate Alias(L)
-library-directory=
Driver Joined Alias(L)
-no-canonical-prefixes
Driver Alias(no-canonical-prefixes)
-no-standard-libraries
Driver Alias(nostdlib)
-no-warnings
Common Alias(w)
-optimize
Common Alias(O)
-output
Common Driver Separate Alias(o) MissingArgError(missing filename after %qs)
-output=
Common Driver Joined Alias(o) MissingArgError(missing filename after %qs)
-pass-exit-codes
Driver Alias(pass-exit-codes)
-pedantic
Common Alias(pedantic)
-pedantic-errors
Common Alias(pedantic-errors)
-pie
Common Alias(pie)
-pipe
Driver Alias(pipe)
-prefix
Driver Separate Alias(B)
-prefix=
Driver JoinedOrMissing Alias(B)
-preprocess
Driver Alias(E)
-print-file-name
Driver Separate Alias(print-file-name=)
-print-file-name=
Driver JoinedOrMissing Alias(print-file-name=)
-print-libgcc-file-name
Driver Alias(print-libgcc-file-name)
-print-multi-directory
Driver Alias(print-multi-directory)
-print-multi-lib
Driver Alias(print-multi-lib)
-print-multi-os-directory
Driver Alias(print-multi-os-directory)
-print-prog-name
Driver Separate Alias(print-prog-name=)
-print-prog-name=
Driver JoinedOrMissing Alias(print-prog-name=)
-print-search-dirs
Driver Alias(print-search-dirs)
-print-sysroot
Driver Alias(print-sysroot)
-print-sysroot-headers-suffix
Driver Alias(print-sysroot-headers-suffix)
-profile
Common Alias(p)
-save-temps
Driver Alias(save-temps)
-shared
Common Alias(shared)
-specs
Driver Separate Alias(specs=)
-specs=
Driver Joined Alias(specs=)
-static
Driver Alias(static)
-symbolic
Driver Alias(symbolic)
-target-help
Common Driver
Alias for --help=target
;; The following four entries are to work around the gcc driver
;; program's insatiable desire to turn options starting with a
;; double dash (--) into options starting with a dash f (-f).
-time
Driver Alias(time)
-verbose
Driver Alias(v)
;; The driver used to convert options such as --help into forms such
;; as -fhelp; the following four entries are for compatibility with
;; any direct uses of those (undocumented) -f forms
fhelp
Common Driver Var(help_flag)
Common Driver Alias(-help)
fhelp=
Common Driver Joined
Common Driver Joined Alias(-help=)
ftarget-help
Common Driver
Common Driver Alias(-target-help)
fversion
Common Driver
Common Driver Alias(-version)
-param
Common Separate
--param <param>=<value> Set parameter <param> to value. See below for a complete list of parameters
-param=
Common Joined Alias(-param)
-sysroot
Driver Separate Alias(-sysroot=)
-sysroot=
Driver JoinedOrMissing
@ -312,6 +483,9 @@ Common Separate RejectDriver
auxbase-strip
Common Separate RejectDriver
coverage
Driver
c
Driver
@ -336,6 +510,9 @@ Driver
dumpversion
Driver
e
Driver Joined Separate
; The version of the C++ ABI in use. The following values are allowed:
;
; 0: The version of the ABI believed most conformant with the C++ ABI
@ -1744,6 +1921,9 @@ Driver Var(report_times)
time=
Driver JoinedOrMissing
u
Driver Joined Separate
v
Driver
@ -1787,6 +1967,9 @@ Driver
static-libstdc++
Driver
symbolic
Driver
pie
Common RejectNegative Negative(shared)
Create a position independent executable

View File

@ -1,3 +1,17 @@
2010-09-22 Joseph Myers <joseph@codesourcery.com>
* gfortranspec.c (lang_specific_driver): Handle OPT__version and
OPT__help instead of OPT_fversion and OPT_fhelp.
* lang.opt (-all-warnings, -assert, -assert=, -comments,
-comments-in-macros, -define-macro, -define-macro=, -dependencies,
-dump, -dump=, -include-barrier, -include-directory,
-include-directory=, -include-directory-after,
-include-directory-after=, -include-prefix, -include-prefix=,
-no-line-commands, -no-standard-includes, -output, -output=,
-preprocess, -print-missing-file-dependencies, -trace-includes,
-undefine-macro, -undefine-macro=, -user-dependencies, -verbose,
-write-dependencies, -write-user-dependencies): New.
2010-09-21 Jason Blevins <jrblevin@sdf.org>
* intrinsics.texi (HYPOT, IMAGE_INDEX, BESSEL_JN, BESSEL_YN,

View File

@ -271,7 +271,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
verbose = 1;
break;
case OPT_fversion:
case OPT__version:
printf ("GNU Fortran %s%s\n", pkgversion_string, version_string);
printf ("Copyright %s 2010 Free Software Foundation, Inc.\n\n",
_("(C)"));
@ -282,7 +282,7 @@ For more information about these matters, see the file named COPYING\n\n"));
exit (0);
break;
case OPT_fhelp:
case OPT__help:
/* Let gcc.c handle this, as it has a really
cool facility for handling --help and --verbose --help. */
return;

View File

@ -25,6 +25,96 @@
Language
Fortran
-all-warnings
Fortran Alias(Wall)
-assert
Fortran Separate Alias(A)
-assert=
Fortran Joined Alias(A)
-comments
Fortran Alias(C)
-comments-in-macros
Fortran Alias(CC)
-define-macro
Fortran Separate Alias(D)
-define-macro=
Fortran Joined Alias(D)
-dependencies
Fortran Alias(M)
-dump
Fortran Separate Alias(d)
-dump=
Fortran Joined Alias(d)
-include-barrier
Fortran Alias(I, -)
-include-directory
Fortran Separate Alias(I)
-include-directory=
Fortran Joined Alias(I)
-include-directory-after
Fortran Separate Alias(idirafter)
-include-directory-after=
Fortran Joined Alias(idirafter)
-include-prefix
Fortran Separate Alias(iprefix)
-include-prefix=
Fortran JoinedOrMissing Alias(iprefix)
-no-line-commands
Fortran Alias(P)
-no-standard-includes
Fortran Alias(nostdinc)
-output
Fortran Separate Alias(o)
-output=
Fortran Joined Alias(o)
-preprocess
Fortran Undocumented Alias(E)
-print-missing-file-dependencies
Fortran Alias(MG)
-trace-includes
Fortran Alias(H)
-undefine-macro
Fortran Separate Alias(U)
-undefine-macro=
Fortran Joined Alias(U)
-user-dependencies
Fortran Alias(MM)
-verbose
Fortran Alias(v)
-write-dependencies
Fortran NoDriverArg Separate Alias(MD)
-write-user-dependencies
Fortran NoDriverArg Separate Alias(MMD)
A
Fortran Joined Separate
; Documented in C

407
gcc/gcc.c
View File

@ -30,44 +30,6 @@ CC recognizes how to compile each input file by suffixes in the file names.
Once it knows which kind of compilation to perform, the procedure for
compilation is specified by a string called a "spec". */
/* A Short Introduction to Adding a Command-Line Option.
Before adding a command-line option, consider if it is really
necessary. Each additional command-line option adds complexity and
is difficult to remove in subsequent versions.
In the following, consider adding the command-line argument
`--bar'.
1. Each command-line option is specified in the specs file. The
notation is described below in the comment entitled "The Specs
Language". Read it.
2. In this file, add an entry to "option_map" equating the long
`--' argument version and any shorter, single letter version. Read
the comments in the declaration of "struct option_map" for an
explanation. Do not omit the first `-'.
3. Look in the "specs" file to determine which program or option
list should be given the argument, e.g., "cc1_options". Add the
appropriate syntax for the shorter option version to the
corresponding "const char *" entry in this file. Omit the first
`-' from the option. For example, use `-bar', rather than `--bar'.
4. If the argument takes an argument, e.g., `--baz argument1',
modify either DEFAULT_SWITCH_TAKES_ARG or
DEFAULT_WORD_SWITCH_TAKES_ARG in gcc.h. Omit the first `-'
from `--baz'.
5. Document the option in this file's display_help(). If the
option is passed to a subprogram, modify its corresponding
function, e.g., cppinit.c:print_help() or toplev.c:display_help(),
instead.
6. Compile and test. Make sure that your new specs file is being
read. For example, use a debugger to investigate the value of
"specs_file" in main(). */
#include "config.h"
#include "system.h"
#include "coretypes.h"
@ -263,7 +225,6 @@ static void add_prefix (struct path_prefix *, const char *, const char *,
int, int, int);
static void add_sysrooted_prefix (struct path_prefix *, const char *,
const char *, int, int, int);
static void translate_options (int *, const char *const **);
static char *skip_whitespace (char *);
static void delete_if_ordinary (const char *);
static void delete_temp_files (void);
@ -802,9 +763,10 @@ static const char *cc1_options =
%{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
%{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
%{v:-version} %{pg:-p} %{p} %{f*} %{undef}\
%{Qn:-fno-ident} %{--help:--help}\
%{--target-help:--target-help}\
%{--help=*:--help=%(VALUE)}\
%{Qn:-fno-ident} %{-help:--help}\
%{-target-help:--target-help}\
%{-version:--version}\
%{-help=*:--help=%*}\
%{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\
%{fsyntax-only:-o %j} %{-param*}\
%{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants}\
@ -1042,341 +1004,6 @@ static char **assembler_options;
static int n_preprocessor_options;
static char **preprocessor_options;
/* Define how to map long options into short ones. */
/* This structure describes one mapping. */
struct option_map
{
/* The long option's name. */
const char *const name;
/* The equivalent short option. */
const char *const equivalent;
/* Argument info. A string of flag chars; NULL equals no options.
a => argument required.
o => argument optional.
j => join argument to equivalent, making one word.
* => require other text after NAME as an argument. */
const char *const arg_info;
};
/* This is the table of mappings. Mappings are tried sequentially
for each option encountered; the first one that matches, wins. */
static const struct option_map option_map[] =
{
{"--all-warnings", "-Wall", 0},
{"--ansi", "-ansi", 0},
{"--assemble", "-S", 0},
{"--assert", "-A", "a"},
{"--classpath", "-fclasspath=", "aj"},
{"--bootclasspath", "-fbootclasspath=", "aj"},
{"--CLASSPATH", "-fclasspath=", "aj"},
{"--comments", "-C", 0},
{"--comments-in-macros", "-CC", 0},
{"--compile", "-c", 0},
{"--debug", "-g", "oj"},
{"--define-macro", "-D", "aj"},
{"--dependencies", "-M", 0},
{"--dump", "-d", "aj"},
{"--dumpbase", "-dumpbase", "a"},
{"--dumpdir", "-dumpdir", "a"},
{"--encoding", "-fencoding=", "aj"},
{"--entry", "-e", 0},
{"--extra-warnings", "-W", 0},
{"--extdirs", "-fextdirs=", "aj"},
{"--for-assembler", "-Wa", "a"},
{"--for-linker", "-Xlinker", "a"},
{"--force-link", "-u", "a"},
{"--coverage", "-coverage", 0},
{"--imacros", "-imacros", "a"},
{"--include", "-include", "a"},
{"--include-barrier", "-I-", 0},
{"--include-directory", "-I", "aj"},
{"--include-directory-after", "-idirafter", "a"},
{"--include-prefix", "-iprefix", "a"},
{"--include-with-prefix", "-iwithprefix", "a"},
{"--include-with-prefix-before", "-iwithprefixbefore", "a"},
{"--include-with-prefix-after", "-iwithprefix", "a"},
{"--language", "-x", "a"},
{"--library-directory", "-L", "a"},
{"--machine", "-m", "aj"},
{"--machine-", "-m", "*j"},
{"--no-canonical-prefixes", "-no-canonical-prefixes", 0},
{"--no-integrated-cpp", "-no-integrated-cpp", 0},
{"--no-line-commands", "-P", 0},
{"--no-precompiled-includes", "-noprecomp", 0},
{"--no-standard-includes", "-nostdinc", 0},
{"--no-standard-libraries", "-nostdlib", 0},
{"--no-warnings", "-w", 0},
{"--optimize", "-O", "oj"},
{"--output", "-o", "a"},
{"--output-class-directory", "-foutput-class-dir=", "ja"},
{"--param", "--param", "a"},
{"--pass-exit-codes", "-pass-exit-codes", 0},
{"--pedantic", "-pedantic", 0},
{"--pedantic-errors", "-pedantic-errors", 0},
{"--pie", "-pie", 0},
{"--pipe", "-pipe", 0},
{"--prefix", "-B", "a"},
{"--preprocess", "-E", 0},
{"--print-search-dirs", "-print-search-dirs", 0},
{"--print-file-name", "-print-file-name=", "aj"},
{"--print-libgcc-file-name", "-print-libgcc-file-name", 0},
{"--print-missing-file-dependencies", "-MG", 0},
{"--print-multi-lib", "-print-multi-lib", 0},
{"--print-multi-directory", "-print-multi-directory", 0},
{"--print-multi-os-directory", "-print-multi-os-directory", 0},
{"--print-prog-name", "-print-prog-name=", "aj"},
{"--print-sysroot", "-print-sysroot", 0},
{"--print-sysroot-headers-suffix", "-print-sysroot-headers-suffix", 0},
{"--profile", "-p", 0},
{"--resource", "-fcompile-resource=", "aj"},
{"--save-temps", "-save-temps", 0},
{"--shared", "-shared", 0},
{"--specs", "-specs=", "aj"},
{"--static", "-static", 0},
{"--std", "-std=", "aj"},
{"--symbolic", "-symbolic", 0},
{"--sysroot", "--sysroot=", "aj"},
{"--time", "-time", 0},
{"--trace-includes", "-H", 0},
{"--traditional", "-traditional", 0},
{"--traditional-cpp", "-traditional-cpp", 0},
{"--trigraphs", "-trigraphs", 0},
{"--undefine-macro", "-U", "aj"},
{"--user-dependencies", "-MM", 0},
{"--verbose", "-v", 0},
{"--warn-", "-W", "*j"},
{"--write-dependencies", "-MD", 0},
{"--write-user-dependencies", "-MMD", 0},
{"--", "-f", "*j"}
};
#ifdef TARGET_OPTION_TRANSLATE_TABLE
static const struct {
const char *const option_found;
const char *const replacements;
} target_option_translations[] =
{
TARGET_OPTION_TRANSLATE_TABLE,
{ 0, 0 }
};
#endif
/* Translate the options described by *ARGCP and *ARGVP.
Make a new vector and store it back in *ARGVP,
and store its length in *ARGCP. */
static void
translate_options (int *argcp, const char *const **argvp)
{
int i;
int argc = *argcp;
const char *const *argv = *argvp;
int newvsize = (argc + 2) * 2 * sizeof (const char *);
const char **newv = XNEWVAR (const char *, newvsize);
int newindex = 0;
i = 0;
newv[newindex++] = argv[i++];
while (i < argc)
{
#ifdef TARGET_OPTION_TRANSLATE_TABLE
int tott_idx;
for (tott_idx = 0;
target_option_translations[tott_idx].option_found;
tott_idx++)
{
if (strcmp (target_option_translations[tott_idx].option_found,
argv[i]) == 0)
{
int spaces = 1;
const char *sp;
char *np;
for (sp = target_option_translations[tott_idx].replacements;
*sp; sp++)
{
if (*sp == ' ')
spaces ++;
}
newvsize += spaces * sizeof (const char *);
newv = XRESIZEVAR (const char *, newv, newvsize);
sp = target_option_translations[tott_idx].replacements;
np = xstrdup (sp);
while (1)
{
while (*np == ' ')
np++;
if (*np == 0)
break;
newv[newindex++] = np;
while (*np != ' ' && *np)
np++;
if (*np == 0)
break;
*np++ = 0;
}
i ++;
break;
}
}
if (target_option_translations[tott_idx].option_found)
continue;
#endif
/* Translate -- options. */
if (argv[i][0] == '-' && argv[i][1] == '-')
{
size_t j;
/* Find a mapping that applies to this option. */
for (j = 0; j < ARRAY_SIZE (option_map); j++)
{
size_t optlen = strlen (option_map[j].name);
size_t arglen = strlen (argv[i]);
size_t complen = arglen > optlen ? optlen : arglen;
const char *arginfo = option_map[j].arg_info;
if (arginfo == 0)
arginfo = "";
if (!strncmp (argv[i], option_map[j].name, complen))
{
const char *arg = 0;
if (arglen < optlen)
{
size_t k;
for (k = j + 1; k < ARRAY_SIZE (option_map); k++)
if (strlen (option_map[k].name) >= arglen
&& !strncmp (argv[i], option_map[k].name, arglen))
{
error ("ambiguous abbreviation %s", argv[i]);
break;
}
if (k != ARRAY_SIZE (option_map))
break;
}
if (arglen > optlen)
{
/* If the option has an argument, accept that. */
if (argv[i][optlen] == '=')
arg = argv[i] + optlen + 1;
/* If this mapping requires extra text at end of name,
accept that as "argument". */
else if (strchr (arginfo, '*') != 0)
arg = argv[i] + optlen;
/* Otherwise, extra text at end means mismatch.
Try other mappings. */
else
continue;
}
else if (strchr (arginfo, '*') != 0)
{
error ("incomplete %qs option", option_map[j].name);
break;
}
/* Handle arguments. */
if (strchr (arginfo, 'a') != 0)
{
if (arg == 0)
{
if (i + 1 == argc)
{
error ("missing argument to %qs option",
option_map[j].name);
break;
}
arg = argv[++i];
}
}
else if (strchr (arginfo, '*') != 0)
;
else if (strchr (arginfo, 'o') == 0)
{
if (arg != 0)
error ("extraneous argument to %qs option",
option_map[j].name);
arg = 0;
}
/* Store the translation as one argv elt or as two. */
if (arg != 0 && strchr (arginfo, 'j') != 0)
newv[newindex++] = concat (option_map[j].equivalent, arg,
NULL);
else if (arg != 0)
{
newv[newindex++] = option_map[j].equivalent;
newv[newindex++] = arg;
}
else
newv[newindex++] = option_map[j].equivalent;
break;
}
}
i++;
}
/* Handle old-fashioned options--just copy them through,
with their arguments. */
else if (argv[i][0] == '-')
{
const char *p = argv[i] + 1;
int c = *p;
int nskip = 1;
if (SWITCH_TAKES_ARG (c) > (p[1] != 0))
nskip += SWITCH_TAKES_ARG (c) - (p[1] != 0);
else if (WORD_SWITCH_TAKES_ARG (p))
nskip += WORD_SWITCH_TAKES_ARG (p);
else if ((c == 'B' || c == 'b' || c == 'x')
&& p[1] == 0)
nskip += 1;
else if (! strcmp (p, "Xlinker"))
nskip += 1;
else if (! strcmp (p, "Xpreprocessor"))
nskip += 1;
else if (! strcmp (p, "Xassembler"))
nskip += 1;
/* Watch out for an option at the end of the command line that
is missing arguments, and avoid skipping past the end of the
command line. */
if (nskip + i > argc)
nskip = argc - i;
while (nskip > 0)
{
newv[newindex++] = argv[i++];
nskip--;
}
}
else
/* Ordinary operands. */
newv[newindex++] = argv[i++];
}
newv[newindex] = 0;
*argvp = newv;
*argcp = newindex;
}
static char *
skip_whitespace (char *p)
{
@ -3546,8 +3173,7 @@ driver_handle_option (const struct cl_decoded_option *decoded,
printf ("%s\n", spec_machine);
exit (0);
case OPT_fversion:
/* translate_options () has turned --version into -fversion. */
case OPT__version:
print_version = 1;
/* CPP driver cannot obtain switch from cc1_options. */
@ -3557,8 +3183,7 @@ driver_handle_option (const struct cl_decoded_option *decoded,
add_linker_option ("--version", strlen ("--version"));
break;
case OPT_fhelp:
/* translate_options () has turned --help into -fhelp. */
case OPT__help:
print_help_list = 1;
/* CPP driver cannot obtain switch from cc1_options. */
@ -3568,13 +3193,11 @@ driver_handle_option (const struct cl_decoded_option *decoded,
add_linker_option ("--help", 6);
break;
case OPT_fhelp_:
/* translate_options () has turned --help into -fhelp. */
case OPT__help_:
print_subprocess_help = 2;
break;
case OPT_ftarget_help:
/* translate_options() has turned --target-help into -ftarget-help. */
case OPT__target_help:
print_subprocess_help = 1;
/* CPP driver cannot obtain switch from cc1_options. */
@ -3885,7 +3508,6 @@ driver_handle_option (const struct cl_decoded_option *decoded,
static void
process_command (int argc, const char **argv)
{
int i;
const char *temp;
char *temp1;
const char *tooldir_prefix;
@ -3914,18 +3536,16 @@ process_command (int argc, const char **argv)
}
}
/* Convert new-style -- options to old-style. */
translate_options (&argc,
CONST_CAST2 (const char *const **, const char ***,
&argv));
decode_cmdline_options_to_array (argc, argv, CL_DRIVER,
&decoded_options, &decoded_options_count);
/* Handle any -no-canonical-prefixes flag early, to assign the function
that builds relative prefixes. This function creates default search
paths that are needed later in normal option handling. */
for (i = 1; i < argc; i++)
for (j = 1; j < decoded_options_count; j++)
{
if (! strcmp (argv[i], "-no-canonical-prefixes"))
if (decoded_options[j].opt_index == OPT_no_canonical_prefixes)
{
get_relative_prefix = make_relative_prefix_ignore_links;
break;
@ -3974,9 +3594,6 @@ process_command (int argc, const char **argv)
is relocated. The toolchain was either relocated using GCC_EXEC_PREFIX
or an automatically created GCC_EXEC_PREFIX from argv[0]. */
decode_cmdline_options_to_array (argc, argv, CL_DRIVER,
&decoded_options, &decoded_options_count);
/* Do language-specific adjustment/addition of flags. */
lang_specific_driver (&decoded_options, &decoded_options_count,
&added_libraries);

View File

@ -1,3 +1,13 @@
2010-09-22 Joseph Myers <joseph@codesourcery.com>
* jvspec.c (lang_specific_driver): Handle OPT__help instead of
OPT_fhelp.
* lang.opt (-CLASSPATH, -all-warnings, -bootclasspath, -classpath,
-dependencies, -encoding, -extdirs, -include-directory,
-include-directory=, -output-class-directory,
-output-class-directory=, -resource, -resource=,
-user-dependencies): New.
2010-09-16 Richard Guenther <rguenther@suse.de>
* jcf-parse.c (current_file_list): Remove.

View File

@ -238,7 +238,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
added--;
break;
case OPT_fhelp:
case OPT__help:
want_spec_file = 0;
break;

View File

@ -24,6 +24,48 @@
Language
Java
-CLASSPATH
Java Separate Alias(fclasspath=)
-all-warnings
Java Alias(Wall)
-bootclasspath
Java Separate Alias(fbootclasspath=)
-classpath
Java Separate Alias(fclasspath=)
-dependencies
Java Alias(M)
-encoding
Java Separate Alias(fencoding=)
-extdirs
Java Separate Alias(fextdirs=)
-include-directory
Java Separate Alias(I)
-include-directory=
Java Joined Alias(I)
-output-class-directory
Java Separate Alias(foutput-class-dir=)
-output-class-directory=
Java Joined Alias(foutput-class-dir=)
-resource
Java Separate Alias(fcompile-resource=)
-resource=
Java Joined Alias(fcompile-resource=)
-user-dependencies
Java Alias(MM)
C
Driver
; Java driver option in fact distinct from C-family option with the same name.

View File

@ -24,7 +24,8 @@ along with GCC; see the file COPYING3. If not see
#include "opts.h"
#include "options.h"
#include "diagnostic.h"
#include "tm.h" /* For SWITCH_TAKES_ARG and WORD_SWITCH_TAKES_ARG. */
#include "tm.h" /* For SWITCH_TAKES_ARG, WORD_SWITCH_TAKES_ARG and
TARGET_OPTION_TRANSLATE_TABLE. */
/* Perform a binary search to find which option the command-line INPUT
matches. Returns its index in the option array, and
@ -53,7 +54,7 @@ along with GCC; see the file COPYING3. If not see
size_t
find_opt (const char *input, int lang_mask)
{
size_t mn, mx, md, opt_len;
size_t mn, mn_orig, mx, md, opt_len;
size_t match_wrong_lang;
int comp;
@ -74,6 +75,8 @@ find_opt (const char *input, int lang_mask)
mn = md;
}
mn_orig = mn;
/* This is the switch that is the best match but for a different
front end, or OPT_SPECIAL_unknown if there is no match at all. */
match_wrong_lang = OPT_SPECIAL_unknown;
@ -106,6 +109,40 @@ find_opt (const char *input, int lang_mask)
}
while (mn != cl_options_count);
if (match_wrong_lang == OPT_SPECIAL_unknown && input[0] == '-')
{
/* Long options, starting "--", may be abbreviated if the
abbreviation is unambiguous. This only applies to options
not taking a joined argument, and abbreviations of "--option"
are permitted even if there is a variant "--option=". */
size_t mnc = mn_orig + 1;
size_t cmp_len = strlen (input);
while (mnc < cl_options_count
&& strncmp (input, cl_options[mnc].opt_text + 1, cmp_len) == 0)
{
/* Option matching this abbreviation. OK if it is the first
match and that does not take a joined argument, or the
second match, taking a joined argument and with only '='
added to the first match; otherwise considered
ambiguous. */
if (mnc == mn_orig + 1
&& !(cl_options[mnc].flags & CL_JOINED))
match_wrong_lang = mnc;
else if (mnc == mn_orig + 2
&& match_wrong_lang == mn_orig + 1
&& (cl_options[mnc].flags & CL_JOINED)
&& (cl_options[mnc].opt_len
== cl_options[mn_orig + 1].opt_len + 1)
&& strncmp (cl_options[mnc].opt_text + 1,
cl_options[mn_orig + 1].opt_text + 1,
cl_options[mn_orig + 1].opt_len) == 0)
; /* OK, as long as there are no more matches. */
else
return OPT_SPECIAL_unknown;
mnc++;
}
}
/* Return the best wrong match, or OPT_SPECIAL_unknown if none. */
return match_wrong_lang;
}
@ -197,6 +234,46 @@ generate_canonical_option (size_t opt_index, const char *arg, int value,
}
}
/* Structure describing mappings from options on the command line to
options to look up with find_opt. */
struct option_map
{
/* Prefix of the option on the command line. */
const char *opt0;
/* If two argv elements are considered to be merged into one option,
prefix for the second element, otherwise NULL. */
const char *opt1;
/* The new prefix to map to. */
const char *new_prefix;
/* Whether at least one character is needed following opt1 or opt0
for this mapping to be used. (--optimize= is valid for -O, but
--warn- is not valid for -W.) */
bool another_char_needed;
/* Whether the original option is a negated form of the option
resulting from this map. */
bool negated;
};
static const struct option_map option_map[] =
{
{ "-Wno-", NULL, "-W", false, true },
{ "-fno-", NULL, "-f", false, true },
{ "-mno-", NULL, "-m", false, true },
{ "--debug=", NULL, "-g", false, false },
{ "--machine-", NULL, "-m", true, false },
{ "--machine-no-", NULL, "-m", false, true },
{ "--machine=", NULL, "-m", false, false },
{ "--machine=no-", NULL, "-m", false, true },
{ "--machine", "", "-m", false, false },
{ "--machine", "no-", "-m", false, true },
{ "--optimize=", NULL, "-O", false, false },
{ "--std=", NULL, "-std=", false, false },
{ "--std", "", "-std=", false, false },
{ "--warn-", NULL, "-W", true, false },
{ "--warn-no-", NULL, "-W", false, true },
{ "--", NULL, "-f", true, false },
{ "--no-", NULL, "-f", false, true }
};
/* Decode the switch beginning at ARGV for the language indicated by
LANG_MASK (including CL_COMMON and CL_TARGET if applicable), into
the structure *DECODED. Returns the number of switches
@ -207,10 +284,10 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
struct cl_decoded_option *decoded)
{
size_t opt_index;
const char *opt, *arg = 0;
char *dup = 0;
const char *arg = 0;
int value = 1;
unsigned int result = 1, i;
unsigned int result = 1, i, extra_args;
int adjust_len = 0;
size_t total_len;
char *p;
const struct cl_option *option;
@ -220,28 +297,50 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
bool joined_arg_flag;
bool have_separate_arg = false;
opt = argv[0];
extra_args = 0;
opt_index = find_opt (opt + 1, lang_mask);
if (opt_index == OPT_SPECIAL_unknown
&& (opt[1] == 'W' || opt[1] == 'f' || opt[1] == 'm')
&& opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
opt_index = find_opt (argv[0] + 1, lang_mask);
i = 0;
while (opt_index == OPT_SPECIAL_unknown
&& i < ARRAY_SIZE (option_map))
{
/* Drop the "no-" from negative switches. */
size_t len = strlen (opt) - 3;
const char *opt0 = option_map[i].opt0;
const char *opt1 = option_map[i].opt1;
const char *new_prefix = option_map[i].new_prefix;
bool another_char_needed = option_map[i].another_char_needed;
size_t opt0_len = strlen (opt0);
size_t opt1_len = (opt1 == NULL ? 0 : strlen (opt1));
size_t optn_len = (opt1 == NULL ? opt0_len : opt1_len);
size_t new_prefix_len = strlen (new_prefix);
dup = XNEWVEC (char, len + 1);
dup[0] = '-';
dup[1] = opt[1];
memcpy (dup + 2, opt + 5, len - 2 + 1);
opt = dup;
value = 0;
opt_index = find_opt (opt + 1, lang_mask);
extra_args = (opt1 == NULL ? 0 : 1);
value = !option_map[i].negated;
if (strncmp (argv[0], opt0, opt0_len) == 0
&& (opt1 == NULL
|| (argv[1] != NULL && strncmp (argv[1], opt1, opt1_len) == 0))
&& (!another_char_needed
|| argv[extra_args][optn_len] != 0))
{
size_t arglen = strlen (argv[extra_args]);
char *dup;
adjust_len = (int) optn_len - (int) new_prefix_len;
dup = XNEWVEC (char, arglen + 1 - adjust_len);
memcpy (dup, new_prefix, new_prefix_len);
memcpy (dup + new_prefix_len, argv[extra_args] + optn_len,
arglen - optn_len + 1);
opt_index = find_opt (dup + 1, lang_mask);
free (dup);
}
i++;
}
if (opt_index == OPT_SPECIAL_unknown)
{
arg = argv[0];
extra_args = 0;
value = 1;
goto done;
}
@ -257,6 +356,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
goto done;
}
result = extra_args + 1;
warn_message = option->warn_message;
/* Check to see if the option is disabled for this configuration. */
@ -276,18 +376,16 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
/* Have arg point to the original switch. This is because
some code, such as disable_builtin_function, expects its
argument to be persistent until the program exits. */
arg = argv[0] + cl_options[opt_index].opt_len + 1;
if (!value)
arg += strlen ("no-");
arg = argv[extra_args] + cl_options[opt_index].opt_len + 1 + adjust_len;
if (*arg == '\0' && !(option->flags & CL_MISSING_OK))
{
if (separate_arg_flag)
{
arg = argv[1];
result = 2;
arg = argv[extra_args + 1];
result = extra_args + 2;
if (arg == NULL)
result = 1;
result = extra_args + 1;
else
have_separate_arg = true;
}
@ -298,10 +396,10 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
}
else if (separate_arg_flag)
{
arg = argv[1];
result = 2;
arg = argv[extra_args + 1];
result = extra_args + 2;
if (arg == NULL)
result = 1;
result = extra_args + 1;
else
have_separate_arg = true;
}
@ -329,7 +427,8 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
const struct cl_option *new_option = &cl_options[new_opt_index];
/* The new option must not be an alias itself. */
gcc_assert (new_option->alias_target == N_OPTS);
gcc_assert (new_option->alias_target == N_OPTS
|| (new_option->flags & CL_SEPARATE_ALIAS));
if (option->neg_alias_arg)
{
@ -363,7 +462,11 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
if (!(errors & CL_ERR_MISSING_ARG))
{
if (separate_arg_flag || joined_arg_flag)
gcc_assert (arg != NULL);
{
if ((option->flags & CL_MISSING_OK) && arg == NULL)
arg = "";
gcc_assert (arg != NULL);
}
else
gcc_assert (arg == NULL);
}
@ -392,8 +495,6 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
}
done:
if (dup)
free (dup);
decoded->opt_index = opt_index;
decoded->arg = arg;
decoded->value = value;
@ -455,6 +556,17 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
return result;
}
#ifdef TARGET_OPTION_TRANSLATE_TABLE
static const struct {
const char *const option_found;
const char *const replacements;
} target_option_translations[] =
{
TARGET_OPTION_TRANSLATE_TABLE,
{ 0, 0 }
};
#endif
/* Decode command-line options (ARGC and ARGV being the arguments of
main) into an array, setting *DECODED_OPTIONS to a pointer to that
array and *DECODED_OPTIONS_COUNT to the number of entries in the
@ -470,9 +582,10 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
struct cl_decoded_option **decoded_options,
unsigned int *decoded_options_count)
{
unsigned int n, i;
unsigned int n, i, target_translate_from;
struct cl_decoded_option *opt_array;
unsigned int num_decoded_options;
bool argv_copied = false;
opt_array = XNEWVEC (struct cl_decoded_option, argc);
@ -489,6 +602,7 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
opt_array[0].errors = 0;
num_decoded_options = 1;
target_translate_from = 1;
for (i = 1; i < argc; i += n)
{
const char *opt = argv[i];
@ -502,11 +616,88 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
continue;
}
if (i >= target_translate_from && (lang_mask & CL_DRIVER))
{
#ifdef TARGET_OPTION_TRANSLATE_TABLE
int tott_idx;
for (tott_idx = 0;
target_option_translations[tott_idx].option_found;
tott_idx++)
{
if (strcmp (target_option_translations[tott_idx].option_found,
argv[i]) == 0)
{
unsigned int spaces = 0;
unsigned int m = 0;
const char *sp;
char *np;
for (sp = target_option_translations[tott_idx].replacements;
*sp; sp++)
{
if (*sp == ' ')
{
spaces++;
while (*sp == ' ')
sp++;
sp--;
}
}
if (spaces)
{
int new_argc = argc + spaces;
if (argv_copied)
argv = XRESIZEVEC (const char *, argv, new_argc + 1);
else
{
const char **new_argv = XNEWVEC (const char *,
new_argc + 1);
memcpy (new_argv, argv,
(argc + 1) * sizeof (const char *));
argv = new_argv;
argv_copied = true;
}
memmove (&argv[i] + spaces, &argv[i],
(argc + 1 - i) * sizeof (const char *));
argc = new_argc;
opt_array = XRESIZEVEC (struct cl_decoded_option,
opt_array, argc);
}
sp = target_option_translations[tott_idx].replacements;
np = xstrdup (sp);
while (1)
{
while (*np == ' ')
np++;
if (*np == 0)
break;
argv[i + m++] = np;
while (*np != ' ' && *np)
np++;
if (*np == 0)
break;
*np++ = 0;
}
target_translate_from = i + m;
gcc_assert (m == spaces + 1);
break;
}
}
#endif
}
n = decode_cmdline_option (argv + i, lang_mask,
&opt_array[num_decoded_options]);
num_decoded_options++;
}
if (argv_copied)
free (argv);
opt_array = XRESIZEVEC (struct cl_decoded_option, opt_array,
num_decoded_options);
*decoded_options = opt_array;

View File

@ -1429,7 +1429,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
verbose = true;
break;
case OPT_fhelp:
case OPT__help:
{
unsigned int all_langs_mask = (1U << cl_lang_count) - 1;
@ -1451,7 +1450,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
break;
}
case OPT_ftarget_help:
case OPT__target_help:
print_specific_help (CL_TARGET, CL_UNDOCUMENTED, 0);
exit_after_options = true;
@ -1461,7 +1459,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
targetm.help ();
break;
case OPT_fhelp_:
case OPT__help_:
{
const char * a = arg;
@ -1580,7 +1577,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
break;
}
case OPT_fversion:
case OPT__version:
exit_after_options = true;
break;