diff mupdf-source/thirdparty/zxing-cpp/wrappers/kn/build.gradle.kts @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/zxing-cpp/wrappers/kn/build.gradle.kts	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,219 @@
+import io.github.isning.gradle.plugins.cmake.params.CustomCMakeParams
+import io.github.isning.gradle.plugins.cmake.params.entries.CustomCMakeCacheEntries
+import io.github.isning.gradle.plugins.cmake.params.entries.asCMakeParams
+import io.github.isning.gradle.plugins.cmake.params.entries.platform.ModifiablePlatformEntriesImpl
+import io.github.isning.gradle.plugins.cmake.params.entries.plus
+import io.github.isning.gradle.plugins.cmake.params.plus
+import io.github.isning.gradle.plugins.kn.krossCompile.invoke
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
+import java.util.*
+
+plugins {
+    alias(libs.plugins.kotlinMultiplatform)
+    alias(libs.plugins.krossCompile)
+    `maven-publish`
+    signing
+}
+
+group = "io.github.zxing-cpp"
+version = "2.3.0-SNAPSHOT"
+
+Properties().apply {
+    rootProject.file("local.properties").takeIf { it.exists() && it.isFile }?.let { load(it.reader()) }
+}.onEach { (key, value) ->
+    if (key is String) ext[key] = value
+}
+
+val hostOs = System.getProperty("os.name")
+
+repositories {
+    mavenCentral()
+    google()
+}
+
+kotlin {
+    val androidTargets = {
+        listOf(
+            androidNativeArm32(),
+            androidNativeArm64(),
+            androidNativeX86(),
+            androidNativeX64(),
+        )
+    }
+    val appleTargets = {
+        listOf(
+            iosX64(),
+            iosArm64(),
+            iosSimulatorArm64(),
+            macosX64(),
+            macosArm64(),
+            watchosX64(),
+            watchosArm32(),
+            watchosArm64(),
+            watchosSimulatorArm64(),
+            tvosX64(),
+            tvosArm64(),
+            tvosSimulatorArm64(),
+        )
+    }
+    val linuxTargets = {
+        listOf(
+            linuxX64(),
+            linuxArm64(),
+        )
+    }
+    // TODO: Linking failed, keep up with https://youtrack.jetbrains.com/issue/KT-65671
+//    val windowsTargets = {
+//        listOf(
+//            mingwX64(),
+//        )
+//    }
+    val enabledTargetList = mutableListOf<KotlinNativeTarget>()
+    enabledTargetList.addAll(androidTargets())
+    enabledTargetList.addAll(linuxTargets())
+    // TODO: Linking failed, keep up with https://youtrack.jetbrains.com/issue/KT-65671
+//    enabledTargetList.addAll(windowsTargets())
+
+    if (hostOs == "Mac OS X") enabledTargetList.addAll(appleTargets())
+}
+
+krossCompile {
+    libraries {
+        val cmakeDir = project.layout.buildDirectory.dir("cmake").get().asFile.absolutePath
+        val zxingCpp by creating {
+            sourceDir = file("../../core").absolutePath
+            outputPath = ""
+            libraryArtifactNames = listOf("libZXing.a")
+
+            cinterop {
+                val buildDir = "$cmakeDir/{libraryName}/{targetName}"
+                packageName = "zxingcpp.cinterop"
+                includeDirs.from(buildDir)
+                headers = listOf("$sourceDir/src/ZXingC.h")
+                compilerOpts += "-DZXING_EXPERIMENTAL_API=ON"
+            }
+            cmake.apply {
+                val buildDir = "$cmakeDir/{projectName}/{targetName}"
+                configParams {
+                    this.buildDir = buildDir
+                }
+                configParams += (ModifiablePlatformEntriesImpl().apply {
+                    buildType = "Release"
+                    buildSharedLibs = false
+                } + CustomCMakeCacheEntries(
+                    mapOf(
+                        "ZXING_READERS" to "ON",
+                        "ZXING_WRITERS" to "NEW",
+                        "ZXING_EXPERIMENTAL_API" to "ON",
+                        "ZXING_USE_BUNDLED_ZINT" to "ON",
+                        "ZXING_C_API" to "ON",
+                    )
+                )).asCMakeParams
+                buildParams {
+                    this.buildDir = buildDir
+                    config = "Release"
+                }
+                buildParams += CustomCMakeParams(listOf("-j16"))
+            }
+
+            androidNativeX64.ndk()
+            androidNativeX86.ndk()
+            androidNativeArm32.ndk()
+            androidNativeArm64.ndk()
+
+            // TODO: Find a way to build linux targets with cxx20. Detail: https://github.com/zxing-cpp/zxing-cpp/pull/719#discussion_r1485701269
+            linuxX64.konan {
+                cmake {
+                    configParams += CustomCMakeCacheEntries(
+                        mapOf(
+                            "CMAKE_CXX_STANDARD" to "17",
+                        )
+                    ).asCMakeParams
+                }
+            }
+            linuxArm64.konan {
+                cmake {
+                    configParams += CustomCMakeCacheEntries(
+                        mapOf(
+                            "CMAKE_CXX_STANDARD" to "17",
+                        )
+                    ).asCMakeParams
+                }
+            }
+            // TODO: Linking failed, keep up with https://youtrack.jetbrains.com/issue/KT-65671
+//            mingwX64.konan()
+
+            if (hostOs == "Mac OS X") {
+                iosX64.xcode()
+                iosArm64.xcode()
+                iosSimulatorArm64.xcode()
+                macosX64.xcode()
+                macosArm64.xcode()
+                watchosX64.xcode()
+                watchosArm32.xcode()
+                watchosArm64.xcode()
+                watchosSimulatorArm64.xcode()
+                tvosX64.xcode()
+                tvosArm64.xcode()
+                tvosSimulatorArm64.xcode()
+            }
+        }
+    }
+}
+
+publishing {
+    publications.withType<MavenPublication>().all {
+        artifactId = artifactId.replace(project.name, "kotlin-native")
+            groupId = project.group.toString()
+            version = project.version.toString()
+
+            pom {
+                name = "zxing-cpp"
+                description = "Wrapper for zxing-cpp barcode image processing library"
+                url = "https://github.com/zxing-cpp/zxing-cpp"
+                licenses {
+                    license {
+                        name = "The Apache License, Version 2.0"
+                        url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
+                    }
+                }
+                developers {
+                    developer {
+                        id = "zxing-cpp"
+                        name = "zxing-cpp community"
+                        email = "zxingcpp@gmail.com"
+                    }
+                }
+                scm {
+                    connection = "scm:git:git://github.com/zxing-cpp/zxing-cpp.git"
+                    developerConnection = "scm:git:git://github.com/zxing-cpp/zxing-cpp.git"
+                    url = "https://github.com/zxing-cpp/zxing-cpp"
+                }
+            }
+    }
+    repositories {
+        maven {
+            name = "sonatype"
+
+            val releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
+            val snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
+            setUrl(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
+
+            credentials {
+                val ossrhUsername: String? by project
+                val ossrhPassword: String? by project
+                username = ossrhUsername
+                password = ossrhPassword
+            }
+        }
+    }
+}
+
+signing {
+    val signingKey: String? by project
+    val signingPassword: String? by project
+    if (signingKey != null && signingPassword != null) {
+        useInMemoryPgpKeys(signingKey, signingPassword)
+        sign(publishing.publications)
+    }
+}