1002bfdd6SJan Svoboda // This test checks that modules loaded during compilation (but not imported) 2002bfdd6SJan Svoboda // are still reported as dependencies. 3002bfdd6SJan Svoboda 4002bfdd6SJan Svoboda // RUN: rm -rf %t && mkdir %t 5002bfdd6SJan Svoboda // RUN: split-file %s %t 6002bfdd6SJan Svoboda 7002bfdd6SJan Svoboda //--- frameworks/FW.framework/Modules/module.modulemap 8002bfdd6SJan Svoboda framework module FW { 9002bfdd6SJan Svoboda umbrella header "FW.h" 10002bfdd6SJan Svoboda module * { export * } 11002bfdd6SJan Svoboda } 12002bfdd6SJan Svoboda //--- frameworks/FW.framework/Headers/FW.h 13002bfdd6SJan Svoboda //--- frameworks/FW.framework/Modules/module.private.modulemap 14002bfdd6SJan Svoboda framework module FW_Private { 15002bfdd6SJan Svoboda umbrella header "FW_Private.h" 16002bfdd6SJan Svoboda module * { export * } 17002bfdd6SJan Svoboda } 18002bfdd6SJan Svoboda //--- frameworks/FW.framework/PrivateHeaders/FW_Private.h 19002bfdd6SJan Svoboda #include "One.h" 20002bfdd6SJan Svoboda //--- frameworks/FW.framework/PrivateHeaders/One.h 21002bfdd6SJan Svoboda //--- frameworks/FW.framework/PrivateHeaders/Two.h 22002bfdd6SJan Svoboda 23002bfdd6SJan Svoboda // Let's check we report the non-imported modular dependencies for a translation unit. 24002bfdd6SJan Svoboda 25002bfdd6SJan Svoboda //--- from_tu.cdb.json.template 26002bfdd6SJan Svoboda [{ 27002bfdd6SJan Svoboda "file": "DIR/from_tu.m", 28002bfdd6SJan Svoboda "directory": "DIR", 29f33173acSJan Svoboda "command": "clang -fmodules -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/from_tu.m -o DIR/from_tu.o" 30002bfdd6SJan Svoboda }] 31002bfdd6SJan Svoboda //--- from_tu.m 32002bfdd6SJan Svoboda #include "FW/FW.h" 33002bfdd6SJan Svoboda #include "FW/Two.h" 34002bfdd6SJan Svoboda 35002bfdd6SJan Svoboda // RUN: sed -e "s|DIR|%/t|g" %t/from_tu.cdb.json.template > %t/from_tu.cdb.json 36002bfdd6SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/from_tu.cdb.json -format experimental-full > %t/from_tu_result.json 37002bfdd6SJan Svoboda // RUN: cat %t/from_tu_result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t --check-prefixes=CHECK_TU 38002bfdd6SJan Svoboda // CHECK_TU: { 39002bfdd6SJan Svoboda // CHECK_TU-NEXT: "modules": [ 40002bfdd6SJan Svoboda // CHECK_TU-NEXT: { 41002bfdd6SJan Svoboda // CHECK_TU-NEXT: "clang-module-deps": [], 42002bfdd6SJan Svoboda // CHECK_TU-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 43002bfdd6SJan Svoboda // CHECK_TU-NEXT: "command-line": [ 44002bfdd6SJan Svoboda // CHECK_TU: ], 45002bfdd6SJan Svoboda // CHECK_TU-NEXT: "context-hash": "{{.*}}", 46002bfdd6SJan Svoboda // CHECK_TU-NEXT: "file-deps": [ 47*9d4837f4SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 48*9d4837f4SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/frameworks/FW.framework/Headers/FW.h" 49002bfdd6SJan Svoboda // CHECK_TU-NEXT: ], 5068eb3b20SArtem Chikin // CHECK_TU-NEXT: "link-libraries": [ 5168eb3b20SArtem Chikin // CHECK_TU-NEXT: { 5268eb3b20SArtem Chikin // CHECK_TU-NEXT: "isFramework": true, 5368eb3b20SArtem Chikin // CHECK_TU-NEXT: "link-name": "FW" 5468eb3b20SArtem Chikin // CHECK_TU-NEXT: } 5568eb3b20SArtem Chikin // CHECK_TU-NEXT: ], 56002bfdd6SJan Svoboda // CHECK_TU-NEXT: "name": "FW" 57002bfdd6SJan Svoboda // CHECK_TU-NEXT: }, 58002bfdd6SJan Svoboda // CHECK_TU-NEXT: { 59002bfdd6SJan Svoboda // CHECK_TU-NEXT: "clang-module-deps": [], 60002bfdd6SJan Svoboda // CHECK_TU-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 61002bfdd6SJan Svoboda // CHECK_TU-NEXT: "command-line": [ 62002bfdd6SJan Svoboda // CHECK_TU: ], 63002bfdd6SJan Svoboda // CHECK_TU-NEXT: "context-hash": "{{.*}}", 64002bfdd6SJan Svoboda // CHECK_TU-NEXT: "file-deps": [ 65002bfdd6SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 66002bfdd6SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h", 67002bfdd6SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/One.h" 68002bfdd6SJan Svoboda // CHECK_TU-NEXT: ], 6968eb3b20SArtem Chikin // CHECK_TU-NEXT: "link-libraries": [ 7068eb3b20SArtem Chikin // CHECK_TU-NEXT: { 7168eb3b20SArtem Chikin // CHECK_TU-NEXT: "isFramework": true, 7268eb3b20SArtem Chikin // CHECK_TU-NEXT: "link-name": "FW" 7368eb3b20SArtem Chikin // CHECK_TU-NEXT: } 7468eb3b20SArtem Chikin // CHECK_TU-NEXT: ], 75002bfdd6SJan Svoboda // CHECK_TU-NEXT: "name": "FW_Private" 76002bfdd6SJan Svoboda // CHECK_TU-NEXT: } 77002bfdd6SJan Svoboda // CHECK_TU-NEXT: ], 78002bfdd6SJan Svoboda // CHECK_TU-NEXT: "translation-units": [ 79002bfdd6SJan Svoboda // CHECK_TU-NEXT: { 8083902c40SBen Langmuir // CHECK_TU: "clang-context-hash": "{{.*}}", 81002bfdd6SJan Svoboda // CHECK_TU-NEXT: "clang-module-deps": [ 82002bfdd6SJan Svoboda // CHECK_TU-NEXT: { 83002bfdd6SJan Svoboda // CHECK_TU-NEXT: "context-hash": "{{.*}}", 84002bfdd6SJan Svoboda // CHECK_TU-NEXT: "module-name": "FW" 85002bfdd6SJan Svoboda // CHECK_TU-NEXT: }, 86002bfdd6SJan Svoboda // CHECK_TU-NEXT: { 87002bfdd6SJan Svoboda // CHECK_TU-NEXT: "context-hash": "{{.*}}", 88002bfdd6SJan Svoboda // CHECK_TU-NEXT: "module-name": "FW_Private" 89002bfdd6SJan Svoboda // CHECK_TU-NEXT: } 90002bfdd6SJan Svoboda // CHECK_TU-NEXT: ], 91002bfdd6SJan Svoboda // CHECK_TU-NEXT: "command-line": [ 92002bfdd6SJan Svoboda // CHECK_TU: "-fmodule-file={{.*}}/FW-{{.*}}.pcm" 93002bfdd6SJan Svoboda // CHECK_TU: "-fmodule-file={{.*}}/FW_Private-{{.*}}.pcm" 94002bfdd6SJan Svoboda // CHECK_TU: ], 9583902c40SBen Langmuir // CHECK_TU: "file-deps": [ 96002bfdd6SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/from_tu.m", 97002bfdd6SJan Svoboda // CHECK_TU-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/Two.h" 98002bfdd6SJan Svoboda // CHECK_TU-NEXT: ], 99002bfdd6SJan Svoboda // CHECK_TU-NEXT: "input-file": "[[PREFIX]]/from_tu.m" 100002bfdd6SJan Svoboda // CHECK_TU-NEXT: } 101002bfdd6SJan Svoboda 102002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_tu_result.json --module-name=FW > %t/FW.cc1.rsp 103002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_tu_result.json --module-name=FW_Private > %t/FW_Private.cc1.rsp 104002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_tu_result.json --tu-index=0 > %t/tu.rsp 105002bfdd6SJan Svoboda // RUN: %clang @%t/FW.cc1.rsp 106002bfdd6SJan Svoboda // RUN: %clang @%t/FW_Private.cc1.rsp 107002bfdd6SJan Svoboda // RUN: %clang @%t/tu.rsp 108002bfdd6SJan Svoboda 109002bfdd6SJan Svoboda // Now let's check we report the dependencies for modules as well. 110002bfdd6SJan Svoboda 111002bfdd6SJan Svoboda //--- from_module.cdb.json.template 112002bfdd6SJan Svoboda [{ 113002bfdd6SJan Svoboda "file": "DIR/from_module.m", 114002bfdd6SJan Svoboda "directory": "DIR", 115f33173acSJan Svoboda "command": "clang -fmodules -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/from_module.m -o DIR/from_module.o" 116002bfdd6SJan Svoboda }] 117002bfdd6SJan Svoboda //--- module.modulemap 118002bfdd6SJan Svoboda module Mod { header "Mod.h" } 119002bfdd6SJan Svoboda //--- Mod.h 120002bfdd6SJan Svoboda #include "FW/FW.h" 121002bfdd6SJan Svoboda #include "FW/Two.h" 122002bfdd6SJan Svoboda //--- from_module.m 123002bfdd6SJan Svoboda #include "Mod.h" 124002bfdd6SJan Svoboda 125002bfdd6SJan Svoboda // RUN: sed -e "s|DIR|%/t|g" %t/from_module.cdb.json.template > %t/from_module.cdb.json 126002bfdd6SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/from_module.cdb.json -format experimental-full > %t/from_module_result.json 127002bfdd6SJan Svoboda // RUN: cat %t/from_module_result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t --check-prefixes=CHECK_MODULE 128002bfdd6SJan Svoboda // CHECK_MODULE: { 129002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "modules": [ 130002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 131002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-module-deps": [], 132002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 133002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "command-line": [ 134002bfdd6SJan Svoboda // CHECK_MODULE: ], 135002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "context-hash": "{{.*}}", 136002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "file-deps": [ 137*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 138*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/Headers/FW.h" 139002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 14068eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "link-libraries": [ 14168eb3b20SArtem Chikin // CHECK_MODULE-NEXT: { 14268eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "isFramework": true, 14368eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "link-name": "FW" 14468eb3b20SArtem Chikin // CHECK_MODULE-NEXT: } 14568eb3b20SArtem Chikin // CHECK_MODULE-NEXT: ], 146002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "name": "FW" 147002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: }, 148002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 149002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-module-deps": [], 150002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 151002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "command-line": [ 152002bfdd6SJan Svoboda // CHECK_MODULE: ], 153002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "context-hash": "{{.*}}", 154002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "file-deps": [ 155002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 156002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h", 157002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/One.h" 158002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 15968eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "link-libraries": [ 16068eb3b20SArtem Chikin // CHECK_MODULE-NEXT: { 16168eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "isFramework": true, 16268eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "link-name": "FW" 16368eb3b20SArtem Chikin // CHECK_MODULE-NEXT: } 16468eb3b20SArtem Chikin // CHECK_MODULE-NEXT: ], 165002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "name": "FW_Private" 166002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: }, 167002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 168002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-module-deps": [ 169002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 170002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "context-hash": "{{.*}}", 171002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "module-name": "FW" 172002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: }, 173002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 174002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "context-hash": "{{.*}}", 175002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "module-name": "FW_Private" 176002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: } 177002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 178002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 179002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "command-line": [ 180002bfdd6SJan Svoboda // CHECK_MODULE: "-fmodule-file={{.*}}/FW-{{.*}}.pcm" 181002bfdd6SJan Svoboda // CHECK_MODULE: "-fmodule-file={{.*}}/FW_Private-{{.*}}.pcm" 182002bfdd6SJan Svoboda // CHECK_MODULE: ], 183002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "context-hash": "{{.*}}", 184002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "file-deps": [ 185*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/module.modulemap" 186*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/Mod.h", 187002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap", 188002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", 189*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/Two.h" 190002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 19168eb3b20SArtem Chikin // CHECK_MODULE-NEXT: "link-libraries": [], 192002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "name": "Mod" 193002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: } 194002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 195002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "translation-units": [ 196002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 19783902c40SBen Langmuir // CHECK_MODULE: "clang-context-hash": "{{.*}}", 198002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "clang-module-deps": [ 199002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: { 200002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "context-hash": "{{.*}}", 201002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "module-name": "Mod" 202002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: } 203002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 204002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "command-line": [ 205002bfdd6SJan Svoboda // CHECK_MODULE: ], 20683902c40SBen Langmuir // CHECK_MODULE: "file-deps": [ 207002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "[[PREFIX]]/from_module.m" 208002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: ], 209002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: "input-file": "[[PREFIX]]/from_module.m" 210002bfdd6SJan Svoboda // CHECK_MODULE-NEXT: } 211002bfdd6SJan Svoboda 212002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --module-name=FW > %t/FW.cc1.rsp 213002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --module-name=FW_Private > %t/FW_Private.cc1.rsp 214002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --module-name=Mod > %t/Mod.cc1.rsp 215002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --tu-index=0 > %t/tu.rsp 216002bfdd6SJan Svoboda // RUN: %clang @%t/FW.cc1.rsp 217002bfdd6SJan Svoboda // RUN: %clang @%t/FW_Private.cc1.rsp 218002bfdd6SJan Svoboda // RUN: %clang @%t/Mod.cc1.rsp 219002bfdd6SJan Svoboda // RUN: %clang @%t/tu.rsp 220