xref: /llvm-project/clang/test/ClangScanDeps/response-file-clang-cl.c (revision 90e33e20a594b8a404af1df93b629137cb605a21)
1 // Check that the scanner can adjust arguments by reading .rsp files in advance.
2 
3 // RUN: rm -rf %t
4 // RUN: split-file %s %t
5 
6 // First run the tests with a .cdb
7 // RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
8 // RUN: sed -e "s|DIR|%/t|g" %t/args_nested.template > %t/args_nested.rsp
9 
10 // RUN: cp %t/args_compilation.rsp %t/args.rsp
11 // RUN: clang-scan-deps --compilation-database %t/cdb.json > %t/deps.json
12 // RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
13 
14 // RUN: cp %t/args_preprocess.rsp %t/args.rsp
15 // RUN: clang-scan-deps --compilation-database %t/cdb.json > %t/deps.json
16 // RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
17 
18 
19 // Now run the tests again with a in-place compilation database
20 // RUN: cd %t
21 
22 // RUN: cp args_compilation.rsp args.rsp
23 // RUN: clang-scan-deps -o deps.json -- %clang_cl @args.rsp
24 // RUN: cat deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
25 
26 // RUN: cp args_preprocess.rsp args.rsp
27 // RUN: clang-scan-deps -o deps.json -- %clang_cl @args.rsp
28 // RUN: cat deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
29 
30 // Here we ensure that we got a qualified .obj with its full path, since that's what we're passing with /Fo
31 // CHECK: [[PREFIX]]/tu.obj:
32 
33 //--- cdb.json.template
34 [{
35   "file": "DIR/tu.cpp",
36   "directory": "DIR",
37   "command": "clang-cl @DIR/args.rsp"
38 }]
39 
40 //--- args_compilation.rsp
41 @args_nested.rsp
42 /c
43 
44 //--- args_preprocess.rsp
45 @args_nested.rsp
46 /E
47 
48 //--- args_nested.template
49 /I include
50 tu.cpp
51 /FoDIR/tu.obj
52 
53 //--- include/header.h
54 
55 //--- tu.cpp
56 #include "header.h"
57