From 21e1c48f2f2af6f7fad277aba3bcfb8f67acd1d3 Mon Sep 17 00:00:00 2001 From: Ankit Aggarwal Date: Thu, 31 Oct 2019 07:57:19 -0700 Subject: [PATCH] [PackageLoading] Disable modulemap mixed with sources check I found some bugs in the new target sources builder thanks to benchmark package. I'll fix them properly in a separate commit but these fixes should unblock CI. We also need to build swift benchmarks in SwiftPM PR testing. --- Sources/PackageLoading/PackageBuilder.swift | 8 ++++- .../PackageLoading/TargetSourcesBuilder.swift | 6 ---- .../PackageBuilderTests.swift | 35 +++---------------- 3 files changed, 11 insertions(+), 38 deletions(-) diff --git a/Sources/PackageLoading/PackageBuilder.swift b/Sources/PackageLoading/PackageBuilder.swift index 04767220ac6..3bb632745d2 100644 --- a/Sources/PackageLoading/PackageBuilder.swift +++ b/Sources/PackageLoading/PackageBuilder.swift @@ -659,13 +659,19 @@ public final class PackageBuilder { throw ModuleError.invalidPublicHeadersDirectory(potentialModule.name) } + // Exclude public headers path directory from source searching if it's not + // the target root. + // FIXME: This means we'll try to assign rules to header files + // which is currently not handled by the sources builder. + let extraExcludes = publicHeadersPath != potentialModule.path ? [publicHeadersPath] : [] + let sourcesBuilder = TargetSourcesBuilder( packageName: manifest.name, packagePath: packagePath, target: manifestTarget, path: potentialModule.path, additionalFileRules: additionalFileRules, - extraExcludes: [publicHeadersPath], + extraExcludes: extraExcludes, toolsVersion: manifest.toolsVersion, fs: fileSystem, diags: diagnostics diff --git a/Sources/PackageLoading/TargetSourcesBuilder.swift b/Sources/PackageLoading/TargetSourcesBuilder.swift index 06458ca90ec..4e346525243 100644 --- a/Sources/PackageLoading/TargetSourcesBuilder.swift +++ b/Sources/PackageLoading/TargetSourcesBuilder.swift @@ -123,12 +123,6 @@ public struct TargetSourcesBuilder { throw Target.Error.mixedSources(targetPath) } - // Make sure there is no modulemap mixed with the sources. - let moduleMapFiles = pathToRule.filter{ $0.value == .modulemap } - if let moduleMapFile = moduleMapFiles.first { - throw ModuleError.invalidLayout(.modulemapInSources(moduleMapFile.key)) - } - return (sources, resources) } diff --git a/Tests/PackageLoadingTests/PackageBuilderTests.swift b/Tests/PackageLoadingTests/PackageBuilderTests.swift index c57d839cff6..e4e77e0d52f 100644 --- a/Tests/PackageLoadingTests/PackageBuilderTests.swift +++ b/Tests/PackageLoadingTests/PackageBuilderTests.swift @@ -166,12 +166,13 @@ class PackageBuilderTests: XCTestCase { } func testModuleMapLayout() throws { - var fs = InMemoryFileSystem(emptyFiles: + let fs = InMemoryFileSystem(emptyFiles: "/Sources/clib/include/module.modulemap", "/Sources/clib/include/clib.h", - "/Sources/clib/clib.c") + "/Sources/clib/clib.c" + ) - var manifest = Manifest.createV4Manifest( + let manifest = Manifest.createV4Manifest( name: "MyPackage", targets: [ TargetDescription(name: "clib"), @@ -183,34 +184,6 @@ class PackageBuilderTests: XCTestCase { moduleResult.checkSources(root: "/Sources/clib", paths: "clib.c") } } - - fs = InMemoryFileSystem(emptyFiles: - "/Sources/clib/module.modulemap", - "/Sources/clib/foo.swift") - manifest = Manifest.createV4Manifest( - name: "MyPackage", - targets: [ - TargetDescription(name: "clib"), - ] - ) - PackageBuilderTester(manifest, in: fs) { result in - result.checkDiagnostic("package has unsupported layout; modulemap '/Sources/clib/module.modulemap' should be inside the 'include' directory") - } - - fs = InMemoryFileSystem(emptyFiles: - "/Sources/Foo/module.modulemap", - "/Sources/Foo/foo.swift", - "/Sources/Bar/bar.swift") - manifest = Manifest.createV4Manifest( - name: "MyPackage", - targets: [ - TargetDescription(name: "Foo"), - TargetDescription(name: "Bar"), - ] - ) - PackageBuilderTester(manifest, in: fs) { result in - result.checkDiagnostic("package has unsupported layout; modulemap '/Sources/Foo/module.modulemap' should be inside the 'include' directory") - } } func testDeclaredExecutableProducts() {