79 lines
2.2 KiB
Diff
79 lines
2.2 KiB
Diff
|
diff -rup ccache-2.4.orig/ccache.c ccache-2.4/ccache.c
|
||
|
--- ccache-2.4.orig/ccache.c Mon Sep 13 11:38:30 2004
|
||
|
+++ ccache-2.4/ccache.c Thu Jun 21 22:17:32 2007
|
||
|
@@ -627,6 +627,13 @@ static void process_args(int argc, char
|
||
|
int found_S_opt = 0;
|
||
|
struct stat st;
|
||
|
char *e;
|
||
|
+ /* is gcc being asked to output dependencies? */
|
||
|
+ int generating_dependencies = 0;
|
||
|
+ /* is the dependency makefile name overridden with -MF? */
|
||
|
+ int dependency_filename_specified = 0;
|
||
|
+ /* is the dependency makefile target name specified with -MQ or -MF? */
|
||
|
+ int dependency_target_specified = 0;
|
||
|
+
|
||
|
|
||
|
stripped_args = args_init(0, NULL);
|
||
|
|
||
|
@@ -702,6 +709,18 @@ static void process_args(int argc, char
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
+ /* These options require special handling, because they
|
||
|
+ behave differently with gcc -E, when the output
|
||
|
+ file is not specified. */
|
||
|
+
|
||
|
+ if (strcmp(argv[i], "-MD") == 0 || strcmp(argv[i], "-MMD") == 0) {
|
||
|
+ generating_dependencies = 1;
|
||
|
+ } else if (strcmp(argv[i], "-MF") == 0) {
|
||
|
+ dependency_filename_specified = 1;
|
||
|
+ } else if (strcmp(argv[i], "-MQ") == 0 || strcmp(argv[i], "-MT") == 0) {
|
||
|
+ dependency_target_specified = 1;
|
||
|
+ }
|
||
|
+
|
||
|
/* options that take an argument */
|
||
|
{
|
||
|
const char *opts[] = {"-I", "-include", "-imacros", "-iprefix",
|
||
|
@@ -812,6 +831,41 @@ static void process_args(int argc, char
|
||
|
}
|
||
|
p[1] = found_S_opt ? 's' : 'o';
|
||
|
p[2] = 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ /* If dependencies are generated, configure the preprocessor */
|
||
|
+
|
||
|
+ if (generating_dependencies && output_file) {
|
||
|
+ if (!dependency_filename_specified) {
|
||
|
+ char *default_depfile_name = x_strdup(output_file);
|
||
|
+ char *p = strrchr(default_depfile_name, '.');
|
||
|
+
|
||
|
+ if (p) {
|
||
|
+ if (strlen(p) < 2) {
|
||
|
+ stats_update(STATS_ARGS);
|
||
|
+ failed();
|
||
|
+ return;
|
||
|
+ }
|
||
|
+ *p = 0;
|
||
|
+ }
|
||
|
+ else {
|
||
|
+ int len = p - default_depfile_name;
|
||
|
+
|
||
|
+ p = x_malloc(len + 3);
|
||
|
+ strncpy(default_depfile_name, p, len - 1);
|
||
|
+ free(default_depfile_name);
|
||
|
+ default_depfile_name = p;
|
||
|
+ }
|
||
|
+
|
||
|
+ strcat(default_depfile_name, ".d");
|
||
|
+ args_add(stripped_args, "-MF");
|
||
|
+ args_add(stripped_args, default_depfile_name);
|
||
|
+ }
|
||
|
+
|
||
|
+ if (!dependency_target_specified) {
|
||
|
+ args_add(stripped_args, "-MT");
|
||
|
+ args_add(stripped_args, output_file);
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
/* cope with -o /dev/null */
|