xref: /llvm-project/clang/test/ClangScanDeps/link-libraries.c (revision 9d4837f47c48c634d4a0ac799188e1f5332495ef)
168eb3b20SArtem Chikin // RUN: rm -rf %t
268eb3b20SArtem Chikin // RUN: mkdir %t
368eb3b20SArtem Chikin // RUN: mkdir %t/Inputs
468eb3b20SArtem Chikin // RUN: cp -R %S/Inputs/frameworks %t/Inputs/frameworks
568eb3b20SArtem Chikin // RUN: split-file %s %t
668eb3b20SArtem Chikin 
768eb3b20SArtem Chikin //--- module.modulemap
868eb3b20SArtem Chikin module root { header "root.h" }
968eb3b20SArtem Chikin module direct { header "direct.h" }
1068eb3b20SArtem Chikin module transitive {
1168eb3b20SArtem Chikin   header "transitive.h"
1268eb3b20SArtem Chikin   link framework "libTransitive"
1368eb3b20SArtem Chikin }
1468eb3b20SArtem Chikin //--- root.h
1568eb3b20SArtem Chikin #include "direct.h"
1668eb3b20SArtem Chikin #include "root/textual.h"
1768eb3b20SArtem Chikin #include "Framework/Framework.h"
1868eb3b20SArtem Chikin //--- direct.h
1968eb3b20SArtem Chikin #include "transitive.h"
2068eb3b20SArtem Chikin //--- transitive.h
2168eb3b20SArtem Chikin // empty
2268eb3b20SArtem Chikin 
2368eb3b20SArtem Chikin //--- root/textual.h
2468eb3b20SArtem Chikin // This is here to verify that the "root" directory doesn't clash with name of
2568eb3b20SArtem Chikin // the "root" module.
2668eb3b20SArtem Chikin 
2768eb3b20SArtem Chikin //--- cdb.json.template
2868eb3b20SArtem Chikin [{
2968eb3b20SArtem Chikin   "file": "",
3068eb3b20SArtem Chikin   "directory": "DIR",
3168eb3b20SArtem Chikin   "command": "clang -fmodules -fmodules-cache-path=DIR/cache -FDIR/Inputs/frameworks -I DIR -x c"
3268eb3b20SArtem Chikin }]
3368eb3b20SArtem Chikin 
3468eb3b20SArtem Chikin // RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
3568eb3b20SArtem Chikin // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full -module-name=root > %t/result.json
3668eb3b20SArtem Chikin // RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
3768eb3b20SArtem Chikin 
3868eb3b20SArtem Chikin // CHECK:      {
3968eb3b20SArtem Chikin // CHECK-NEXT:   "modules": [
4068eb3b20SArtem Chikin // CHECK-NEXT:     {
4168eb3b20SArtem Chikin // CHECK-NEXT:       "clang-module-deps": [],
42da1a16aeSJan Svoboda // CHECK-NEXT:       "clang-modulemap-file": "[[PREFIX]]/Inputs/frameworks/module.modulemap",
4368eb3b20SArtem Chikin // CHECK-NEXT:       "command-line": [
4468eb3b20SArtem Chikin // CHECK:            ],
4568eb3b20SArtem Chikin // CHECK-NEXT:       "context-hash": "{{.*}}",
4668eb3b20SArtem Chikin // CHECK-NEXT:       "file-deps": [
47*9d4837f4SJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/Inputs/frameworks/module.modulemap",
48da1a16aeSJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/Inputs/frameworks/Framework.framework/Headers/Framework.h"
4968eb3b20SArtem Chikin // CHECK-NEXT:       ],
5068eb3b20SArtem Chikin // CHECK-NEXT:       "link-libraries": [
5168eb3b20SArtem Chikin // CHECK-NEXT:         {
5268eb3b20SArtem Chikin // CHECK-NEXT:           "isFramework": true,
5368eb3b20SArtem Chikin // CHECK-NEXT:           "link-name": "Framework"
5468eb3b20SArtem Chikin // CHECK-NEXT:         }
5568eb3b20SArtem Chikin // CHECK-NEXT:       ],
5668eb3b20SArtem Chikin // CHECK-NEXT:       "name": "Framework"
5768eb3b20SArtem Chikin // CHECK-NEXT:     },
5868eb3b20SArtem Chikin // CHECK-NEXT:     {
5968eb3b20SArtem Chikin // CHECK-NEXT:       "clang-module-deps": [
6068eb3b20SArtem Chikin // CHECK-NEXT:         {
6168eb3b20SArtem Chikin // CHECK-NEXT:           "context-hash": "{{.*}}",
6268eb3b20SArtem Chikin // CHECK-NEXT:           "module-name": "transitive"
6368eb3b20SArtem Chikin // CHECK-NEXT:         }
6468eb3b20SArtem Chikin // CHECK-NEXT:       ],
6568eb3b20SArtem Chikin // CHECK-NEXT:       "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
6668eb3b20SArtem Chikin // CHECK-NEXT:       "command-line": [
6768eb3b20SArtem Chikin // CHECK:            ],
6868eb3b20SArtem Chikin // CHECK-NEXT:       "context-hash": "{{.*}}",
6968eb3b20SArtem Chikin // CHECK-NEXT:       "file-deps": [
70*9d4837f4SJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/module.modulemap",
7168eb3b20SArtem Chikin // CHECK-NEXT:         "[[PREFIX]]/direct.h"
7268eb3b20SArtem Chikin // CHECK-NEXT:       ],
7368eb3b20SArtem Chikin // CHECK-NEXT:       "link-libraries": [],
7468eb3b20SArtem Chikin // CHECK-NEXT:       "name": "direct"
7568eb3b20SArtem Chikin // CHECK-NEXT:     },
7668eb3b20SArtem Chikin // CHECK-NEXT:     {
7768eb3b20SArtem Chikin // CHECK-NEXT:       "clang-module-deps": [
7868eb3b20SArtem Chikin // CHECK-NEXT:         {
7968eb3b20SArtem Chikin // CHECK-NEXT:           "context-hash": "{{.*}}",
8068eb3b20SArtem Chikin // CHECK-NEXT:           "module-name": "Framework"
8168eb3b20SArtem Chikin // CHECK-NEXT:         },
8268eb3b20SArtem Chikin // CHECK-NEXT:         {
8368eb3b20SArtem Chikin // CHECK-NEXT:           "context-hash": "{{.*}}",
8468eb3b20SArtem Chikin // CHECK-NEXT:           "module-name": "direct"
8568eb3b20SArtem Chikin // CHECK-NEXT:         }
8668eb3b20SArtem Chikin // CHECK-NEXT:       ],
8768eb3b20SArtem Chikin // CHECK-NEXT:       "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
8868eb3b20SArtem Chikin // CHECK-NEXT:       "command-line": [
8968eb3b20SArtem Chikin // CHECK:            ],
9068eb3b20SArtem Chikin // CHECK-NEXT:       "context-hash": "{{.*}}",
9168eb3b20SArtem Chikin // CHECK-NEXT:       "file-deps": [
92*9d4837f4SJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/module.modulemap",
93*9d4837f4SJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/root.h",
94*9d4837f4SJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/root/textual.h",
9568eb3b20SArtem Chikin // CHECK-NEXT:         "[[PREFIX]]/Inputs/frameworks/module.modulemap"
9668eb3b20SArtem Chikin // CHECK-NEXT:       ],
9768eb3b20SArtem Chikin // CHECK-NEXT:       "link-libraries": [],
9868eb3b20SArtem Chikin // CHECK-NEXT:       "name": "root"
9968eb3b20SArtem Chikin // CHECK-NEXT:     },
10068eb3b20SArtem Chikin // CHECK-NEXT:     {
10168eb3b20SArtem Chikin // CHECK-NEXT:       "clang-module-deps": [],
10268eb3b20SArtem Chikin // CHECK-NEXT:       "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
10368eb3b20SArtem Chikin // CHECK-NEXT:       "command-line": [
10468eb3b20SArtem Chikin // CHECK:            ],
10568eb3b20SArtem Chikin // CHECK-NEXT:       "context-hash": "{{.*}}",
10668eb3b20SArtem Chikin // CHECK-NEXT:       "file-deps": [
107*9d4837f4SJan Svoboda // CHECK-NEXT:         "[[PREFIX]]/module.modulemap",
10868eb3b20SArtem Chikin // CHECK-NEXT:         "[[PREFIX]]/transitive.h"
10968eb3b20SArtem Chikin // CHECK-NEXT:       ],
11068eb3b20SArtem Chikin // CHECK-NEXT:       "link-libraries": [
11168eb3b20SArtem Chikin // CHECK-NEXT:         {
11268eb3b20SArtem Chikin // CHECK-NEXT:           "isFramework": true,
11368eb3b20SArtem Chikin // CHECK-NEXT:           "link-name": "libTransitive"
11468eb3b20SArtem Chikin // CHECK-NEXT:         }
11568eb3b20SArtem Chikin // CHECK-NEXT:       ],
11668eb3b20SArtem Chikin // CHECK-NEXT:       "name": "transitive"
11768eb3b20SArtem Chikin // CHECK-NEXT:     }
11868eb3b20SArtem Chikin // CHECK-NEXT:   ],
11968eb3b20SArtem Chikin // CHECK-NEXT:   "translation-units": []
12068eb3b20SArtem Chikin // CHECK-NEXT: }
121