1477c705cSJan Svoboda// This test checks that only module map files defining affecting modules are 2477c705cSJan Svoboda// affecting. 3477c705cSJan Svoboda 450fd6604SJan Svoboda// RUN: rm -rf %t 550fd6604SJan Svoboda// RUN: split-file %s %t 650fd6604SJan Svoboda 750fd6604SJan Svoboda//--- tu.m 850fd6604SJan Svoboda@import zeroth; 950fd6604SJan Svoboda 1050fd6604SJan Svoboda//--- zeroth/module.modulemap 1150fd6604SJan Svobodamodule zeroth { header "zeroth.h" } 1250fd6604SJan Svoboda//--- zeroth/zeroth.h 1350fd6604SJan Svoboda@import first; 1450fd6604SJan Svoboda#include "second.h" 1550fd6604SJan Svoboda 1650fd6604SJan Svoboda//--- first/module.modulemap 1750fd6604SJan Svobodamodule first {} 1850fd6604SJan Svobodamodule first_other { header "first_other.h" } 1950fd6604SJan Svoboda//--- first/first_other.h 2050fd6604SJan Svoboda 2150fd6604SJan Svoboda//--- second/module.modulemap 2250fd6604SJan Svobodaextern module second "second.modulemap" 2350fd6604SJan Svoboda//--- second/second.modulemap 2450fd6604SJan Svobodamodule second { header "second.h" } 2550fd6604SJan Svoboda//--- second/second.h 2650fd6604SJan Svoboda#include "first_other.h" 2750fd6604SJan Svoboda 28477c705cSJan Svoboda// RUN: clang-scan-deps -format experimental-full -o %t/result.json \ 29477c705cSJan Svoboda// RUN: -- %clang -fmodules -fmodules-cache-path=%t/cache -I %t/zeroth -I %t/first -I %t/second -c %t/tu.m -o %t/tu.o 3050fd6604SJan Svoboda// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t 3150fd6604SJan Svoboda 3250fd6604SJan Svoboda// CHECK: { 3350fd6604SJan Svoboda// CHECK-NEXT: "modules": [ 3450fd6604SJan Svoboda// CHECK-NEXT: { 3550fd6604SJan Svoboda// CHECK-NEXT: "clang-module-deps": [], 3650fd6604SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/first/module.modulemap", 3750fd6604SJan Svoboda// CHECK-NEXT: "command-line": [ 3850fd6604SJan Svoboda// CHECK: ], 3950fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 4050fd6604SJan Svoboda// CHECK-NEXT: "file-deps": [ 4150fd6604SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap" 4250fd6604SJan Svoboda// CHECK-NEXT: ], 4368eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [], 4450fd6604SJan Svoboda// CHECK-NEXT: "name": "first" 4550fd6604SJan Svoboda// CHECK-NEXT: }, 4650fd6604SJan Svoboda// CHECK-NEXT: { 4750fd6604SJan Svoboda// CHECK-NEXT: "clang-module-deps": [], 4850fd6604SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/first/module.modulemap", 4950fd6604SJan Svoboda// CHECK-NEXT: "command-line": [ 5050fd6604SJan Svoboda// CHECK: ], 5150fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 5250fd6604SJan Svoboda// CHECK-NEXT: "file-deps": [ 53*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap", 54*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/first/first_other.h" 5550fd6604SJan Svoboda// CHECK-NEXT: ], 5668eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [], 5750fd6604SJan Svoboda// CHECK-NEXT: "name": "first_other" 5850fd6604SJan Svoboda// CHECK-NEXT: }, 5950fd6604SJan Svoboda// CHECK-NEXT: { 6050fd6604SJan Svoboda// CHECK-NEXT: "clang-module-deps": [ 6150fd6604SJan Svoboda// CHECK-NEXT: { 6250fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 6350fd6604SJan Svoboda// CHECK-NEXT: "module-name": "first_other" 6450fd6604SJan Svoboda// CHECK-NEXT: } 6550fd6604SJan Svoboda// CHECK-NEXT: ], 6650fd6604SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/second/second.modulemap", 6750fd6604SJan Svoboda// CHECK-NEXT: "command-line": [ 68477c705cSJan Svoboda// CHECK-NOT: "-fmodule-map-file=[[PREFIX]]/second/module.modulemap" 6950fd6604SJan Svoboda// CHECK: ], 7050fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 7150fd6604SJan Svoboda// CHECK-NEXT: "file-deps": [ 72*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/second/second.modulemap", 7350fd6604SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/second/second.h", 74*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap" 7550fd6604SJan Svoboda// CHECK-NEXT: ], 7668eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [], 7750fd6604SJan Svoboda// CHECK-NEXT: "name": "second" 7850fd6604SJan Svoboda// CHECK-NEXT: }, 7950fd6604SJan Svoboda// CHECK-NEXT: { 8050fd6604SJan Svoboda// CHECK-NEXT: "clang-module-deps": [ 8150fd6604SJan Svoboda// CHECK-NEXT: { 8250fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 8350fd6604SJan Svoboda// CHECK-NEXT: "module-name": "first" 8450fd6604SJan Svoboda// CHECK-NEXT: }, 8550fd6604SJan Svoboda// CHECK-NEXT: { 8650fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 8750fd6604SJan Svoboda// CHECK-NEXT: "module-name": "second" 8850fd6604SJan Svoboda// CHECK-NEXT: } 8950fd6604SJan Svoboda// CHECK-NEXT: ], 9050fd6604SJan Svoboda// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/zeroth/module.modulemap", 9150fd6604SJan Svoboda// CHECK-NEXT: "command-line": [ 92477c705cSJan Svoboda// CHECK-NOT: "-fmodule-map-file=[[PREFIX]]/second/module.modulemap" 9350fd6604SJan Svoboda// CHECK: ], 9450fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 9550fd6604SJan Svoboda// CHECK-NEXT: "file-deps": [ 9650fd6604SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/zeroth/module.modulemap", 97*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/zeroth/zeroth.h", 98*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap", 99*9d4837f4SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/second/second.modulemap" 10050fd6604SJan Svoboda// CHECK-NEXT: ], 10168eb3b20SArtem Chikin// CHECK-NEXT: "link-libraries": [], 10250fd6604SJan Svoboda// CHECK-NEXT: "name": "zeroth" 10350fd6604SJan Svoboda// CHECK-NEXT: } 10450fd6604SJan Svoboda// CHECK-NEXT: ], 10550fd6604SJan Svoboda// CHECK-NEXT: "translation-units": [ 10650fd6604SJan Svoboda// CHECK-NEXT: { 10750fd6604SJan Svoboda// CHECK-NEXT: "commands": [ 10850fd6604SJan Svoboda// CHECK-NEXT: { 10950fd6604SJan Svoboda// CHECK-NEXT: "clang-context-hash": "{{.*}}", 11050fd6604SJan Svoboda// CHECK-NEXT: "clang-module-deps": [ 11150fd6604SJan Svoboda// CHECK-NEXT: { 11250fd6604SJan Svoboda// CHECK-NEXT: "context-hash": "{{.*}}", 11350fd6604SJan Svoboda// CHECK-NEXT: "module-name": "zeroth" 11450fd6604SJan Svoboda// CHECK-NEXT: } 11550fd6604SJan Svoboda// CHECK-NEXT: ], 11650fd6604SJan Svoboda// CHECK-NEXT: "command-line": [ 11750fd6604SJan Svoboda// CHECK: ], 118477c705cSJan Svoboda// CHECK-NEXT: "executable": "{{.*}}", 11950fd6604SJan Svoboda// CHECK-NEXT: "file-deps": [ 12050fd6604SJan Svoboda// CHECK-NEXT: "[[PREFIX]]/tu.m" 12150fd6604SJan Svoboda// CHECK-NEXT: ], 12250fd6604SJan Svoboda// CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m" 12350fd6604SJan Svoboda// CHECK-NEXT: } 124d3804b88SJan Svoboda// CHECK: ] 125d3804b88SJan Svoboda// CHECK: } 126d3804b88SJan Svoboda// CHECK: ] 127d3804b88SJan Svoboda// CHECK: } 12850fd6604SJan Svoboda 12950fd6604SJan Svoboda// RUN: %deps-to-rsp --module-name=first %t/result.json > %t/first.cc1.rsp 13050fd6604SJan Svoboda// RUN: %deps-to-rsp --module-name=first_other %t/result.json > %t/first_other.cc1.rsp 13150fd6604SJan Svoboda// RUN: %deps-to-rsp --module-name=second %t/result.json > %t/second.cc1.rsp 13250fd6604SJan Svoboda// RUN: %deps-to-rsp --module-name=zeroth %t/result.json > %t/zeroth.cc1.rsp 13350fd6604SJan Svoboda// RUN: %clang @%t/first.cc1.rsp 13450fd6604SJan Svoboda// RUN: %clang @%t/first_other.cc1.rsp 13550fd6604SJan Svoboda// RUN: %clang @%t/second.cc1.rsp 13650fd6604SJan Svoboda// RUN: %clang @%t/zeroth.cc1.rsp 137