]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
common.opt (-assemble, [...]): New.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 22 Sep 2010 20:12:06 +0000 (21:12 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Wed, 22 Sep 2010 20:12:06 +0000 (21:12 +0100)
* 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

15 files changed:
gcc/ChangeLog
gcc/ada/ChangeLog
gcc/ada/gcc-interface/lang.opt
gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/common.opt
gcc/fortran/ChangeLog
gcc/fortran/gfortranspec.c
gcc/fortran/lang.opt
gcc/gcc.c
gcc/java/ChangeLog
gcc/java/jvspec.c
gcc/java/lang.opt
gcc/opts-common.c
gcc/opts.c

index cff05f21abf9b0383131c90482d734c49988a258..5983420620c1db4b41dda9bc7c1d55173131accf 100644 (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
index 15100f651009ccd2431bbb82221b8dff8bf84064..42c3d3cd19bd082e07a4aefc1a53db65730d6ac8 100644 (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
index 586b0e6326ec010552de9298793cb01f599862bc..3b9129b32cc8dba2591fe91f36d9a65e3d65ee95 100644 (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.
 ;
 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
index c1085670b3239ad5fcf4d5618ad63e5d4c487568..d708edbb39cae7c0bbcd35ec8d829322a10311de 100644 (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
index a997f79cf8c5fd6d904e91b3bbe79bd872d83d92..f91eeef5a31b3771f6d9447c6e8e735bf940414d 100644 (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
index 9d653f61ba3b3e545c956ae135ebf9edfa7c5e83..119a64af0a8754d684e7c5852bf5676394a3f4a1 100644 (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
index ffe7df5be54921a309c00286538cb40c399b317e..b9df02f668debbe1c037e1c6f2a17b0ed52db14f 100644 (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,
index 4220280eb22688662b46f98e7ee4d69b65397c10..b79f6a25706856c40105b581df7f90a8abccd4cd 100644 (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;
index a5a785b1b7cfc748460e2c924da55899de12fbf0..d523bdfe66c0fa84eead158dea75e40111f2cacc 100644 (file)
 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
index b459a928e34beec4ad79adab04419d9a274aa411..83bfbb9ee6bcad122fc243525c05e830d8fcbee7 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -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;
 \f
-/* 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"}
- };
-\f
-
-#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;
-}
-\f
 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);
index 4685dd4b4f29deb3d7b0dda01b041f23520ed03a..f1a1ee1c0fbb27f723ec1d335769e9fd00221103 100644 (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.
index c7f5273dfc8e45b7d667bbc919f9fe28ac74e149..7fe44f3b23d6871594ad9f8fd90f1df5bf50429a 100644 (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;
 
index 7350ccbe08cee312fa7274475f84d056e55ef841..8f529787f4d886f633bc258eb2843f720ab1a2b2 100644 (file)
 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.
index 8299edd4ab96ec3d59706fc057d134dae6017ccd..678b60e891b0b9e80e023791f6a1c1ef7fb2b676 100644 (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;
-
-      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);
+      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);
+
+      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;
index 49c91a4a09486a7256befa62c5a5a9c160faa734..643f88999d50e948dad4a4afa8a581251a019118 100644 (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;