137 lines · plain
1// This test checks that only module map files defining affecting modules are2// affecting.3 4// RUN: rm -rf %t5// RUN: split-file %s %t6 7//--- tu.m8@import zeroth;9 10//--- zeroth/module.modulemap11module zeroth { header "zeroth.h" }12//--- zeroth/zeroth.h13@import first;14#include "second.h"15 16//--- first/module.modulemap17module first {}18module first_other { header "first_other.h" }19//--- first/first_other.h20 21//--- second/module.modulemap22extern module second "second.modulemap"23//--- second/second.modulemap24module second { header "second.h" }25//--- second/second.h26#include "first_other.h"27 28// RUN: clang-scan-deps -format experimental-full -o %t/result.json \29// RUN: -- %clang -fmodules -fmodules-cache-path=%t/cache -I %t/zeroth -I %t/first -I %t/second -c %t/tu.m -o %t/tu.o30// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t31 32// CHECK: {33// CHECK-NEXT: "modules": [34// CHECK-NEXT: {35// CHECK-NEXT: "clang-module-deps": [],36// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/first/module.modulemap",37// CHECK-NEXT: "command-line": [38// CHECK: ],39// CHECK-NEXT: "context-hash": "{{.*}}",40// CHECK-NEXT: "file-deps": [41// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap"42// CHECK-NEXT: ],43// CHECK-NEXT: "link-libraries": [],44// CHECK-NEXT: "name": "first"45// CHECK-NEXT: },46// CHECK-NEXT: {47// CHECK-NEXT: "clang-module-deps": [],48// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/first/module.modulemap",49// CHECK-NEXT: "command-line": [50// CHECK: ],51// CHECK-NEXT: "context-hash": "{{.*}}",52// CHECK-NEXT: "file-deps": [53// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap",54// CHECK-NEXT: "[[PREFIX]]/first/first_other.h"55// CHECK-NEXT: ],56// CHECK-NEXT: "link-libraries": [],57// CHECK-NEXT: "name": "first_other"58// CHECK-NEXT: },59// CHECK-NEXT: {60// CHECK-NEXT: "clang-module-deps": [61// CHECK-NEXT: {62// CHECK-NEXT: "context-hash": "{{.*}}",63// CHECK-NEXT: "module-name": "first_other"64// CHECK-NEXT: }65// CHECK-NEXT: ],66// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/second/second.modulemap",67// CHECK-NEXT: "command-line": [68// CHECK-NOT: "-fmodule-map-file=[[PREFIX]]/second/module.modulemap"69// CHECK: ],70// CHECK-NEXT: "context-hash": "{{.*}}",71// CHECK-NEXT: "file-deps": [72// CHECK-NEXT: "[[PREFIX]]/second/second.modulemap",73// CHECK-NEXT: "[[PREFIX]]/second/second.h",74// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap"75// CHECK-NEXT: ],76// CHECK-NEXT: "link-libraries": [],77// CHECK-NEXT: "name": "second"78// CHECK-NEXT: },79// CHECK-NEXT: {80// CHECK-NEXT: "clang-module-deps": [81// CHECK-NEXT: {82// CHECK-NEXT: "context-hash": "{{.*}}",83// CHECK-NEXT: "module-name": "first"84// CHECK-NEXT: },85// CHECK-NEXT: {86// CHECK-NEXT: "context-hash": "{{.*}}",87// CHECK-NEXT: "module-name": "second"88// CHECK-NEXT: }89// CHECK-NEXT: ],90// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/zeroth/module.modulemap",91// CHECK-NEXT: "command-line": [92// CHECK-NOT: "-fmodule-map-file=[[PREFIX]]/second/module.modulemap"93// CHECK: ],94// CHECK-NEXT: "context-hash": "{{.*}}",95// CHECK-NEXT: "file-deps": [96// CHECK-NEXT: "[[PREFIX]]/zeroth/module.modulemap",97// CHECK-NEXT: "[[PREFIX]]/zeroth/zeroth.h",98// CHECK-NEXT: "[[PREFIX]]/first/module.modulemap",99// CHECK-NEXT: "[[PREFIX]]/second/second.modulemap"100// CHECK-NEXT: ],101// CHECK-NEXT: "link-libraries": [],102// CHECK-NEXT: "name": "zeroth"103// CHECK-NEXT: }104// CHECK-NEXT: ],105// CHECK-NEXT: "translation-units": [106// CHECK-NEXT: {107// CHECK-NEXT: "commands": [108// CHECK-NEXT: {109// CHECK-NEXT: "clang-context-hash": "{{.*}}",110// CHECK-NEXT: "clang-module-deps": [111// CHECK-NEXT: {112// CHECK-NEXT: "context-hash": "{{.*}}",113// CHECK-NEXT: "module-name": "zeroth"114// CHECK-NEXT: }115// CHECK-NEXT: ],116// CHECK-NEXT: "command-line": [117// CHECK: ],118// CHECK-NEXT: "executable": "{{.*}}",119// CHECK-NEXT: "file-deps": [120// CHECK-NEXT: "[[PREFIX]]/tu.m"121// CHECK-NEXT: ],122// CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m"123// CHECK-NEXT: }124// CHECK: ]125// CHECK: }126// CHECK: ]127// CHECK: }128 129// RUN: %deps-to-rsp --module-name=first %t/result.json > %t/first.cc1.rsp130// RUN: %deps-to-rsp --module-name=first_other %t/result.json > %t/first_other.cc1.rsp131// RUN: %deps-to-rsp --module-name=second %t/result.json > %t/second.cc1.rsp132// RUN: %deps-to-rsp --module-name=zeroth %t/result.json > %t/zeroth.cc1.rsp133// RUN: %clang @%t/first.cc1.rsp134// RUN: %clang @%t/first_other.cc1.rsp135// RUN: %clang @%t/second.cc1.rsp136// RUN: %clang @%t/zeroth.cc1.rsp137