Start moving toplev options to opts.c

Neil Booth neil@daikokuya.co.uk
Sun Jun 15 00:48:00 GMT 2003


Daniel Jacobowitz wrote:-

> Then please at least document this decision.  I agree with Joseph that
> this is a bad precedent; we've put some work into making additional
> languages drop in without having to edit lists in the source.  I
> imagine you've just broken both g95 and gpc, which have been moving
> away from requiring patches in addition to a new directory.

This patch maintains the clean separation.  lang.opt can contain
language declarations, which are used by opts.sh to declare macros
and by the front end in question to tell the options machinery
which subset of switches it is interested in.

Neil.

	* c-opts.c (lang_flags): Update for new spelling of flags.
	(write_langs): Similarly.
	* c.opt: Specify languages.
	* opts.h: Remove languages.
	* opts.sh: Recognise front-end defined languages.
ada:
	* lang.opt: Declare Ada.
	* misc.c (gnat_init_options): Update.
doc:
	* sourcebuild.texi: Update.
f:
	* lang.opt: Declare F77.
java:
	* lang.opt: Declare Java.
	* lang.c (java_init_options): Update.
treelang:
	* lang.opt: Declare Treelang.  Update.
	* tree1.c (treelang_init_options): Update.

Index: c-opts.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-opts.c,v
retrieving revision 1.57
diff -u -p -b -r1.57 c-opts.c
--- c-opts.c	14 Jun 2003 12:26:28 -0000	1.57
+++ c-opts.c	14 Jun 2003 23:09:06 -0000
@@ -50,7 +50,7 @@ Software Foundation, 59 Temple Place - S
 # define TARGET_EBCDIC 0
 #endif
 
-static const int lang_flags[] = {CL_C, CL_OBJC, CL_CXX, CL_OBJCXX};
+static const int lang_flags[] = {CL_C, CL_ObjC, CL_CXX, CL_ObjCXX};
 
 static int saved_lineno;
 
@@ -1537,7 +1537,7 @@ write_langs (buf, flags)
   *buf = '\0';
   if (flags & CL_C)
     strcat (buf, "C");
