184 lines · cpp
1// RUN: rm -rf %t.dir2// RUN: rm -rf %t.cdb3// RUN: mkdir -p %t.dir4// RUN: cp %s %t.dir/modules_cdb_input.cpp5// RUN: cp %s %t.dir/modules_cdb_input2.cpp6// RUN: mkdir %t.dir/Inputs7// RUN: cp %S/Inputs/header.h %t.dir/Inputs/header.h8// RUN: cp %S/Inputs/header2.h %t.dir/Inputs/header2.h9// RUN: cp %S/Inputs/module.modulemap %t.dir/Inputs/module.modulemap10// RUN: sed -e "s|DIR|%/t.dir|g" %S/Inputs/modules_cdb.json > %t.cdb11// RUN: sed -e "s|DIR|%/t.dir|g" %S/Inputs/modules_cdb_clangcl.json > %t_clangcl.cdb12//13// RUN: clang-scan-deps -compilation-database %t.cdb -j 4 -format experimental-full \14// RUN: -mode preprocess-dependency-directives > %t.result15// RUN: cat %t.result | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t.dir %s16//17// RUN: clang-scan-deps -compilation-database %t_clangcl.cdb -j 4 -format experimental-full \18// RUN: -mode preprocess-dependency-directives > %t_clangcl.result19// RUN: cat %t_clangcl.result | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t.dir %s20 21#include "header.h"22 23// CHECK: {24// CHECK-NEXT: "modules": [25// CHECK-NEXT: {26// CHECK-NEXT: "clang-module-deps": [27// CHECK-NEXT: {28// CHECK-NEXT: "context-hash": "[[HASH_H2_DINCLUDE:[A-Z0-9]+]]",29// CHECK-NEXT: "module-name": "header2"30// CHECK-NEXT: }31// CHECK-NEXT: ],32// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/Inputs/module.modulemap",33// CHECK-NEXT: "command-line": [34// CHECK-NEXT: "-cc1"35// CHECK: "-emit-module"36// CHECK: "-fno-modules-prune-non-affecting-module-map-files"37// CHECK: "-fmodule-file={{.*}}[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H2_DINCLUDE]]/header2-{{[A-Z0-9]+}}.pcm"38// CHECK-NOT: "-fimplicit-module-maps"39// CHECK: "-fmodule-name=header1"40// CHECK: "-fno-implicit-modules"41// CHECK: ],42// CHECK-NEXT: "context-hash": "[[HASH_H1_DINCLUDE:[A-Z0-9]+]]",43// CHECK-NEXT: "file-deps": [44// CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap",45// CHECK-NEXT: "[[PREFIX]]/Inputs/header.h"46// CHECK-NEXT: ],47// CHECK-NEXT: "link-libraries": [],48// CHECK-NEXT: "name": "header1"49// CHECK-NEXT: },50// CHECK-NEXT: {51// CHECK-NEXT: "clang-module-deps": [],52// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/Inputs/module.modulemap",53// CHECK-NEXT: "command-line": [54// CHECK-NEXT: "-cc1",55// CHECK: "-emit-module",56// CHECK: "-fno-modules-prune-non-affecting-module-map-files"57// CHECK-NOT: "-fimplicit-module-maps",58// CHECK: "-fmodule-name=header1",59// CHECK: "-fno-implicit-modules",60// CHECK: ],61// CHECK-NEXT: "context-hash": "[[HASH_H1:[A-Z0-9]+]]",62// CHECK-NEXT: "file-deps": [63// CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap",64// CHECK-NEXT: "[[PREFIX]]/Inputs/header.h"65// CHECK-NEXT: ],66// CHECK-NEXT: "link-libraries": [],67// CHECK-NEXT: "name": "header1"68// CHECK-NEXT: },69// CHECK-NEXT: {70// CHECK-NEXT: "clang-module-deps": [],71// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/Inputs/module.modulemap",72// CHECK-NEXT: "command-line": [73// CHECK-NEXT: "-cc1",74// CHECK: "-emit-module",75// CHECK: "-fno-modules-prune-non-affecting-module-map-files"76// CHECK: "-fmodule-name=header2",77// CHECK-NOT: "-fimplicit-module-maps",78// CHECK: "-fno-implicit-modules",79// CHECK: ],80// CHECK-NEXT: "context-hash": "[[HASH_H2_DINCLUDE]]",81// CHECK-NEXT: "file-deps": [82// CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap",83// CHECK-NEXT: "[[PREFIX]]/Inputs/header2.h"84// CHECK-NEXT: ],85// CHECK-NEXT: "link-libraries": [],86// CHECK-NEXT: "name": "header2"87// CHECK-NEXT: }88// CHECK-NEXT: ],89// CHECK-NEXT: "translation-units": [90// CHECK-NEXT: {91// CHECK-NEXT: "commands": [92// CHECK-NEXT: {93// CHECK-NEXT: "clang-context-hash": "[[HASH_TU_DINCLUDE:[A-Z0-9]+]]",94// CHECK-NEXT: "clang-module-deps": [95// CHECK-NEXT: {96// CHECK-NEXT: "context-hash": "[[HASH_H1_DINCLUDE]]",97// CHECK-NEXT: "module-name": "header1"98// CHECK-NEXT: }99// CHECK-NEXT: ],100// CHECK-NEXT: "command-line": [101// CHECK-NOT: "-fimplicit-modules"102// CHECK-NOT: "-fimplicit-module-maps"103// CHECK: "-fmodule-file={{.*}}[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm"104// CHECK: ],105// CHECK-NEXT: "executable": "{{.*}}clang{{.*}}"106// CHECK-NEXT: "file-deps": [107// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input2.cpp"108// CHECK-NEXT: ],109// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input2.cpp"110// CHECK-NEXT: }111// CHECK-NEXT: ]112// CHECK-NEXT: },113// CHECK-NEXT: {114// CHECK-NEXT: "commands": [115// CHECK-NEXT: {116// CHECK-NEXT: "clang-context-hash": "[[HASH_TU:[A-Z0-9]+]]",117// CHECK-NEXT: "clang-module-deps": [118// CHECK-NEXT: {119// CHECK-NEXT: "context-hash": "[[HASH_H1]]",120// CHECK-NEXT: "module-name": "header1"121// CHECK-NEXT: }122// CHECK-NEXT: ],123// CHECK-NEXT: "command-line": [124// CHECK-NOT: "-fimplicit-modules"125// CHECK-NOT: "-fimplicit-module-maps"126// CHECK: "-fmodule-file={{.*}}[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm"127// CHECK: ],128// CHECK-NEXT: "executable": "{{.*}}clang{{.*}}"129// CHECK-NEXT: "file-deps": [130// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp"131// CHECK-NEXT: ],132// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input.cpp"133// CHECK-NEXT: }134// CHECK-NEXT: ]135// CHECK-NEXT: },136// CHECK-NEXT: {137// CHECK-NEXT: "commands": [138// CHECK-NEXT: {139// CHECK-NEXT: "clang-context-hash": "[[HASH_TU:[A-Z0-9]+]]",140// CHECK-NEXT: "clang-module-deps": [141// CHECK-NEXT: {142// CHECK-NEXT: "context-hash": "[[HASH_H1]]",143// CHECK-NEXT: "module-name": "header1"144// CHECK-NEXT: }145// CHECK-NEXT: ],146// CHECK-NEXT: "command-line": [147// CHECK-NOT: "-fimplicit-modules"148// CHECK-NOT: "-fimplicit-module-maps"149// CHECK: "-fmodule-file={{.*}}[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm"150// CHECK: ],151// CHECK-NEXT: "executable": "{{.*}}clang{{.*}}"152// CHECK-NEXT: "file-deps": [153// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp"154// CHECK-NEXT: ],155// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input.cpp"156// CHECK-NEXT: }157// CHECK-NEXT: ]158// CHECK-NEXT: },159// CHECK-NEXT: {160// CHECK-NEXT: "commands": [161// CHECK-NEXT: {162// CHECK-NEXT: "clang-context-hash": "[[HASH_TU:[A-Z0-9]+]]",163// CHECK-NEXT: "clang-module-deps": [164// CHECK-NEXT: {165// CHECK-NEXT: "context-hash": "[[HASH_H1]]",166// CHECK-NEXT: "module-name": "header1"167// CHECK-NEXT: }168// CHECK-NEXT: ],169// CHECK-NEXT: "command-line": [170// CHECK-NOT: "-fimplicit-modules"171// CHECK-NOT: "-fimplicit-module-maps"172// CHECK: "-fmodule-file={{.*}}[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm"173// CHECK: ],174// CHECK-NEXT: "executable": "{{.*}}clang{{.*}}"175// CHECK-NEXT: "file-deps": [176// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp"177// CHECK-NEXT: ],178// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input.cpp"179// CHECK-NEXT: }180// CHECK-NEXT: ]181// CHECK-NEXT: }182// CHECK-NEXT: ]183// CHECK-NEXT: }184