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.
57 lines
1.5 KiB
C
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"
|