From 40c0a3906995070a924d33438dee9e70e94de426 Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Sun, 25 Apr 2010 11:37:45 +0200 Subject: [PATCH] Improve handling of -Wp, options --- ccache.c | 11 +++++++++-- ccache.txt | 2 ++ test.sh | 28 ++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/ccache.c b/ccache.c index d96571c1d..375302776 100644 --- 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; diff --git a/ccache.txt b/ccache.txt index 29a6320fb..91365c20b 100644 --- a/ccache.txt +++ b/ccache.txt @@ -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 4827485f5..ff3e02718 100755 --- 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" -- 2.47.2