From: Joel Rosdahl Date: Wed, 7 Sep 2016 18:46:18 +0000 (+0200) Subject: Only pass -Wp,-MT and similar to the preprocessor X-Git-Tag: v3.2.8~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=026ba6b9fdbeb3ab57d9eb424025a0a0850baae6;p=thirdparty%2Fccache.git Only pass -Wp,-MT and similar to the preprocessor This fixes an issue when compiler option -Wp,-MT,path is used instead of -MT path (and similar for -MF, -MP and -MQ) and run_second_cpp (CCACHE_CPP2) is enabled. Fixes #129. --- diff --git a/NEWS.txt b/NEWS.txt index fe16d2752..58d949636 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -8,6 +8,10 @@ Unreleased 3.2.8 Bug fixes ~~~~~~~~~ +- Fixed an issue when compiler option `-Wp,-MT,path` is used instead of `-MT + path` (and similar for `-MF`, `-MP` and `-MQ`) and `run_second_cpp` + (`CCACHE_CPP2`) is enabled. + - ccache now understands the undocumented `-coverage` (only one dash) GCC option. diff --git a/ccache.c b/ccache.c index 591c7d7cb..5635cc15d 100644 --- a/ccache.c +++ b/ccache.c @@ -2249,6 +2249,11 @@ cc_process_args(struct args *args, struct args **preprocessor_args, output_dep = make_relative_path(x_strdup(argv[i] + 9)); args_add(dep_args, argv[i]); continue; + } else if (str_startswith(argv[i], "-Wp,-M")) { + /* -MF, -MP, -MQ, -MT, etc. TODO: Make argument to MF/MQ/MT + * relative. */ + args_add(dep_args, argv[i]); + continue; } else if (conf->direct_mode) { /* * -Wp, can be used to pass too hard options to @@ -2258,6 +2263,10 @@ cc_process_args(struct args *args, struct args **preprocessor_args, cc_log("Unsupported compiler option for direct mode: %s", argv[i]); conf->direct_mode = false; } + + /* Any other -Wp,* arguments are only relevant for the preprocessor. */ + args_add(cpp_args, argv[i]); + continue; } if (str_eq(argv[i], "-MP")) { args_add(dep_args, argv[i]); diff --git a/test/test_argument_processing.c b/test/test_argument_processing.c index 0ecefd1b3..a1b6ecba2 100644 --- a/test/test_argument_processing.c +++ b/test/test_argument_processing.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2015 Joel Rosdahl + * Copyright (C) 2010-2016 Joel Rosdahl * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free @@ -57,7 +57,7 @@ TEST(dependency_flags_should_only_be_sent_to_the_preprocessor) { #define CMD \ "cc -MD -MMD -MP -MF foo.d -MT mt1 -MT mt2 -MQ mq1 -MQ mq2" \ - " -Wp,-MD,wpmd -Wp,-MMD,wpmmd" + " -Wp,-MD,wpmd -Wp,-MMD,wpmmd -Wp,-MP -Wp,-MT,wpmt -Wp,-MQ,wpmq -Wp,-MF,wpf" struct args *orig = args_init_from_string(CMD " -c foo.c -o foo.o"); struct args *exp_cpp = args_init_from_string(CMD); #undef CMD @@ -79,8 +79,9 @@ TEST(preprocessor_only_flags_should_only_be_sent_to_the_preprocessor) " -include test.h -include-pch test.pch -iprefix . -iquote ." \ " -isysroot . -isystem . -iwithprefix . -iwithprefixbefore ." \ " -DTEST_MACRO -DTEST_MACRO2=1 -F. -trigraphs -fworking-directory" \ - " -fno-working-directory -MD -MMD -MP -MF foo.d -MT mt1 -MT mt2 " \ - " -MQ mq1 -MQ mq2 -Wp,-MD,wpmd -Wp,-MMD,wpmmd" + " -fno-working-directory -MD -MMD -MP -MF foo.d -MT mt1 -MT mt2" \ + " -MQ mq1 -MQ mq2 -Wp,-MD,wpmd -Wp,-MMD,wpmmd -Wp,-MP -Wp,-MT,wpmt" \ + " -Wp,-MQ,wpmq -Wp,-MF,wpf" struct args *orig = args_init_from_string(CMD " -c foo.c -o foo.o"); struct args *exp_cpp = args_init_from_string(CMD); #undef CMD