// RUN: %empty-directory(%t) // RUN: cp -r %S/Inputs/imported_modules/ComplexModuleGraph2 %t/include // REQUIRES: objc_interop // Dependency graph: // // * CoreFilesystem - Swift module with generated ObjC header // * FilesystemKit - ObjC module without overlay, has #import // * TestFilesystem - Swift module, has import CoreFilesystem or FilesystemKit. // // * CoreDaemon - ObjC module with overlay, the overlay has import DaemonKit // * DaemonKit - ObjC module without overlay, has #import // * TestDaemon - Swift module, has import CoreDaemon or DaemonKit. // NOTE: This mimics the Darwin -> SwiftOverlayShims -> Darwin dependency "cycle". // // * CoreMemory - ObjC module with overlay and generated header for overlay, the overlay has import MemoryKit // * MemoryKit - ObjC module without overlay, has #import // * TestMemory - Swift module, has import CoreMemory or MemoryKit. // 1. CoreFilesystem - Build. // RUN: %target-swift-frontend %s -emit-module -o %t/include/CoreFilesystem.swiftmodule -DCoreFilesystem -module-name CoreFilesystem -emit-objc-header-path %t/include/CoreFilesystem-Generated.h -disable-objc-attr-requires-foundation-module #if CoreFilesystem @objc public class MyNode { public var number: Int public init(_ n: Int) { number = n } } #endif // 2. FilesystemKit - Nothing to do (pure Clang module). // 3. TestFilesystem - Check that CoreFilesystem and Filesystem can be imported. // RUN: %target-swift-frontend %s -typecheck -DTestFilesystem -DV1 -module-name TestFilesystemV1 -emit-loaded-module-trace-path %t/TestFilesystemV1.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTFILESYSTEM < %t/TestFilesystemV1.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestFilesystem -DV2 -module-name TestFilesystemV2 -emit-loaded-module-trace-path %t/TestFilesystemV2.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTFILESYSTEM < %t/TestFilesystemV2.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestFilesystem -DV3 -module-name TestFilesystemV3 -emit-loaded-module-trace-path %t/TestFilesystemV3.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTFILESYSTEM < %t/TestFilesystemV3.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestFilesystem -DV4 -module-name TestFilesystemV4 -emit-loaded-module-trace-path %t/TestFilesystemV4.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTFILESYSTEM < %t/TestFilesystemV4.trace.json #if TestFilesystem #if V1 import CoreFilesystem #endif #if V2 import FilesystemKit public func noop(_: CoreFilesystem.MyNode) {} #endif #if V3 import CoreFilesystem import FilesystemKit #endif #if V4 import FilesystemKit import CoreFilesystem #endif #endif // FilesystemKit has no overlay, so it shouldn't show up. // TESTFILESYSTEM: "swiftmodulesDetailedInfo":[ // TESTFILESYSTEM-NOT: FilesystemKit // TESTFILESYSTEM-DAG: {"name":"CoreFilesystem","path":"{{[^"]*}}CoreFilesystem.swiftmodule","isImportedDirectly":true, // TESTFILESYSTEM: ] // 4. CoreDaemon - Build. // RUN: %target-swift-frontend %s -emit-module -o %t/include/CoreDaemon.swiftmodule -DCoreDaemon -module-name CoreDaemon -emit-loaded-module-trace-path %t/CoreDaemon.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=COREDAEMON < %t/CoreDaemon.trace.json // * CoreDaemon - ObjC module with overlay, the overlay has import DaemonKit // * DaemonKit - ObjC module without overlay, has #import // * TestDaemon - Swift module, has import CoreDaemon or DaemonKit. #if CoreDaemon @_exported import CoreDaemon import DaemonKit public func runBoth(_ pair: DaemonKit.DaemonPair) { let daemons : (CoreDaemon.Daemon, CoreDaemon.Daemon) = pair.daemons; daemons.0.run(0); daemons.1.run(1); } #endif // COREDAEMON: "swiftmodulesDetailedInfo":[ // COREDAEMON-NOT: CoreDaemon // COREDAEMON-NOT: DaemonKit // COREDAEMON: ] // 5. DaemonKit - Nothing to do (pure Clang module). // 6. TestCoreDaemon // RUN: %target-swift-frontend %s -typecheck -DTestDaemon -DV1 -module-name TestDaemonV1 -emit-loaded-module-trace-path %t/TestDaemonV1.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTDAEMON < %t/TestDaemonV1.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestDaemon -DV2 -module-name TestDaemonV2 -emit-loaded-module-trace-path %t/TestDaemonV2.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTDAEMON < %t/TestDaemonV2.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestDaemon -DV3 -module-name TestDaemonV3 -emit-loaded-module-trace-path %t/TestDaemonV3.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTDAEMON < %t/TestDaemonV3.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestDaemon -DV4 -module-name TestDaemonV4 -emit-loaded-module-trace-path %t/TestDaemonV4.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTDAEMON < %t/TestDaemonV4.trace.json #if TestDaemon #if V1 import CoreDaemon #endif #if V2 import DaemonKit public func noop(_: CoreDaemon.Daemon, _: MaxwellsDaemon) {} #endif #if V3 import CoreDaemon import DaemonKit #endif #if V4 import DaemonKit import CoreDaemon #endif #endif // DaemonKit has no overlay, so it shouldn't show up. // TESTDAEMON: "swiftmodulesDetailedInfo":[ // TESTDAEMON-NOT: DaemonKit // TESTDAEMON-DAG: {"name":"CoreDaemon","path":"{{[^"]*}}CoreDaemon.swiftmodule","isImportedDirectly":true, // TESTDAEMON: ] // 7. CoreMemory - Build. // RUN: %target-swift-frontend %s -emit-module -o %t/include/CoreMemory.swiftmodule -DCoreMemory -module-name CoreMemory -emit-objc-header-path %t/include/CoreMemory-Generated.h -disable-objc-attr-requires-foundation-module -I %t/include #if CoreMemory @_exported import CoreMemory @objc public class MemoryMapEntry { public var region: MemoryMapRegion public var permissions: Int = 0 public init(_ r: MemoryMapRegion) { region = r } } #endif // 8. MemoryKit - Nothing to do (pure Clang module). // 9. TestMemory - Check that CoreMemory and MemoryKit can be imported. // RUN: %target-swift-frontend %s -typecheck -DTestMemory -DV1 -module-name TestMemoryV1 -emit-loaded-module-trace-path %t/TestMemoryV1.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTMEMORY < %t/TestMemoryV1.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestMemory -DV2 -module-name TestMemoryV2 -emit-loaded-module-trace-path %t/TestMemoryV2.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTMEMORY < %t/TestMemoryV2.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestMemory -DV3 -module-name TestMemoryV3 -emit-loaded-module-trace-path %t/TestMemoryV3.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTMEMORY < %t/TestMemoryV3.trace.json // RUN: %target-swift-frontend %s -typecheck -DTestMemory -DV4 -module-name TestMemoryV4 -emit-loaded-module-trace-path %t/TestMemoryV4.trace.json -I %t/include // RUN: %FileCheck %s --check-prefix=TESTMEMORY < %t/TestMemoryV4.trace.json #if TestMemory #if V1 import CoreMemory #endif #if V2 import MemoryKit public func noop(_: CoreMemory.MemoryMapRegion, _: CoreMemory.MemoryMapEntry) {} #endif #if V3 import CoreMemory import MemoryKit #endif #if V4 import MemoryKit import CoreMemory #endif #endif // MemoryKit has no overlay, so it shouldn't show up. // TESTMEMORY: "swiftmodulesDetailedInfo":[ // TESTMEMORY-NOT: MemoryKit // TESTMEMORY-DAG: {"name":"CoreMemory","path":"{{[^"]*}}CoreMemory.swiftmodule","isImportedDirectly":true, // TESTMEMORY: ]