This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fix for CLASSPATH/classpath switch behaviour



The current GCJ switches are incompatible with Sun's. This means it's
very difficult to write portable makefiles or to switch from Sun's
compiler to GCJ.

The attached patch fixes the switching problem for the following
programs:

- gcj
- jcf-dump
- gcjh

The patch also fixes the GCJ texinfo manual.


Here's a changelog description:

        * gcc/gcc.c (struct option_map): make classpath options javac
          compatible; -classpath overrides env var, -bootclasspath
          overrides system path.
        * gcc/java/gcj.texi (Input options): ditto.
        * gcc/java/gjavah.c (struct option, help, main): ditto.
        * jcf-dump.c (struct options, help, main): ditto.
        * jv-spec.c (jvgenmain_spec, lang_specific_driver): ditto.
        * lang-options.h: ditto.
        * lang.c (java_decode_option): ditto.  
        * jcf.h, jcf-path.c (struct entry): change meaning of options.
          (jcf_path_classpath_arg): changed meaning of option.
          (jcf_path_bootclasspath_arg): new function.
          (jcf_path_CLASSPATH_arg): removed.


Comments are most welcome (including about the format of my changelog
entry).



Nic Ferrier

Index: gcc/gcc.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gcc.c,v
retrieving revision 1.289
diff -u -r1.289 gcc.c
--- gcc.c	2002/02/02 18:56:35	1.289
+++ gcc.c	2002/02/10 19:33:47
@@ -907,7 +907,7 @@
    {"--assemble", "-S", 0},
    {"--assert", "-A", "a"},
    {"--classpath", "-fclasspath=", "aj"},
-   {"--CLASSPATH", "-fCLASSPATH=", "aj"},
+   {"--bootclasspath", "-fbootclasspath=", "aj"},
    {"--comments", "-C", 0},
    {"--compile", "-c", 0},
    {"--debug", "-g", "oj"},
Index: gcc/java/gcj.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/gcj.texi,v
retrieving revision 1.21
diff -u -r1.21 gcj.texi
--- gcj.texi	2002/02/07 19:39:27	1.21
+++ gcj.texi	2002/02/10 19:34:00
@@ -141,7 +141,7 @@
 @ignore
 @c man begin SYNOPSIS gcj
 gcj [@option{-I}@var{dir}@dots{}] [@option{-d} @var{dir}@dots{}]
-    [@option{--classpath}=@var{path}] [@option{--CLASSPATH}=@var{path}]
+    [@option{--bootclasspath}=@var{path}] [@option{--classpath}=@var{path}]
     [@option{-f}@var{option}@dots{}] [@option{--encoding}=@var{name}]
     [@option{--main}=@var{classname}] [@option{-D}@var{name}[=@var{value}]@dots{}]
     [@option{-C}] [@option{-R} @var{resource-name}] [@option{-d} @var{directory}]
@@ -240,11 +240,11 @@
 always using @code{-I} instead of the other options for manipulating the
 class path.
 
-@item --classpath=@var{path}
+@item --bootclasspath=@var{path}
 This sets the class path to @var{path}, a colon-separated list of paths
 (on Windows-based systems, a semicolon-separate list of paths).
 
-@item --CLASSPATH=@var{path}
+@item --classpath=@var{path}
 This sets the class path to @var{path}, a colon-separated list of paths
 (on Windows-based systems, a semicolon-separate list of paths).  This
 differs from the @code{--classpath} option in that it does not suppress
@@ -261,17 +261,18 @@
 First come all directories specified via @code{-I}.
 
 @item
-If @code{--classpath} is specified, its value is appended and processing
-stops.  That is, @code{--classpath} suppresses all the options mentioned
+If @option{--bootclasspath} is specified, its value is appended and processing
+stops.  That is, @option{--bootclasspath} suppresses all the options mentioned
 later in this list.
 
 @item
-If @code{--CLASSPATH} is specified, its value is appended and the
+If @option{--classpath} is specified, its value is appended and the
 @code{CLASSPATH} environment variable is suppressed.
 
 @item
 If the @code{CLASSPATH} environment variable is specified (and was not
-suppressed by @code{--CLASSPATH}), then its value is appended.
+suppressed by @option{--classpath} or @option{--bootclasspath}), then its
+value is appended.
 
 @item
 Finally, the built-in system directory, @file{libgcj.jar}, is appended.
Index: gcc/java/gjavah.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/gjavah.c,v
retrieving revision 1.83
diff -u -r1.83 gjavah.c
--- gjavah.c	2002/01/31 19:36:25	1.83
+++ gjavah.c	2002/02/10 19:34:04
@@ -2101,41 +2101,41 @@
 /* This is used to mark options with no short value.  */
 #define LONG_OPT(Num)  ((Num) + 128)
 
