blob: 79e3ce25223a305d8df1fc4baed40a635b5f8a02 [file] [log] [blame]
// 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 <CoreFileystem-Generated.h>
// * 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 <CoreDaemon.h>
// * 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 <CoreMemory-Generated.h>
// * 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 Filesytem 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 <CoreDaemon.h>
// * 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: ]