aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/lang.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-10-20 21:19:29 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-10-20 21:19:29 +0000
commit316a06a103ac4064f94377b8a4a4c1b91f6a5afe (patch)
tree4eede965e0e3fec6ff244f7ac3b8432688b7e248 /gcc/java/lang.c
parent3f568531d04baeb2dc6a3eaf3e18d5a219c3e841 (diff)
downloadgcc-316a06a103ac4064f94377b8a4a4c1b91f6a5afe.zip
gcc-316a06a103ac4064f94377b8a4a4c1b91f6a5afe.tar.gz
gcc-316a06a103ac4064f94377b8a4a4c1b91f6a5afe.tar.bz2
jvspec.c (lang_specific_driver): Recognize -MF and -MT.
* jvspec.c (lang_specific_driver): Recognize -MF and -MT. * lang-specs.h: Added %{MA}, %{MF*}, %{MT*}. * lang-options.h: Added -MA, -MT, -MF.. * lang.c (lang_decode_option): Recognize -MA, -MT, -MF. (DEPEND_TARGET_SET): New macro. (DEPEND_FILE_ALREADY_SET): Likewise. (init_parse): Handle new flags. * jcf.h (jcf_dependency_print_dummies): Declare. * Make-lang.in (s-java): Added mkdeps.o. * Makefile.in (BACKEND): Added mkdeps.o. (../gcjh$(exeext)): Added mkdeps.o. (../jcf-dump$(exeext)): Added mkdeps.o. * jcf-depend.c: Include mkdeps.h. (struct entry, dependencies, targets, MAX_OUTPUT_COLUMNS, add_entry): Removed. (jcf_dependency_reset): Rewrote. (dependencies): New global. (jcf_dependency_set_target): Rewrote. (jcf_dependency_add_target): Likewise. (jcf_dependency_add_file): Likewise. (munge): Removed. (print_ents): Removed. (jcf_dependency_write): Rewrote. (print_dummies): New global. (jcf_dependency_print_dummies): New function (jcf_dependency_write): Call deps_dummy_targets if required. From-SVN: r36981
Diffstat (limited to 'gcc/java/lang.c')
-rw-r--r--gcc/java/lang.c83
1 files changed, 57 insertions, 26 deletions
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index 32150b2..8065fc7 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -159,6 +159,8 @@ static int dependency_tracking = 0;
/* Flag values for DEPENDENCY_TRACKING. */
#define DEPEND_SET_FILE 1
#define DEPEND_ENABLE 2
+#define DEPEND_TARGET_SET 4
+#define DEPEND_FILE_ALREADY_SET 8
/*
* process java-specific compiler command-line options
@@ -316,6 +318,23 @@ lang_decode_option (argc, argv)
dependency_tracking |= DEPEND_ENABLE;
return 1;
}
+ else if (strcmp (p, "-MA") == 0)
+ {
+ jcf_dependency_print_dummies ();
+ return 1;
+ }
+ else if (strcmp (p, "-MT") == 0)
+ {
+ jcf_dependency_set_target (argv[1]);
+ dependency_tracking |= DEPEND_TARGET_SET;
+ return 2;
+ }
+ else if (strcmp (p, "-MF") == 0)
+ {
+ jcf_dependency_set_dep_file (argv[1]);
+ dependency_tracking |= DEPEND_FILE_ALREADY_SET;
+ return 2;
+ }
return 0;
}
@@ -342,36 +361,48 @@ init_parse (filename)
if (dependency_tracking)
{
char *dot;
- dot = strrchr (filename, '.');
- if (dot == NULL)
- error ("couldn't determine target name for dependency tracking");
- else
+
+ /* If the target is set and the output filename is set, then
+ there's no processing to do here. Otherwise we must
+ compute one or the other. */
+ if (! ((dependency_tracking & DEPEND_TARGET_SET)
+ && (dependency_tracking & DEPEND_FILE_ALREADY_SET)))
{
- char *buf = (char *) xmalloc (dot - filename +
- 3 + sizeof (OBJECT_SUFFIX));
- strncpy (buf, filename, dot - filename);
-
- /* If emitting class files, we might have multiple
- targets. The class generation code takes care of
- registering them. Otherwise we compute the target
- name here. */
- if (flag_emit_class_files)
- jcf_dependency_set_target (NULL);
+ dot = strrchr (filename, '.');
+ if (dot == NULL)
+ error ("couldn't determine target name for dependency tracking");
else
{
- strcpy (buf + (dot - filename), OBJECT_SUFFIX);
- jcf_dependency_set_target (buf);
- }
-
- if ((dependency_tracking & DEPEND_SET_FILE))
- {
- strcpy (buf + (dot - filename), ".d");
- jcf_dependency_set_dep_file (buf);
+ char *buf = (char *) xmalloc (dot - filename +
+ 3 + sizeof (OBJECT_SUFFIX));
+ strncpy (buf, filename, dot - filename);
+
+ /* If emitting class files, we might have multiple
+ targets. The class generation code takes care of
+ registering them. Otherwise we compute the
+ target name here. */
+ if ((dependency_tracking & DEPEND_TARGET_SET))
+ ; /* Nothing. */
+ else if (flag_emit_class_files)
+ jcf_dependency_set_target (NULL);
+ else
+ {
+ strcpy (buf + (dot - filename), OBJECT_SUFFIX);
+ jcf_dependency_set_target (buf);
+ }
+
+ if ((dependency_tracking & DEPEND_FILE_ALREADY_SET))
+ ; /* Nothing. */
+ else if ((dependency_tracking & DEPEND_SET_FILE))
+ {
+ strcpy (buf + (dot - filename), ".d");
+ jcf_dependency_set_dep_file (buf);
+ }
+ else
+ jcf_dependency_set_dep_file ("-");
+
+ free (buf);
}
- else
- jcf_dependency_set_dep_file ("-");
-
- free (buf);
}
}
}