/* Specific flags and argument handling of the front-end of the
GNU compiler for the Java(TM) language.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-GNU CC is distributed in the hope that it will be useful,
+GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
+along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
#include "config.h"
#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
#include "gcc.h"
/* Name of spec file. */
/* True if this arg is a resource file. */
#define RESOURCE_FILE_ARG (1<<7)
-static char *find_spec_file PARAMS ((const char *));
-static int verify_class_name PARAMS ((const char *));
+static char *find_spec_file (const char *);
+static int verify_class_name (const char *);
static const char *main_class_name = NULL;
int lang_specific_extra_outfiles = 0;
int shared_libgcc = 1;
static const char jvgenmain_spec[] =
- "jvgenmain %{D*} %b %{!pipe:%u.i} |\n\
- cc1 %{!pipe:%U.i} %1 \
+ "jvgenmain %{D*} %b %m.i |\n\
+ cc1 %m.i %1 \
%{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
%{g*} %{O*} \
%{v:-version} %{pg:-p} %{p}\
- %{<fbounds-check} %{<fno-bounds-check}\
- %{<fassume-compiled} %{<fno-assume-compiled}\
- %{<fcompile-resource*} %{<fassert} %{<fno-assert} \
- %{<femit-class-file} %{<femit-class-files} %{<fencoding*}\
- %{<fuse-boehm-gc} %{<fhash-synchronization} %{<fjni}\
- %{<findirect-dispatch} \
- %{<fno-store-check} %{<foutput-class-dir}\
- %{<fclasspath*} %{<fCLASSPATH*} %{<fbootclasspath*}\
- %{<fextdirs*}\
- %{<fuse-divide-subroutine} %{<fno-use-divide-subroutine}\
- %{<fcheck-references} %{<fno-check-references}\
- %{<ffilelist-file}\
+ %<fbounds-check %<fno-bounds-check\
+ %<fassume-compiled* %<fno-assume-compiled*\
+ %<fcompile-resource* %<fassert %<fno-assert \
+ %<femit-class-file %<femit-class-files %<fencoding*\
+ %<fuse-boehm-gc %<fhash-synchronization %<fjni\
+ %<findirect-dispatch \
+ %<fno-store-check %<foutput-class-dir\
+ %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
+ %<fextdirs*\
+ %<fuse-divide-subroutine %<fno-use-divide-subroutine\
+ %<fcheck-references %<fno-check-references\
+ %<ffilelist-file\
%{f*} -fdollars-in-identifiers\
%{aux-info*}\
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y -o %d%w%u%O %{!pipe:%g.s} %A\n }";
+ %{S:%W{o*}%{!o*:-o %b.s}}\
+ %(invoke_as)";
/* Return full path name of spec file if it is in DIR, or NULL if
not. */
static char *
-find_spec_file (dir)
- const char *dir;
+find_spec_file (const char *dir)
{
char *spec;
int x;
struct stat sb;
- spec = (char *) xmalloc (strlen (dir) + sizeof (SPEC_FILE)
- + sizeof ("-specs=") + 4);
+ spec = xmalloc (strlen (dir) + sizeof (SPEC_FILE)
+ + sizeof ("-specs=") + 4);
strcpy (spec, "-specs=");
x = strlen (spec);
strcat (spec, dir);
/* Verify that NAME is a valid Java class name that might contain
`main'. Return 0 on failure. */
static int
-verify_class_name (name)
- const char *name;
+verify_class_name (const char *name)
{
/* FIXME: what encoding do we use for command-line arguments? For
now we assume plain ASCII, which of course is wrong. */
}
void
-lang_specific_driver (in_argc, in_argv, in_added_libraries)
- int *in_argc;
- const char *const **in_argv;
- int *in_added_libraries;
+lang_specific_driver (int *in_argc, const char *const **in_argv,
+ int *in_added_libraries)
{
int i, j;
should be passed to a single jc1 invocation. */
int combine_inputs = 0;
- /* Index of last .java or .class argument. */
- int last_input_index;
-
/* Number of .java and .class source file arguments seen. */
int java_files_count = 0;
int class_files_count = 0;
argv = *in_argv;
added_libraries = *in_added_libraries;
- args = (int *) xcalloc (argc, sizeof (int));
+ args = xcalloc (argc, sizeof (int));
for (i = 1; i < argc; i++)
{
else if (argv[i][1] == 'O')
saw_O = 1;
else if ((argv[i][2] == '\0'
- && (char *)strchr ("bBVDUoeTuIYmLiA", argv[i][1]) != NULL)
+ && strchr ("bBVDUoeTuIYmLiA", argv[i][1]) != NULL)
|| strcmp (argv[i], "-Tdata") == 0
|| strcmp (argv[i], "-MT") == 0
|| strcmp (argv[i], "-MF") == 0)
saw_o = 1;
quote = argv[i];
}
- else if (strcmp(argv[i], "-classpath") == 0
- || strcmp(argv[i], "-bootclasspath") == 0
- || strcmp(argv[i], "-CLASSPATH") == 0)
+ else if (strcmp (argv[i], "-classpath") == 0
+ || strcmp (argv[i], "-bootclasspath") == 0
+ || strcmp (argv[i], "-CLASSPATH") == 0
+ || strcmp (argv[i], "-encoding") == 0
+ || strcmp (argv[i], "-extdirs") == 0)
{
quote = argv[i];
added -= 1;
}
else if (library != 0
&& ((argv[i][2] == '\0'
- && (char *) strchr ("cSEM", argv[i][1]) != NULL)
+ && strchr ("cSEM", argv[i][1]) != NULL)
|| strcmp (argv[i], "-MM") == 0))
{
/* Don't specify libraries if we won't link, since that would
if (saw_resource)
{
args[i] |= RESOURCE_FILE_ARG;
- last_input_index = i;
added += 2; /* for -xjava and -xnone */
}
{
args[i] |= JAVA_FILE_ARG;
java_files_count++;
- last_input_index = i;
}
if (len > 6 && strcmp (argv[i] + len - 6, ".class") == 0)
{
args[i] |= CLASS_FILE_ARG;
class_files_count++;
- last_input_index = i;
}
if (len > 4
&& (strcmp (argv[i] + len - 4, ".zip") == 0
{
args[i] |= ZIP_FILE_ARG;
zip_files_count++;
- last_input_index = i;
}
}
}
num_args += shared_libgcc;
- arglist = (const char **) xmalloc ((num_args + 1) * sizeof (char *));
+ arglist = xmalloc ((num_args + 1) * sizeof (char *));
j = 0;
for (i = 0; i < argc; i++, j++)
if (strcmp (argv[i], "-classpath") == 0
|| strcmp (argv[i], "-bootclasspath") == 0
- || strcmp (argv[i], "-CLASSPATH") == 0)
+ || strcmp (argv[i], "-CLASSPATH") == 0
+ || strcmp (argv[i], "-encoding") == 0
+ || strcmp (argv[i], "-extdirs") == 0)
{
arglist[j] = concat ("-f", argv[i]+1, "=", argv[i+1], NULL);
i++;
}
int
-lang_specific_pre_link ()
+lang_specific_pre_link (void)
{
int err;
if (main_class_name == NULL)
}
return err;
}
+
+/* Table of language-specific spec functions. */
+const struct spec_function lang_specific_spec_functions[] =
+{
+ { 0, 0 }
+};