-  if (flags & CL_OBJC)
+  if (flags & CL_ObjC)
     {
       if (*buf)
 	strcat (buf, "/");
Index: c.opt
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c.opt,v
retrieving revision 1.3
diff -u -p -b -r1.3 c.opt
--- c.opt	2 Jun 2003 05:48:29 -0000	1.3
+++ c.opt	14 Jun 2003 23:09:06 -0000
@@ -29,10 +29,10 @@
 ; RejectNegative to the second field.
 
 ; The second field is a space-separated list of which parts of the
-; compiler recognize the switch.  Current valid entries are "C",
-; "ObjC", "C++" and "ObjC++".  If the switch takes an argument, then
-; you should also specify "Joined" and/or "Separate" to indicate where
-; the argument can appear.
+; compiler recognize the switch, as declared by "Language" entries.
+; If the switch takes an argument, then you should also specify
+; "Joined" and/or "Separate" to indicate where the argument can
+; appear.
 
 ; Comments can appear on their own line anwhere in the file, preceded
 ; by a semicolon.  Whitespace is permitted before the semicolon.
@@ -42,6 +42,18 @@
 ; characters replaced with an underscore.
 
 ; Please try to keep this file in ASCII collating order.
+
+Language
+C
+
+Language
+ObjC
+
+Language
+C++
+
+Language
+ObjC++
 
 -help
 C ObjC C++ ObjC++
Index: opts.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/opts.h,v
retrieving revision 1.3
diff -u -p -b -r1.3 opts.h
--- opts.h	14 Jun 2003 12:26:31 -0000	1.3
+++ opts.h	14 Jun 2003 23:09:06 -0000
@@ -33,18 +33,9 @@ struct cl_option
 extern const struct cl_option cl_options[];
 extern const unsigned int cl_options_count;
 
-#define CL_C			(1 << 0) /* Only C.  */
-#define CL_OBJC			(1 << 1) /* Only ObjC.  */
-#define CL_CXX			(1 << 2) /* Only C++.  */
-#define CL_OBJCXX		(1 << 3) /* Only ObjC++.  */
-#define CL_F77			(1 << 4) /* Only Fortran.  */
-#define CL_JAVA			(1 << 5) /* Only Java.  */
-#define CL_ADA			(1 << 6) /* Only Ada.  */
-#define CL_TREELANG		(1 << 7) /* Only Treelang.  */
-#define CL_COMMON		(1 << 8) /* Language-independent.  */
-
 #define CL_JOINED		(1 << 24) /* If takes joined argument.  */
 #define CL_SEPARATE		(1 << 25) /* If takes a separate argument.  */
 #define CL_REJECT_NEGATIVE	(1 << 26) /* Reject no- form.  */
+#define CL_COMMON		(1 << 27) /* Language-independent.  */
 
 #endif
Index: opts.sh
===================================================================
RCS file: /cvs/gcc/gcc/gcc/opts.sh,v
retrieving revision 1.8
diff -u -p -b -r1.8 opts.sh
--- opts.sh	14 Jun 2003 15:05:41 -0000	1.8
+++ opts.sh	14 Jun 2003 23:09:06 -0000
@@ -39,38 +39,39 @@ ${AWK} '
 	/^[ \t]*(;|$)/	{ next }
 	/^[^ \t]/ 	{ gsub ("\n", "\034", $0); print }
 ' "$@" | ${SORT} | ${AWK} '
-    function switch_flags (langs,   flags)
+    function switch_flags (flags,   result)
     {
-	langs = ":" langs ":"
-	gsub( " ", ":", langs)
-	flags = "0"
-        if (langs ~ ":C:") flags = flags " | CL_C"
-        if (langs ~ ":ObjC:") flags = flags " | CL_OBJC"
-        if (langs ~ ":C\\+\\+:") flags = flags " | CL_CXX"
-        if (langs ~ ":ObjC\\+\\+:") flags = flags " | CL_OBJCXX"
-        if (langs ~ ":F77:") flags = flags " | CL_F77"
-        if (langs ~ ":Java:") flags = flags " | CL_JAVA"
-        if (langs ~ ":Ada:") flags = flags " | CL_ADA"
-        if (langs ~ ":Tree:") flags = flags " | CL_TREELANG"
-        if (langs ~ ":Common:") flags = flags " | CL_COMMON"
-        if (langs ~ ":Joined:") flags = flags " | CL_JOINED"
-        if (langs ~ ":Separate:") flags = flags " | CL_SEPARATE"
-        if (langs ~ ":RejectNegative:") flags = flags " | CL_REJECT_NEGATIVE"
-	sub( "^0 \\| ", "", flags )
-	return flags
+	flags = " " flags " "
+	result = "0"
+	for (j = 0; j < n_langs; j++) {
+	    if (flags ~ " " langs[j] " ")
+		result = result " | " macros[j]
+	}
+        if (flags ~ " Common ") result = result " | CL_COMMON"
+        if (flags ~ " Joined ") result = result " | CL_JOINED"
+        if (flags ~ " Separate ") result = result " | CL_SEPARATE"
+        if (flags ~ " RejectNegative ") result = result " | CL_REJECT_NEGATIVE"
+	sub( "^0 \\| ", "", result )
+	return result
     }
 
     BEGIN {
 	FS = "\034"
 	n_opts = 0
+	n_langs = 0
     }
 
 # Collect the text and flags of each option into an array
     {
+	if ($1 == "Language") {
+		langs[n_langs] = $2
+		n_langs++;
+	} else {
 	opts[n_opts] = $1
 	flags[n_opts] = $2
 	n_opts++;
     }
+    }
 
 # Dump out an enumeration into a .h file, and an array of options into a
 # C file.  Combine the flags of duplicate options.
@@ -80,7 +81,13 @@ ${AWK} '
 	comma = ","
 
 	print "/* This file is auto-generated by opts.sh.  */\n" > h_file
-	print "enum opt_code\n{"			>> h_file
+	for (i = 0; i < n_langs; i++) {
+	    macros[i] = "CL_" langs[i]
+	    gsub( "[^A-Za-z0-9_]", "X", macros[i] )
+	    s = substr("         ", length (macros[i]))
+	    print "#define " macros[i] s " (1 << " i ")" >> h_file
+	}
+	print "\nenum opt_code\n{"			>> h_file
 
 	print "/* This file is auto-generated by opts.sh.  */\n" > c_file
 	print "#include \"" h_file "\""			>> c_file
Index: ada/lang.opt
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/lang.opt,v
retrieving revision 1.3
diff -u -p -b -r1.3 lang.opt
--- ada/lang.opt	14 Jun 2003 09:02:23 -0000	1.3
+++ ada/lang.opt	14 Jun 2003 23:09:06 -0000
@@ -18,28 +18,12 @@
 ; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 ; 02111-1307, USA.
 
-
-; This file is processed by the script opts.sh.  It is a database of
-; command line options, with each record separated by a blank line,
-; and each field appearing on its own line.  The first field is the
-; command-line switch with the leading "-" removed.  All options
-; beginning with "f" or "W" are implicitly assumed to take a "no-"
-; form; this form should not be listed.  If you do not want this
-; negative form and you want it to be automatically rejected, add
-; RejectNegative to the second field.
-
-; The second field should contain "Ada".  If the switch takes an
-; argument, then you should also specify "Joined" and/or "Separate" to
-; indicate where the argument can appear.
-
-; Comments can appear on their own line anwhere in the file, preceded
-; by a semicolon.  Whitespace is permitted before the semicolon.
-
-; For each switch XXX below, an enumeration constant is created by the
-; script opts.sh spelt OPT_XXX, but with all non-alphanumeric
-; characters replaced with an underscore.
+; See c.opt for a description of this file's format.
 
 ; Please try to keep this file in ASCII collating order.
+
+Language
+Ada
 
 I
 Ada Joined Separate
Index: ada/misc.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/misc.c,v
retrieving revision 1.55
diff -u -p -b -r1.55 misc.c
--- ada/misc.c	14 Jun 2003 12:26:32 -0000	1.55
+++ ada/misc.c	14 Jun 2003 23:09:07 -0000
@@ -294,7 +294,7 @@ gnat_init_options ()
   gnat_argv[0] = save_argv[0];     /* name of the command */ 
   gnat_argc = 1;
 
-  return CL_ADA;
+  return CL_Ada;
 }
 
 /* Here is the function to handle the compiler error processing in GCC.  */
