Quote module name in the generated modulemap
This fixes an issue where Kotlin projects named "umbrella" or "framework" produce unimportable framework modules. ^KT-66565
This commit is contained in:
committed by
Space Team
parent
4ab5c3b74b
commit
9295f44eda
+2
-2
@@ -50,7 +50,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
assertDirectoryInProjectExists("shared/build/builtProductsDir/sdk.framework.dSYM")
|
||||
assertFileInProjectContains(
|
||||
"shared/build/builtProductsDir/sdk.framework/Modules/module.modulemap",
|
||||
"framework module sdk",
|
||||
"framework module \"sdk\"",
|
||||
)
|
||||
assertDirectoryInProjectDoesNotExist("shared/build/xcode-frameworks/sdk.framework")
|
||||
}
|
||||
@@ -103,7 +103,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/Release/iphonesimulator/sdk.framework.dSYM")
|
||||
assertFileInProjectContains(
|
||||
"shared/build/xcode-frameworks/Release/iphonesimulator/sdk.framework/Modules/module.modulemap",
|
||||
"framework module sdk",
|
||||
"framework module \"sdk\"",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -370,7 +370,7 @@ internal constructor(
|
||||
|
||||
private fun createModuleFile(outputFile: File, frameworkName: String) {
|
||||
outputFile.writeText("""
|
||||
framework module $frameworkName {
|
||||
framework module "$frameworkName" {
|
||||
umbrella header "$frameworkName.h"
|
||||
|
||||
export *
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
import umbrella
|
||||
+20
-1
@@ -203,6 +203,24 @@ abstract class FrameworkTestBase : AbstractNativeSimpleTest() {
|
||||
compileAndRunSwift(testName, testCase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testKT66565_usingModuleMapSyntaxInKotlinModuleNameMakesImportableModule() {
|
||||
Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily)
|
||||
val reservedModuleMapSyntax = "umbrella"
|
||||
val testName = "kt66565"
|
||||
generateObjCFramework(testName, moduleName = reservedModuleMapSyntax)
|
||||
SwiftCompilation(
|
||||
testRunSettings,
|
||||
listOf(testSuiteDir.resolve(testName).resolve("$testName.swift")),
|
||||
TestCompilationArtifact.BinaryLibrary(buildDir.resolve("swiftObject")),
|
||||
listOf(
|
||||
"-c",
|
||||
"-F", buildDir.absolutePath
|
||||
),
|
||||
outputFile = { library -> library.libraryFile }
|
||||
).result.assertSuccess()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testStacktrace() {
|
||||
val testName = "stacktrace"
|
||||
@@ -468,13 +486,14 @@ abstract class FrameworkTestBase : AbstractNativeSimpleTest() {
|
||||
testCompilerArgs: List<String> = emptyList(),
|
||||
givenDependencies: Set<TestModule.Given> = emptySet(),
|
||||
checks: TestRunChecks = TestRunChecks.Default(testRunSettings.get<Timeouts>().executionTimeout),
|
||||
moduleName: String = name.replaceFirstChar { it.uppercase() },
|
||||
): TestCase {
|
||||
Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily)
|
||||
|
||||
val testCase = generateObjCFrameworkTestCase(
|
||||
TestKind.STANDALONE_NO_TR,
|
||||
extras,
|
||||
name.replaceFirstChar { it.uppercase() },
|
||||
moduleName,
|
||||
listOf(testSuiteDir.resolve(name).resolve("$name.kt")),
|
||||
TestCompilerArgs(testCompilerArgs + listOf("-Xbinary=bundleId=$name")),
|
||||
givenDependencies,
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ package org.jetbrains.kotlin.backend.konan.objcexport
|
||||
*/
|
||||
class ModuleMapBuilder {
|
||||
fun build(frameworkName: String, moduleDependencies: Set<String>): String = buildString {
|
||||
appendLine("framework module $frameworkName {")
|
||||
appendLine("framework module \"$frameworkName\" {")
|
||||
appendLine(" umbrella header \"$frameworkName.h\"")
|
||||
appendLine()
|
||||
appendLine(" export *")
|
||||
|
||||
Reference in New Issue
Block a user