-#define OPT_classpath LONG_OPT (0)
-#define OPT_CLASSPATH LONG_OPT (1)
-#define OPT_HELP      LONG_OPT (2)
-#define OPT_TEMP      LONG_OPT (3)
-#define OPT_VERSION   LONG_OPT (4)
-#define OPT_PREPEND   LONG_OPT (5)
-#define OPT_FRIEND    LONG_OPT (6)
-#define OPT_ADD       LONG_OPT (7)
-#define OPT_APPEND    LONG_OPT (8)
-#define OPT_M         LONG_OPT (9)
-#define OPT_MM        LONG_OPT (10)
-#define OPT_MG        LONG_OPT (11)
-#define OPT_MD        LONG_OPT (12)
-#define OPT_MMD       LONG_OPT (13)
+#define OPT_classpath     LONG_OPT (0)
+#define OPT_bootclasspath LONG_OPT (1)
+#define OPT_HELP          LONG_OPT (2)
+#define OPT_TEMP          LONG_OPT (3)
+#define OPT_VERSION       LONG_OPT (4)
+#define OPT_PREPEND       LONG_OPT (5)
+#define OPT_FRIEND        LONG_OPT (6)
+#define OPT_ADD           LONG_OPT (7)
+#define OPT_APPEND        LONG_OPT (8)
+#define OPT_M             LONG_OPT (9)
+#define OPT_MM            LONG_OPT (10)
+#define OPT_MG            LONG_OPT (11)
+#define OPT_MD            LONG_OPT (12)
+#define OPT_MMD           LONG_OPT (13)
 
 static const struct option options[] =
 {
-  { "classpath", required_argument, NULL, OPT_classpath },
-  { "CLASSPATH", required_argument, NULL, OPT_CLASSPATH },
-  { "help",      no_argument,       NULL, OPT_HELP },
-  { "stubs",     no_argument,       &stubs, 1 },
-  { "td",        required_argument, NULL, OPT_TEMP },
-  { "verbose",   no_argument,       NULL, 'v' },
-  { "version",   no_argument,       NULL, OPT_VERSION },
-  { "prepend",   required_argument, NULL, OPT_PREPEND },
-  { "friend",    required_argument, NULL, OPT_FRIEND },
-  { "add",       required_argument, NULL, OPT_ADD },
-  { "append",    required_argument, NULL, OPT_APPEND },
-  { "M",         no_argument,       NULL, OPT_M   },
-  { "MM",        no_argument,       NULL, OPT_MM  },
-  { "MG",        no_argument,       NULL, OPT_MG  },
-  { "MD",        no_argument,       NULL, OPT_MD  },
-  { "MMD",       no_argument,       NULL, OPT_MMD },
-  { "jni",       no_argument,       &flag_jni, 1 },
-  { NULL,        no_argument,       NULL, 0 }
+  { "classpath",     required_argument, NULL, OPT_classpath },
+  { "bootclasspath", required_argument, NULL, OPT_bootclasspath },
+  { "help",          no_argument,       NULL, OPT_HELP },
+  { "stubs",         no_argument,       &stubs, 1 },
+  { "td",            required_argument, NULL, OPT_TEMP },
+  { "verbose",       no_argument,       NULL, 'v' },
+  { "version",       no_argument,       NULL, OPT_VERSION },
+  { "prepend",       required_argument, NULL, OPT_PREPEND },
+  { "friend",        required_argument, NULL, OPT_FRIEND },
+  { "add",           required_argument, NULL, OPT_ADD },
+  { "append",        required_argument, NULL, OPT_APPEND },
+  { "M",             no_argument,       NULL, OPT_M   },
+  { "MM",            no_argument,       NULL, OPT_MM  },
+  { "MG",            no_argument,       NULL, OPT_MG  },
+  { "MD",            no_argument,       NULL, OPT_MD  },
+  { "MMD",           no_argument,       NULL, OPT_MMD },
+  { "jni",           no_argument,       &flag_jni, 1 },
+  { NULL,            no_argument,       NULL, 0 }
 };
 
 static void
@@ -2158,8 +2158,8 @@
   printf ("  -friend TEXT            Insert TEXT as `friend' declaration\n");
   printf ("  -prepend TEXT           Insert TEXT before start of class\n");
   printf ("\n");
+  printf ("  --bootclasspath PATH    Set path to find .class files including vm classes\n");
   printf ("  --classpath PATH        Set path to find .class files\n");
