]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Improve handling of -Wp, options
authorJoel Rosdahl <joel@rosdahl.net>
Sun, 25 Apr 2010 09:37:45 +0000 (11:37 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 25 Apr 2010 09:37:45 +0000 (11:37 +0200)
ccache.c
ccache.txt
test.sh

index d96571c1d1a7593feb2de38ea7979f881cebae7d..37530277681ce719ed0b9bc4349487a50fdd9116 100644 (file)
--- a/ccache.c
+++ b/ccache.c
@@ -1274,17 +1274,24 @@ static void process_args(int argc, char **argv, ARGS **preprocessor_args,
                }
 
                if (enable_direct && strncmp(argv[i], "-Wp,", 4) == 0) {
-                       if (strncmp(argv[i], "-Wp,-MD,", 8) == 0) {
+                       if (strncmp(argv[i], "-Wp,-MD,", 8) == 0
+                           && !strchr(argv[i] + 8, ',')) {
                                generating_dependencies = 1;
                                dependency_filename_specified = 1;
                                output_dep = make_relative_path(
                                        x_strdup(argv[i] + 8));
-                       } else if (strncmp(argv[i], "-Wp,-MMD,", 9) == 0) {
+                       } else if (strncmp(argv[i], "-Wp,-MMD,", 9) == 0
+                           && !strchr(argv[i] + 9, ',')) {
                                generating_dependencies = 1;
                                dependency_filename_specified = 1;
                                output_dep = make_relative_path(
                                        x_strdup(argv[i] + 9));
                        } else if (enable_direct) {
+                               /*
+                                * -Wp, can be used to pass too hard options to
+                                * the preprocessor. Hence, disable direct
+                                * mode.
+                                */
                                cc_log("Unsupported compiler option for direct mode: %s",
                                       argv[i]);
                                enable_direct = 0;
index 29a6320fbea60f083d8ed3e09db4fbb03866926b..91365c20b615b5dac32d226f6756090d115a66ea 100644 (file)
@@ -386,6 +386,8 @@ The direct mode will be disabled if any of the following holds:
   race condition)
 * the unifier is enabled (the environment variable *CCACHE_UNIFY* is set)
 * a compiler option unsupported by the direct mode is used
+** Currently, *-Wp,_X_* options are not supported, except if _X_ is
+   *-MD,_path_* or *-MMD,_path_*.
 
 
 THE PREPROCESSOR MODE
diff --git a/test.sh b/test.sh
index 4827485f56fbf0316f1aec729e457c76217efec7..ff3e02718927dc5a6e58a68f35b9155d757cd12e 100755 (executable)
--- a/test.sh
+++ b/test.sh
@@ -546,6 +546,34 @@ EOF
 
     rm -f other.d
 
+    ##################################################################
+    # Check that -Wp,-MD,file.d,-P disables direct mode.
+    testname="-Wp,-MD,file.d,-P"
+    $CCACHE -z >/dev/null
+    $CCACHE $COMPILER -c -Wp,-MD,/dev/null,-P test.c
+    checkstat 'cache hit (direct)' 0
+    checkstat 'cache hit (preprocessed)' 0
+    checkstat 'cache miss' 1
+
+    $CCACHE $COMPILER -c -Wp,-MD,/dev/null,-P test.c
+    checkstat 'cache hit (direct)' 0
+    checkstat 'cache hit (preprocessed)' 1
+    checkstat 'cache miss' 1
+
+    ##################################################################
+    # Check that -Wp,-MMD,file.d,-P disables direct mode.
+    testname="-Wp,-MDD,file.d,-P"
+    $CCACHE -z >/dev/null
+    $CCACHE $COMPILER -c -Wp,-MMD,/dev/null,-P test.c
+    checkstat 'cache hit (direct)' 0
+    checkstat 'cache hit (preprocessed)' 0
+    checkstat 'cache miss' 1
+
+    $CCACHE $COMPILER -c -Wp,-MMD,/dev/null,-P test.c
+    checkstat 'cache hit (direct)' 0
+    checkstat 'cache hit (preprocessed)' 1
+    checkstat 'cache miss' 1
+
     ##################################################################
     # Test some header modifications to get multiple objects in the manifest.
     testname="several objects"