diff options
Diffstat (limited to 'gcc/java/lang.c')
-rw-r--r-- | gcc/java/lang.c | 83 |
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); } } } |