194e64df5SJan Svoboda// This test checks that modules loaded during compilation (but not imported) 294e64df5SJan Svoboda// are still reported as dependencies. 394e64df5SJan Svoboda 494e64df5SJan Svoboda// RUN: rm -rf %t && mkdir %t 594e64df5SJan Svoboda// RUN: split-file %s %t 694e64df5SJan Svoboda 794e64df5SJan Svoboda//--- frameworks/FW.framework/Modules/module.modulemap 894e64df5SJan Svobodaframework module FW { umbrella header "FW.h" } 994e64df5SJan Svoboda//--- frameworks/FW.framework/Headers/FW.h 1094e64df5SJan Svoboda//--- frameworks/FW.framework/Modules/module.private.modulemap 1194e64df5SJan Svobodaframework module FW_Private { umbrella header "FW_Private.h" } 1294e64df5SJan Svoboda//--- frameworks/FW.framework/PrivateHeaders/FW_Private.h 1394e64df5SJan Svoboda 1494e64df5SJan Svoboda//--- cdb.json.template 1594e64df5SJan Svoboda[{ 1694e64df5SJan Svoboda "file": "DIR/tu.m", 1794e64df5SJan Svoboda "directory": "DIR", 18f33173acSJan Svoboda "command": "clang -fmodules -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/tu.m -o DIR/tu.o" 1994e64df5SJan Svoboda}] 2094e64df5SJan Svoboda//--- tu.m 2194e64df5SJan Svoboda@import FW.Private; 2294e64df5SJan Svoboda 2394e64df5SJan Svoboda// RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json 2494e64df5SJan Svoboda// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/result.json 2594e64df5SJan Svoboda// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t 2694e64df5SJan Svoboda// CHECK: { 2794e64df5SJan Svoboda// CHECK-NEXT: "modules": [ 2894e64df5SJan Svoboda// CHECK-NEXT: { 2983902c40SBen Langmuir// CHECK: "clang-module-deps": [], 3094e64df5SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 3194e64df5SJan Svoboda// CHECK-NEXT: "command-line": [ 3294e64df5SJan Svoboda// CHECK: ], 3394e64df5SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 3483902c40SBen Langmuir// CHECK: "file-deps": [ 35*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 36*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Headers/FW.h" 3794e64df5SJan Svoboda// CHECK-NEXT: ], 3868eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [ 3968eb3b20SArtem Chikin// CHECK-NEXT: { 4068eb3b20SArtem Chikin// CHECK-NEXT: "isFramework": true, 4168eb3b20SArtem Chikin// CHECK-NEXT: "link-name": "FW" 4268eb3b20SArtem Chikin// CHECK-NEXT: } 4368eb3b20SArtem Chikin// CHECK-NEXT: ], 4494e64df5SJan Svoboda// CHECK-NEXT: "name": "FW" 4583902c40SBen Langmuir// CHECK: }, 4683902c40SBen Langmuir// CHECK: { 4783902c40SBen Langmuir// CHECK: "clang-module-deps": [], 4894e64df5SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 4994e64df5SJan Svoboda// CHECK-NEXT: "command-line": [ 5094e64df5SJan Svoboda// CHECK: ], 5194e64df5SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 5283902c40SBen Langmuir// CHECK: "file-deps": [ 5394e64df5SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 5494e64df5SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h" 5594e64df5SJan Svoboda// CHECK-NEXT: ], 5668eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [ 5768eb3b20SArtem Chikin// CHECK-NEXT: { 5868eb3b20SArtem Chikin// CHECK-NEXT: "isFramework": true, 5968eb3b20SArtem Chikin// CHECK-NEXT: "link-name": "FW" 6068eb3b20SArtem Chikin// CHECK-NEXT: } 6168eb3b20SArtem Chikin// CHECK-NEXT: ], 6294e64df5SJan Svoboda// CHECK-NEXT: "name": "FW_Private" 6383902c40SBen Langmuir// CHECK: } 6483902c40SBen Langmuir// CHECK: ], 6594e64df5SJan Svoboda// CHECK-NEXT: "translation-units": [ 6694e64df5SJan Svoboda// CHECK-NEXT: { 6783902c40SBen Langmuir// CHECK: "clang-context-hash": "{{.*}}", 6894e64df5SJan Svoboda// CHECK-NEXT: "clang-module-deps": [ 6994e64df5SJan Svoboda// CHECK-NEXT: { 7094e64df5SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 7194e64df5SJan Svoboda// CHECK-NEXT: "module-name": "FW" 7294e64df5SJan Svoboda// CHECK-NEXT: }, 7394e64df5SJan Svoboda// CHECK-NEXT: { 7494e64df5SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 7594e64df5SJan Svoboda// CHECK-NEXT: "module-name": "FW_Private" 7694e64df5SJan Svoboda// CHECK-NEXT: } 7794e64df5SJan Svoboda// CHECK-NEXT: ], 7894e64df5SJan Svoboda// CHECK-NEXT: "command-line": [ 791877d76aSBen Langmuir// CHECK: "-fmodule-file={{.*}}/FW-{{.*}}.pcm" 8083902c40SBen Langmuir// CHECK: "-fmodule-file={{.*}}/FW_Private-{{.*}}.pcm" 8194e64df5SJan Svoboda// CHECK: ], 8283902c40SBen Langmuir// CHECK: "file-deps": [ 8394e64df5SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/tu.m" 8494e64df5SJan Svoboda// CHECK-NEXT: ], 8594e64df5SJan Svoboda// CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m" 8694e64df5SJan Svoboda// CHECK-NEXT: } 8794e64df5SJan Svoboda 8894e64df5SJan Svoboda// RUN: %deps-to-rsp %t/result.json --module-name=FW > %t/FW.cc1.rsp 8994e64df5SJan Svoboda// RUN: %deps-to-rsp %t/result.json --module-name=FW_Private > %t/FW_Private.cc1.rsp 9094e64df5SJan Svoboda// RUN: %deps-to-rsp %t/result.json --tu-index=0 > %t/tu.rsp 9194e64df5SJan Svoboda// RUN: %clang @%t/FW.cc1.rsp 9294e64df5SJan Svoboda// RUN: %clang @%t/FW_Private.cc1.rsp 9394e64df5SJan Svoboda// RUN: %clang @%t/tu.rsp 94