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