From: Joel Rosdahl Date: Thu, 5 May 2022 22:01:45 +0000 (+0200) Subject: fix: Improve MSVC /Fp and /Yu options further X-Git-Tag: v4.6.1~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4d257467b747c81e111b0d8f5cda9a6dc1055dd;p=thirdparty%2Fccache.git fix: Improve MSVC /Fp and /Yu options further Improve 09dea223466e to also handle relative paths to -Fp/-Yu. --- diff --git a/src/argprocessing.cpp b/src/argprocessing.cpp index c00c6e076..6d3626697 100644 --- a/src/argprocessing.cpp +++ b/src/argprocessing.cpp @@ -917,18 +917,28 @@ process_arg(const Context& ctx, return nullopt; } + // Detect PCH for options with concatenated path (relative or absolute). + if (util::starts_with(args[i], "-Fp") || util::starts_with(args[i], "-Yu")) { + const size_t path_pos = 3; + if (!detect_pch(args[i].substr(0, path_pos), + args[i].substr(path_pos), + args_info.included_pch_file, + false, + state)) { + return Statistic::bad_compiler_arguments; + } + + // Fall through to the next section, so intentionally not returning here. + } + // Potentially rewrite concatenated absolute path argument to relative. if (args[i][0] == '-') { const auto path_pos = Util::is_absolute_path_with_prefix(args[i]); if (path_pos) { const std::string option = args[i].substr(0, *path_pos); - const std::string path = args[i].substr(*path_pos); - if (!detect_pch( - option, path, args_info.included_pch_file, false, state)) { - return Statistic::bad_compiler_arguments; - } if (compopt_takes_concat_arg(option) && compopt_takes_path(option)) { - const auto relpath = Util::make_relative_path(ctx, path); + const auto relpath = + Util::make_relative_path(ctx, string_view(args[i]).substr(*path_pos)); std::string new_option = option + relpath; if (compopt_affects_cpp_output(option)) { state.cpp_args.push_back(new_option);