1 // RUN: rm -rf %t.dir
2 // RUN: rm -rf %t.cdb
3 // RUN: rm -rf %t.module-cache
4 // RUN: mkdir -p %t.dir
5 // RUN: cp %s %t.dir/modules_cdb_input.cpp
6 // RUN: cp %s %t.dir/modules_cdb_input2.cpp
7 // RUN: mkdir %t.dir/Inputs
8 // RUN: cp %S/Inputs/header.h %t.dir/Inputs/header.h
9 // RUN: cp %S/Inputs/header2.h %t.dir/Inputs/header2.h
10 // RUN: cp %S/Inputs/module.modulemap %t.dir/Inputs/module.modulemap
11 // RUN: sed -e "s|DIR|%/t.dir|g" %S/Inputs/modules_cdb.json > %t.cdb
12 //
13 // RUN: echo %t.dir > %t.result
14 // RUN: clang-scan-deps -compilation-database %t.cdb -j 1 \
15 // RUN:   -mode preprocess-minimized-sources -format experimental-full >> %t.result
16 // RUN: cat %t.result | FileCheck --check-prefixes=CHECK %s
17 
18 // FIXME: Backslash issues.
19 // XFAIL: system-windows
20 
21 #include "header.h"
22 
23 // CHECK: [[PREFIX:(.*[/\\])+[a-zA-Z0-9.-]+]]
24 // CHECK-NEXT:     {
25 // CHECK-NEXT:  "clang-context-hash": "[[CONTEXT_HASH:[A-Z0-9]+]]",
26 // CHECK-NEXT:  "clang-module-deps": [
27 // CHECK-NEXT:    "header1"
28 // CHECK-NEXT:  ],
29 // CHECK-NEXT:  "clang-modules": [
30 // CHECK-NEXT:    {
31 // CHECK-NEXT:      "clang-module-deps": [
32 // CHECK-NEXT:        "header2"
33 // CHECK-NEXT:      ],
34 // CHECK-NEXT:      "clang-modulemap-file": "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}module.modulemap",
35 // CHECK-NEXT:      "file-deps": [
36 // CHECK-NEXT:        "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}header.h",
37 // CHECK-NEXT:        "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}module.modulemap"
38 // CHECK-NEXT:      ],
39 // CHECK-NEXT:      "name": "header1"
40 // CHECK-NEXT:    },
41 // CHECK-NEXT:    {
42 // CHECK-NEXT:      "clang-module-deps": [],
43 // CHECK-NEXT:      "clang-modulemap-file": "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}module.modulemap",
44 // CHECK-NEXT:      "file-deps": [
45 // CHECK-NEXT:        "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}header2.h",
46 // CHECK-NEXT:        "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}module.modulemap"
47 // CHECK-NEXT:      ],
48 // CHECK-NEXT:      "name": "header2"
49 // CHECK-NEXT:    }
50 // CHECK-NEXT:  ],
51 // CHECK-NEXT:  "file-deps": [
52 // CHECK-NEXT:    "[[PREFIX]]{{[/\\]}}modules_cdb_input2.cpp"
53 // CHECK-NEXT:  ],
54 // CHECK-NEXT:  "input-file": "[[PREFIX]]{{[/\\]}}modules_cdb_input2.cpp"
55 // CHECK-NEXT:},
56 // CHECK-NEXT:{
57 // CHECK-NOT:   "clang-context-hash": "[[CONTEXT_HASH]]",
58 // CHECK-NEXT:  "clang-context-hash": "{{[A-Z0-9]+}}",
59 // CHECK-NEXT:  "clang-module-deps": [
60 // CHECK-NEXT:    "header1"
61 // CHECK-NEXT:  ],
62 // CHECK-NEXT:  "clang-modules": [
63 // CHECK-NEXT:    {
64 // CHECK-NEXT:      "clang-module-deps": [],
65 // CHECK-NEXT:      "clang-modulemap-file": "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}module.modulemap",
66 // CHECK-NEXT:      "file-deps": [
67 // CHECK-NEXT:        "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}header.h",
68 // CHECK-NEXT:        "[[PREFIX]]{{[/\\]}}Inputs{{[/\\]}}module.modulemap"
69 // CHECK-NEXT:      ],
70 // CHECK-NEXT:      "name": "header1"
71 // CHECK-NEXT:    }
72 // CHECK-NEXT:  ],
73 // CHECK-NEXT:  "file-deps": [
74 // CHECK-NEXT:    "[[PREFIX]]{{[/\\]}}modules_cdb_input.cpp"
75 // CHECK-NEXT:  ],
76 // CHECK-NEXT:  "input-file": "[[PREFIX]]{{[/\\]}}modules_cdb_input.cpp"
77 // CHECK-NEXT:},
78