-  printf ("  --CLASSPATH PATH        Set path to find .class files\n");
   printf ("  -IDIR                   Append directory to class path\n");
   printf ("  -d DIRECTORY            Set output directory name\n");
   printf ("  -o FILE                 Set output file name\n");
@@ -2240,8 +2240,8 @@
 	  jcf_path_classpath_arg (optarg);
 	  break;
 
-	case OPT_CLASSPATH:
-	  jcf_path_CLASSPATH_arg (optarg);
+	case OPT_bootclasspath:
+	  jcf_path_bootclasspath_arg (optarg);
 	  break;
 
 	case OPT_HELP:
Index: gcc/java/jcf-dump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jcf-dump.c,v
retrieving revision 1.40
diff -u -r1.40 jcf-dump.c
--- jcf-dump.c	2002/01/31 19:36:25	1.40
+++ jcf-dump.c	2002/02/10 19:34:07
@@ -772,22 +772,22 @@
 /* This is used to mark options with no short value.  */
 #define LONG_OPT(Num)  ((Num) + 128)
 
-#define OPT_classpath LONG_OPT (0)
-#define OPT_CLASSPATH LONG_OPT (1)
-#define OPT_HELP      LONG_OPT (2)
-#define OPT_VERSION   LONG_OPT (3)
-#define OPT_JAVAP     LONG_OPT (4)
+#define OPT_classpath     LONG_OPT (0)
+#define OPT_bootclasspath LONG_OPT (1)
+#define OPT_HELP          LONG_OPT (2)
+#define OPT_VERSION       LONG_OPT (3)
+#define OPT_JAVAP         LONG_OPT (4)
 
 static const struct option options[] =
 {
-  { "classpath", required_argument, NULL, OPT_classpath },
-  { "CLASSPATH", required_argument, NULL, OPT_CLASSPATH },
-  { "help",      no_argument,       NULL, OPT_HELP },
-  { "verbose",   no_argument,       NULL, 'v' },
-  { "version",   no_argument,       NULL, OPT_VERSION },
-  { "javap",     no_argument,       NULL, OPT_JAVAP },
-  { "print-main", no_argument,      &flag_print_main, 1 },
-  { NULL,        no_argument,       NULL, 0 }
+  { "classpath",     required_argument, NULL, OPT_classpath },
+  { "bootclasspath", required_argument, NULL, OPT_bootclasspath },
+  { "help",          no_argument,       NULL, OPT_HELP },
+  { "verbose",       no_argument,       NULL, 'v' },
+  { "version",       no_argument,       NULL, OPT_VERSION },
+  { "javap",         no_argument,       NULL, OPT_JAVAP },
+  { "print-main",    no_argument,      &flag_print_main, 1 },
+  { NULL,            no_argument,       NULL, 0 }
 };
 
 static void
@@ -805,8 +805,8 @@
   printf ("  -c                      Disassemble method bodies\n");
   printf ("  --javap                 Generate output in `javap' format\n");
   printf ("\n");
+  printf ("  --bootclasspath PATH    Set path to find .class files including vm classes\n");
   printf ("  --classpath PATH        Set path to find .class files\n");
-  printf ("  --CLASSPATH PATH        Set path to find .class files\n");
   printf ("  -IDIR                   Append directory to class path\n");
   printf ("  -o FILE                 Set output file name\n");
   printf ("\n");
@@ -874,8 +874,8 @@
 	  jcf_path_classpath_arg (optarg);
 	  break;
 
-	case OPT_CLASSPATH:
-	  jcf_path_CLASSPATH_arg (optarg);
+	case OPT_bootclasspath:
+	  jcf_path_bootclasspath_arg (optarg);
 	  break;
 
 	case OPT_HELP:
Index: gcc/java/jcf-path.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jcf-path.c,v
retrieving revision 1.17
diff -u -r1.17 jcf-path.c
--- jcf-path.c	2001/08/16 21:52:14	1.17
+++ jcf-path.c	2002/02/10 19:34:07
@@ -71,8 +71,8 @@
 
    built-in system directory (only libgcj.jar)
    CLASSPATH environment variable
-   -CLASSPATH overrides CLASSPATH
-   -classpath option - overrides CLASSPATH, -CLASSPATH, and built-in
+   -classpath overrides CLASSPATH
+   -bootclasspath option - overrides CLASSPATH, -classpath, and built-in
    -I prepends path to list
 
    We implement this by keeping several path lists, and then simply
@@ -84,7 +84,7 @@
 /* This holds the CLASSPATH environment variable.  */
 static struct entry *classpath_env;
 
