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:
Timofey Solonin
2024-03-13 19:48:01 +01:00
committed by Space Team
parent 4ab5c3b74b
commit 9295f44eda
6 changed files with 25 additions and 5 deletions
@@ -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\"",
)
}
}
@@ -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
@@ -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,
@@ -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 *")