- 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
------------
}
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);
}
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;