| // Ensure that the spelling of a path seen outside a module (e.g. header via |
| // symlink) does not leak into the compilation of that module unnecessarily. |
| // Note: the spelling of the modulemap path still depends on the includer, since |
| // that is the only source of information about it. |
| |
| // REQUIRES: shell |
| |
| // RUN: rm -rf %t |
| // RUN: split-file %s %t |
| // RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.in > %t/cdb.json |
| // RUN: ln -s A.h %t/Z.h |
| |
| // RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 -format experimental-full \ |
| // RUN: -mode preprocess-dependency-directives > %t/output |
| // RUN: FileCheck %s < %t/output |
| |
| // CHECK: "modules": [ |
| // CHECK-NEXT: { |
| // CHECK: "file-deps": [ |
| // CHECK-NEXT: "{{.*}}A.h", |
| // CHECK-NEXT: "{{.*}}module.modulemap" |
| // CHECK-NEXT: ], |
| // CHECK-NEXT: "name": "A" |
| // CHECK-NEXT: } |
| |
| //--- cdb.json.in |
| [{ |
| "directory": "DIR", |
| "command": "clang -fsyntax-only DIR/tu.c -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps", |
| "file": "DIR/tu.c" |
| }] |
| |
| //--- module.modulemap |
| module A { header "A.h" } |
| module B { header "B.h" } |
| module C { header "C.h" } |
| |
| //--- A.h |
| |
| //--- B.h |
| #include "Z.h" |
| |
| //--- tu.c |
| #include "B.h" |