Files
clang-p2996/clang/test/ClangScanDeps/response-file-clang-cl.c
Alexandre Ganea 90e33e20a5 [clang-scan-deps] Expand response files before the argument adjuster (#89950)
Previously, since response (.rsp) files weren't expanded at the very
beginning of clang-scan-deps, we only parsed the command-line as
provided in the Clang .cdb file. Unfortunately, when using Unreal
Engine, arguments are always generated in a .rsp file (ie.
`/path/to/clang-cl.exe @/path/to/filename_args.rsp`).

After this patch, `/Fo` can be parsed and added to the final
command-line. Without this option, the make targets that are emitted are
made up from the input file name alone. We have some cases where the
same input in the project generates several output files, so we end up
with duplicate make targets in the scan-deps emitted dependency file.
2024-05-24 17:20:08 -04:00

57 lines
1.5 KiB
C

// Check that the scanner can adjust arguments by reading .rsp files in advance.
// RUN: rm -rf %t
// RUN: split-file %s %t
// First run the tests with a .cdb
// RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
// RUN: sed -e "s|DIR|%/t|g" %t/args_nested.template > %t/args_nested.rsp
// RUN: cp %t/args_compilation.rsp %t/args.rsp
// RUN: clang-scan-deps --compilation-database %t/cdb.json > %t/deps.json
// RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
// RUN: cp %t/args_preprocess.rsp %t/args.rsp
// RUN: clang-scan-deps --compilation-database %t/cdb.json > %t/deps.json
// RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
// Now run the tests again with a in-place compilation database
// RUN: cd %t
// RUN: cp args_compilation.rsp args.rsp
// RUN: clang-scan-deps -o deps.json -- %clang_cl @args.rsp
// RUN: cat deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
// RUN: cp args_preprocess.rsp args.rsp
// RUN: clang-scan-deps -o deps.json -- %clang_cl @args.rsp
// RUN: cat deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
// Here we ensure that we got a qualified .obj with its full path, since that's what we're passing with /Fo
// CHECK: [[PREFIX]]/tu.obj:
//--- cdb.json.template
[{
"file": "DIR/tu.cpp",
"directory": "DIR",
"command": "clang-cl @DIR/args.rsp"
}]
//--- args_compilation.rsp
@args_nested.rsp
/c
//--- args_preprocess.rsp
@args_nested.rsp
/E
//--- args_nested.template
/I include
tu.cpp
/FoDIR/tu.obj
//--- include/header.h
//--- tu.cpp
#include "header.h"