]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Only pass implicit -MQ to preprocessor if needed
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 3 Oct 2019 18:21:54 +0000 (20:21 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 3 Oct 2019 18:21:54 +0000 (20:21 +0200)
This is a bug fix of 76a9959f3d3e.

doc/NEWS.adoc
src/ccache.c
unittest/test_argument_processing.c

index 10a827b4c86efd4423cd24d8451f9484c04c46c9..ae195180a003b2c7b96f3352631b349dbb0307c0 100644 (file)
@@ -11,6 +11,11 @@ Bug fixes
 - Fixed a regression in 3.7.2 that could result in a warning message instead of
   an error in an edge case related to usage of “-Werror”.
 
+- An implicit `-MQ` is now passed to the preprocessor only if the object file
+  extension is non-standard. This should make it easier to use EDG-based
+  compilers (e.g. GHS) which don’t understand `-MQ`. (This is a bug fix of the
+  corresponding improvement implemented in ccache 3.4.)
+
 
 ccache 3.7.4
 ------------
index 9c605934fa97629dfc594a736fa38325b83050a4..b9f1e479a76e85e87e6651cb8e3aded9b3516077 100644 (file)
@@ -3522,7 +3522,7 @@ cc_process_args(struct args *args,
 
                if (!dependency_target_specified
                    && !dependency_implicit_target_specified
-                   && !str_eq(get_extension(output_dep), ".o")) {
+                   && !str_eq(get_extension(output_obj), ".o")) {
                        args_add(dep_args, "-MQ");
                        args_add(dep_args, output_obj);
                }
index ca48c2a533c2e5ccf048031be368f316629664b1..b6c7476a857b83f2ded4579d01c5904d9a20f4e7 100644 (file)
@@ -173,6 +173,36 @@ TEST(dependency_flags_that_take_an_argument_should_not_require_space_delimiter)
        args_free(orig);
 }
 
+TEST(MQ_flag_should_not_be_added_for_standard_obj_extension)
+{
+       struct args *orig = args_init_from_string("cc -c -MD foo.c -o foo.o");
+       struct args *exp_cpp = args_init_from_string("cc -MD -MF foo.d");
+       struct args *exp_cc = args_init_from_string("cc -c");
+       struct args *act_cpp = NULL, *act_cc = NULL;
+       create_file("foo.c", "");
+
+       CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+       CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
+       CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
+
+       args_free(orig);
+}
+
+TEST(MQ_flag_should_be_added_for_non_standard_obj_extension)
+{
+       struct args *orig = args_init_from_string("cc -c -MD foo.c -o foo.obj");
+       struct args *exp_cpp = args_init_from_string("cc -MD -MF foo.d -MQ foo.obj");
+       struct args *exp_cc = args_init_from_string("cc -c");
+       struct args *act_cpp = NULL, *act_cc = NULL;
+       create_file("foo.c", "");
+
+       CHECK(cc_process_args(orig, &act_cpp, NULL, &act_cc));
+       CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
+       CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
+
+       args_free(orig);
+}
+
 TEST(sysroot_should_be_rewritten_if_basedir_is_used)
 {
        extern char *current_working_dir;