Index: doc/sourcebuild.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/sourcebuild.texi,v
retrieving revision 1.22
diff -u -p -b -r1.22 sourcebuild.texi
--- doc/sourcebuild.texi	14 Jun 2003 14:57:29 -0000	1.22
+++ doc/sourcebuild.texi	14 Jun 2003 23:09:07 -0000
@@ -450,9 +450,6 @@ Details of source file suffixes for that
 Entries in @code{default_compilers} in @file{gcc.c} for source file
 suffixes for that language.
 @item
-A bitmask in @file{opts.h} that flags each switch accepted by
-the front end, for example @code{CL_JAVA}.
-@item
 Preferably test suites, which may be under @file{gcc/testsuite} or
 runtime library directories.  FIXME: document somewhere how to write
 test suite harnesses.
@@ -605,9 +602,8 @@ Move to the stage directory files not in
 
 @item lang.opt
 This file registers the set of switches that the front end accepts on
-the command line.  The file format is documented in each
-@file{lang.opt} file in the GCC tree.  @file{lang.opt} is processed
-by the script @file{opts.sh}.
+the command line.  The file format is documented in the file
+@file{c.opt}.  These files are processed by the script @file{opts.sh}.
 @item lang-options.h
 This file provides entries for @code{documented_lang_options} in
 @file{toplev.c} describing command-line options the front end accepts
Index: f/lang.opt
===================================================================
RCS file: /cvs/gcc/gcc/gcc/f/lang.opt,v
retrieving revision 1.1
diff -u -p -b -r1.1 lang.opt
--- f/lang.opt	8 Jun 2003 14:42:06 -0000	1.1
+++ f/lang.opt	14 Jun 2003 23:09:07 -0000
@@ -18,28 +18,12 @@
 ; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 ; 02111-1307, USA.
 
-
-; This file is processed by the script opts.sh.  It is a database of
-; command line options, with each record separated by a blank line,
-; and each field appearing on its own line.  The first field is the
-; command-line switch with the leading "-" removed.  All options
-; beginning with "f" or "W" are implicitly assumed to take a "no-"
-; form; this form should not be listed.  If you do not want this
-; negative form and you want it to be automatically rejected, add
-; RejectNegative to the second field.
-
-; The second field should contain "F77".  If the switch takes an
-; argument, then you should also specify "Joined" and/or "Separate" to
-; indicate where the argument can appear.
-
-; Comments can appear on their own line anwhere in the file, preceded
-; by a semicolon.  Whitespace is permitted before the semicolon.
-
-; For each switch XXX below, an enumeration constant is created by the
-; script opts.sh spelt OPT_XXX, but with all non-alphanumeric
-; characters replaced with an underscore.
+; See c.opt for a description of this file's format.
 
 ; Please try to keep this file in ASCII collating order.
