132 lines · c
1// REQUIRES: symlinks2 3// Check that we canonicalize the module map path without changing the module4// directory, which would break header lookup.5 6// RUN: rm -rf %t7// RUN: split-file %s %t8// RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.in > %t/cdb.json9// RUN: ln -s module %t/symlink-to-module10// RUN: ln -s ../actual.modulemap %t/module/module.modulemap11// RUN: ln -s A %t/module/F.framework/Versions/Current12// RUN: ln -s Versions/Current/Modules %t/module/F.framework/Modules13// RUN: ln -s Versions/Current/Headers %t/module/F.framework/Headers14 15// RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 \16// RUN: -format experimental-full -mode=preprocess-dependency-directives \17// RUN: -optimize-args=all -module-files-dir %t/build > %t/deps.json18 19// RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s20 21// Check the module commands actually build.22// RUN: %deps-to-rsp %t/deps.json --module-name=Mod > %t/Mod.rsp23// RUN: %deps-to-rsp %t/deps.json --module-name=F > %t/F.rsp24// RUN: %clang @%t/Mod.rsp25// RUN: %clang @%t/F.rsp26 27// CHECK: "modules": [28// CHECK: {29// CHECK: "clang-module-deps": [],30// CHECK: "clang-modulemap-file": "[[PREFIX]]/module/F.framework/Modules/module.modulemap"31// CHECK: "command-line": [32// CHECK-NOT: symlink-to-module33// CHECK: "[[PREFIX]]/module/F.framework/Modules/module.modulemap"34// CHECK-NOT: symlink-to-module35// CHECK: ]36// CHECK: "context-hash": "[[F_CONTEXT_HASH:[A-Z0-9]+]]"37// CHECK: "name": "F"38// CHECK-NEXT: }39// CHECK-NEXT: {40// CHECK: "clang-modulemap-file": "[[PREFIX]]/module/module.modulemap"41// CHECK: "command-line": [42// CHECK-NOT: symlink-to-module43// CHECK: "[[PREFIX]]/module/module.modulemap"44// CHECK-NOT: symlink-to-module45// CHECK: ]46// CHECK: "context-hash": "[[CONTEXT_HASH:[A-Z0-9]+]]"47// CHECK: "name": "Mod"48// CHECK-NEXT: }49// CHECK-NEXT: ]50// CHECK: "translation-units": [51// CHECK: "clang-module-deps": [52// CHECK: {53// CHECK: "context-hash": "[[CONTEXT_HASH]]"54// CHECK: "module-name": "Mod"55// CHECK: }56// CHECK-NEXT: ],57// CHECK: "command-line": [58// CHECK: "-fmodule-map-file=[[PREFIX]]/module/module.modulemap"59// CHECK: ]60// CHECK: "clang-module-deps": [61// CHECK: {62// CHECK: "context-hash": "[[CONTEXT_HASH]]"63// CHECK: "module-name": "Mod"64// CHECK: }65// CHECK-NEXT: ]66// CHECK: "command-line": [67// CHECK: "-fmodule-map-file=[[PREFIX]]/module/module.modulemap"68// CHECK: ]69// CHECK: "clang-module-deps": [70// CHECK: {71// CHECK: "context-hash": "[[F_CONTEXT_HASH]]"72// CHECK: "module-name": "F"73// CHECK: }74// CHECK-NEXT: ]75// CHECK: "command-line": [76// CHECK: "-fmodule-map-file=[[PREFIX]]/module/F.framework/Modules/module.modulemap"77// CHECK: ]78// CHECK: "clang-module-deps": [79// CHECK: {80// CHECK: "context-hash": "[[F_CONTEXT_HASH]]"81// CHECK: "module-name": "F"82// CHECK: }83// CHECK-NEXT: ]84// CHECK: "command-line": [85// CHECK: "-fmodule-map-file=[[PREFIX]]/module/F.framework/Modules/module.modulemap"86// CHECK: ]87 88//--- cdb.json.in89[90 {91 "directory": "DIR",92 "command": "clang -fsyntax-only DIR/tu1.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",93 "file": "DIR/tu1.c"94 },95 {96 "directory": "DIR",97 "command": "clang -fsyntax-only DIR/tu2.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",98 "file": "DIR/tu2.c"99 },100 {101 "directory": "DIR",102 "command": "clang -fsyntax-only -F DIR/symlink-to-module DIR/tu3.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",103 "file": "DIR/tu3.c"104 },105 {106 "directory": "DIR",107 "command": "clang -fsyntax-only -F DIR/module DIR/tu3.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",108 "file": "DIR/tu3.c"109 },110]111 112//--- actual.modulemap113module Mod { header "header.h" }114 115//--- module/header.h116 117//--- tu1.c118#include "symlink-to-module/header.h"119 120//--- tu2.c121#include "module/header.h"122 123//--- module/F.framework/Versions/A/Modules/module.modulemap124framework module F {125 umbrella header "F.h"126}127 128//--- module/F.framework/Versions/A/Headers/F.h129 130//--- tu3.c131#include "F/F.h"132