-/* This holds the -CLASSPATH command-line option.  */
+/* This holds the -bootclasspath command-line option.  */
 static struct entry *classpath_u;
 
 /* This holds the -classpath command-line option.  */
@@ -286,7 +286,7 @@
 
 /* Call this when -classpath is seen on the command line.  */
 void
-jcf_path_classpath_arg (path)
+jcf_path_bootclasspath_arg (path)
      const char *path;
 {
   free_entry (&classpath_l);
@@ -295,7 +295,7 @@
 
 /* Call this when -CLASSPATH is seen on the command line.  */
 void
-jcf_path_CLASSPATH_arg (path)
+jcf_path_classpath_arg (path)
      const char *path;
 {
   free_entry (&classpath_u);
Index: gcc/java/jcf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jcf.h,v
retrieving revision 1.26
diff -u -r1.26 jcf.h
--- jcf.h	2001/12/03 23:09:42	1.26
+++ jcf.h	2002/02/10 19:34:08
@@ -270,8 +270,8 @@
 
 /* Declarations for path handling code.  */
 extern void jcf_path_init PARAMS ((void));
+extern void jcf_path_bootclasspath_arg PARAMS ((const char *));
 extern void jcf_path_classpath_arg PARAMS ((const char *));
-extern void jcf_path_CLASSPATH_arg PARAMS ((const char *));
 extern void jcf_path_include_arg PARAMS ((const char *));
 extern void jcf_path_seal PARAMS ((int));
 extern void *jcf_path_start PARAMS ((void));
Index: gcc/java/jvspec.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jvspec.c,v
retrieving revision 1.51
diff -u -r1.51 jvspec.c
--- jvspec.c	2001/12/23 16:07:13	1.51
+++ jvspec.c	2002/02/10 19:34:09
@@ -65,7 +65,7 @@
 		   %{<femit-class-file} %{<femit-class-files} %{<fencoding*}\
 		   %{<fuse-boehm-gc} %{<fhash-synchronization} %{<fjni}\
 		   %{<findirect-dispatch} \
-		   %{<fclasspath*} %{<fCLASSPATH*} %{<foutput-class-dir}\
+		   %{<fclasspath*} %{<fbootclasspath*} %{<foutput-class-dir}\
 		   %{<fuse-divide-subroutine} %{<fno-use-divide-subroutine}\
 		   %{<fcheck-references} %{<fno-check-references}\
 		   %{<ffilelist-file}\
@@ -288,7 +288,7 @@
 	      quote = argv[i];
 	    }
 	  else if (strcmp(argv[i], "-classpath") == 0
-		   || strcmp(argv[i], "-CLASSPATH") == 0)
+		   || strcmp(argv[i], "-bootclasspath") == 0)
 	    {
 	      quote = argv[i];
 	      added -= 1;
Index: gcc/java/lang-options.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/lang-options.h,v
retrieving revision 1.28
diff -u -r1.28 lang-options.h
--- lang-options.h	2001/08/09 04:19:12	1.28
+++ lang-options.h	2002/02/10 19:34:09
@@ -32,9 +32,9 @@
     N_("Disable automatic array bounds checking") },
   { "-fjni",
     N_("Assume native functions are implemented using JNI") },
-  { "--classpath",
+  { "--bootclasspath",
     N_("Set class path and suppress system path") },
-  { "--CLASSPATH",
+  { "--classpath",
     N_("Set class path") },
   { "--main",
     N_("Choose class whose main method should be used") },
Index: gcc/java/lang.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/lang.c,v
retrieving revision 1.84
diff -u -r1.84 lang.c
--- lang.c	2002/01/01 01:42:15	1.84
+++ lang.c	2002/02/10 19:34:11
@@ -299,17 +299,17 @@
       return 1;
     }
 #undef CLARG
-#define CLARG "-fclasspath="
+#define CLARG "-fbootclasspath="
   if (strncmp (p, CLARG, sizeof (CLARG) - 1) == 0)
     {
-      jcf_path_classpath_arg (p + sizeof (CLARG) - 1);
+      jcf_path_bootclasspath_arg (p + sizeof (CLARG) - 1);
       return 1;
     }
 #undef CLARG
-#define CLARG "-fCLASSPATH="
+#define CLARG "-fclasspath="
   if (strncmp (p, CLARG, sizeof (CLARG) - 1) == 0)
     {
-      jcf_path_CLASSPATH_arg (p + sizeof (CLARG) - 1);
+      jcf_path_classpath_arg (p + sizeof (CLARG) - 1);
       return 1;
     }
 #undef CLARG

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]