+
+Language
+F77
 
 I
 F77 Joined
Index: java/lang.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/lang.c,v
retrieving revision 1.131
diff -u -p -b -r1.131 lang.c
--- java/lang.c	14 Jun 2003 12:26:36 -0000	1.131
+++ java/lang.c	14 Jun 2003 23:09:08 -0000
@@ -695,7 +695,7 @@ java_init_options (void)
 
   jcf_path_init ();
 
-  return CL_JAVA;
+  return CL_Java;
 }
 
 static bool
Index: java/lang.opt
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/lang.opt,v
retrieving revision 1.1
diff -u -p -b -r1.1 lang.opt
--- java/lang.opt	9 Jun 2003 19:54:26 -0000	1.1
+++ java/lang.opt	14 Jun 2003 23:09:08 -0000
@@ -18,28 +18,12 @@
 ; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 ; 02111-1307, USA.
 
-
-; This file is processed by the script opts.sh.  It is a database of
-; command line options, with each record separated by a blank line,
-; and each field appearing on its own line.  The first field is the
-; command-line switch with the leading "-" removed.  All options
-; beginning with "f" or "W" are implicitly assumed to take a "no-"
-; form; this form should not be listed.  If you do not want this
-; negative form and you want it to be automatically rejected, add
-; RejectNegative to the second field.
-
-; The second field should contain "Java".  If the switch takes an
-; argument, then you should also specify "Joined" and/or "Separate" to
-; indicate where the argument can appear.
-
-; Comments can appear on their own line anwhere in the file, preceded
-; by a semicolon.  Whitespace is permitted before the semicolon.
-
-; For each switch XXX below, an enumeration constant is created by the
-; script opts.sh spelt OPT_XXX, but with all non-alphanumeric
-; characters replaced with an underscore.
+; See c.opt for a description of this file's format.
 
 ; Please try to keep this file in ASCII collating order.
+
+Language
+Java
 
 I
 Java Joined
Index: treelang/lang.opt
===================================================================
RCS file: /cvs/gcc/gcc/gcc/treelang/lang.opt,v
retrieving revision 1.1
diff -u -p -b -r1.1 lang.opt
--- treelang/lang.opt	11 Jun 2003 22:21:10 -0000	1.1
+++ treelang/lang.opt	14 Jun 2003 23:09:10 -0000
@@ -18,42 +18,26 @@
 ; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 ; 02111-1307, USA.
 
-
-; This file is processed by the script opts.sh.  It is a database of
-; command line options, with each record separated by a blank line,
-; and each field appearing on its own line.  The first field is the
-; command-line switch with the leading "-" removed.  All options
-; beginning with "f" or "W" are implicitly assumed to take a "no-"
-; form; this form should not be listed.  If you do not want this
-; negative form and you want it to be automatically rejected, add
-; RejectNegative to the second field.
-
-; The second field should contain "Tree".  If the switch takes an
-; argument, then you should also specify "Joined" and/or "Separate" to
-; indicate where the argument can appear.
-
-; Comments can appear on their own line anwhere in the file, preceded
-; by a semicolon.  Whitespace is permitted before the semicolon.
-
-; For each switch XXX below, an enumeration constant is created by the
-; script opts.sh spelt OPT_XXX, but with all non-alphanumeric
-; characters replaced with an underscore.
+; See c.opt for a description of this file's format.
 
 ; Please try to keep this file in ASCII collating order.
 
+Language
+Treelang
+
 -help
-Tree
+Treelang
 
 flexer-trace
-Tree
+Treelang
 
 fparser-trace
-Tree
+Treelang
 
 v
-Tree
+Treelang
 
 y
-Tree
+Treelang
 
 ; This comment is to ensure we retain the blank line above.
Index: treelang/tree1.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/treelang/tree1.c,v
retrieving revision 1.10
diff -u -p -b -r1.10 tree1.c
--- treelang/tree1.c	14 Jun 2003 12:26:36 -0000	1.10
+++ treelang/tree1.c	14 Jun 2003 23:09:10 -0000
@@ -92,7 +92,7 @@ static unsigned int work_nesting_level =
 int
 treelang_init_options (void)
 {
-  return CL_TREELANG;
+  return CL_Treelang;
 }
 
 /* Process a switch - called by opts.c.  */



More information about the Gcc-patches mailing list