Hi, Here is an updated patch that also fixes -MT/-MQ options on the command line. It also keeps the arg formatting the same, so that "make test" passes.
Thanks, Lalit Chhabra
--- ccache-3.1.7/ccache.c 2012-01-08 06:40:55.000000000 -0800 +++ ccache-3.1.7.mod/ccache.c 2012-07-27 08:12:29.547458000 -0700 @@ -1412,10 +1412,10 @@ } if (str_startswith(argv[i], "-MF")) { char *arg; + bool use_nxt_arg = (strlen(argv[i]) == 3); dependency_filename_specified = true; free(output_dep); - args_add(dep_args, argv[i]); - if (strlen(argv[i]) == 3) { + if (use_nxt_arg) { /* -MF arg */ if (i >= argc - 1) { cc_log("Missing argument to %s", argv[i]); @@ -1424,18 +1424,26 @@ goto out; } arg = argv[i + 1]; - args_add(dep_args, argv[i + 1]); i++; } else { /* -MFarg */ arg = &argv[i][3]; } output_dep = make_relative_path(x_strdup(arg)); + /* Keep the format of the args the same */ + if (use_nxt_arg) { + args_add(dep_args, "-MF"); + args_add(dep_args, output_dep); + } else { + char *option = format("-MF%s", output_dep); + args_add(dep_args, option); + free(option); + } continue; } if (str_startswith(argv[i], "-MQ") || str_startswith(argv[i], "-MT")) { + char *relpath; dependency_target_specified = true; - args_add(dep_args, argv[i]); if (strlen(argv[i]) == 3) { /* -MQ arg or -MT arg */ if (i >= argc - 1) { @@ -1444,8 +1452,21 @@ result = false; goto out; } - args_add(dep_args, argv[i + 1]); + args_add(dep_args, argv[i]); + relpath = make_relative_path(x_strdup(argv[i + 1])); + args_add(dep_args, relpath); + free(relpath); i++; + } else { + char *arg_opt; + char *option; + arg_opt = x_strndup(argv[i], 3); + relpath = make_relative_path(x_strdup(argv[i] + 3)); + option = format("%s%s", arg_opt, relpath); + args_add(dep_args, option); + free(arg_opt); + free(relpath); + free(option); } continue; } @@ -1726,11 +1747,13 @@ * Add flags for dependency generation only to the preprocessor command line. */ if (generating_dependencies) { + char *stripped_output_obj; + stripped_output_obj = make_relative_path(x_strdup(output_obj)); if (!dependency_filename_specified) { char *default_depfile_name; char *base_name; - base_name = remove_extension(output_obj); + base_name = remove_extension(stripped_output_obj); default_depfile_name = format("%s.d", base_name); free(base_name); args_add(dep_args, "-MF"); @@ -1740,8 +1763,9 @@ if (!dependency_target_specified) { args_add(dep_args, "-MQ"); - args_add(dep_args, output_obj); + args_add(dep_args, stripped_output_obj); } + free(stripped_output_obj); } if (compile_preprocessed_source_code) {
_______________________________________________ ccache mailing list ccache@lists.samba.org https://lists.samba.org/mailman/listinfo/ccache