diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml index 291124f33..43320e8cd 100644 --- a/.github/workflows/wasm.yml +++ b/.github/workflows/wasm.yml @@ -69,7 +69,7 @@ jobs: echo "This job compiled \`wasmJsMain\` and \`wasmJsTest\`. **No wasm test was executed.**" echo echo "Running them needs a CPython Emscripten build, which this repository publishes as" - echo "\`io.github.thisisthepy:python-multiplatform-wasm-runtime\` (a 7 MB zip built by" + echo "\`org.thisisthepy:python-multiplatform-wasm-runtime\` (a 7 MB zip built by" echo "\`:python-multiplatform:wasmBrowserRuntimeZip\`) but has never pushed to a remote" echo "repository -- it exists only in the maintainer's \`mavenLocal\`." echo diff --git a/README.md b/README.md index 500f6086e..f126a862d 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ name, unchanged. plugins { kotlin("jvm") application - id("io.github.thisisthepy.python.multiplatform.bindings") version "" + id("org.thisisthepy.python.multiplatform.bindings") version "" } ``` diff --git a/build.gradle.kts b/build.gradle.kts index 9a55c8361..63c01e66a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { val publishedVersion = "${property("pythonVersion")}-${property("libraryVersionSuffix")}" allprojects { - group = "io.github.thisisthepy" + group = "org.thisisthepy" version = publishedVersion } diff --git a/docs/SPEC.md b/docs/SPEC.md index d9a68a5a4..04ba23c5c 100644 --- a/docs/SPEC.md +++ b/docs/SPEC.md @@ -54,7 +54,16 @@ fail, then implement. into a catchable `IllegalStateException` naming the path and version, instead of CPython's process abort. `Status: implemented` on desktop (`PM/desktopTest/.../env/PythonHomeCheckTest.kt`); smoke-tested on all targets (`PM/commonTest/.../PythonHomeCheckSmokeTest.kt`). -- **L-4** Desktop: applying the Gradle plugin `io.github.thisisthepy.python.multiplatform.bindings` +- **L-0** Coordinates (#95, maintainer decision 2026-10-03, following JetBrains): libraries and the Gradle + plugin are published under the Maven group `org.thisisthepy` (`org.thisisthepy:python-multiplatform`, + `-ksp`, `-compose`, `-gradle-plugin`; plugin ID `org.thisisthepy.python.multiplatform.bindings`), shipped + apps under `io.github.thisisthepy` (the sample's application and bundle ID + `io.github.thisisthepy.python.multiplatform.demo`). Kotlin code packages (`python.*`, the sample's + `org.thisisthepy.python.multiplatform.demo.*`) do not change. The generated table fragment of a module is + named from its Maven group and project path (`deriveModuleName`), so since #95 it is + `Fragment_org_thisisthepy_` (before: `Fragment_io_github_thisisthepy_`); discovery scans the + whole package, so only the name changed. `Status: implemented`, `GP/PublishedVersionTest.kt`, `GP/WiringTest.kt`. +- **L-4** Desktop: applying the Gradle plugin `org.thisisthepy.python.multiplatform.bindings` registers `stagePythonHome`, which downloads the matching CPython, verifies it against the release `SHA256SUMS`, caches it machine-wide and sets `PYTHONHOME` on `run`/`test`. A user-set `PYTHONHOME` is never overridden; `pythonBindings { stagePythonHome.set(false) }` disables it. diff --git a/docs/design/ecosystem.md b/docs/design/ecosystem.md index 9f9a82e9f..d7d567c98 100644 --- a/docs/design/ecosystem.md +++ b/docs/design/ecosystem.md @@ -232,7 +232,7 @@ This section documents the current state, language/build system/distribution art - **Language / Build System / Distribution**: - Kotlin Multiplatform (Kotlin `2.4.20-Beta2` pinned in `gradle/libs.versions.toml` as of 2026-10-03), Compose Multiplatform 1.11.1 for the sample and fixtures, Java 21, C/C++ FFI. - Gradle (`build.gradle.kts`, `settings.gradle.kts`, included build `python-multiplatform-gradle-plugin`). - - Maven artifact publication (`id("maven-publish")` in `python-multiplatform/build.gradle.kts`, published under group `io.github.thisisthepy:python-multiplatform`). + - Maven artifact publication (`id("maven-publish")` in `python-multiplatform/build.gradle.kts`, published under group `org.thisisthepy:python-multiplatform`). - **Goal in Ecosystem**: - Core language boundary and binder between Kotlin Multiplatform and CPython. - Manages low-level FFI, object reference handles, upcall/downcall function tables, GIL lifecycle, and proxy injection into CPython `sys.modules`. diff --git a/docs/design/upcall.md b/docs/design/upcall.md index 761fd17c6..db4eedd11 100644 --- a/docs/design/upcall.md +++ b/docs/design/upcall.md @@ -132,8 +132,8 @@ point. Each module emits one **fragment object** into the well-known package // GENERATED by python-multiplatform-ksp. Do not edit. package python.multiplatform.generated.fragments -object Fragment_io_github_thisisthepy_python_multiplatform_ksp_fixtures_library : python.multiplatform.reflection.FunctionTableFragment { - override val moduleName: String = "io_github_thisisthepy_python_multiplatform_ksp_fixtures_library" +object Fragment_org_thisisthepy_python_multiplatform_ksp_fixtures_library : python.multiplatform.reflection.FunctionTableFragment { + override val moduleName: String = "org_thisisthepy_python_multiplatform_ksp_fixtures_library" override fun entries(): List = listOf( ExposedCallable(name = "fixture.library.greet", arity = 1, paramTypes = listOf(TypeTag.STRING), returnType = TypeTag.STRING, paramNames = listOf("name"), callable = { args -> fixture.library.greet(args[0] as String) }), @@ -148,7 +148,7 @@ object Fragment_io_github_thisisthepy_python_multiplatform_ksp_fixtures_library - **Name**: `Fragment_`, where `moduleName` is the KSP option `python.multiplatform.moduleName` with `.` and `-` replaced by `_` (`Constants.kt`). The Gradle plugin derives it from the **Maven group plus the project path** (`:python-multiplatform-ksp:fixtures:app` with group - `io.github.thisisthepy` → `io_github_thisisthepy_python_multiplatform_ksp_fixtures_app`), because fragments from every + `org.thisisthepy` → `org_thisisthepy_python_multiplatform_ksp_fixtures_app`), because fragments from every artifact share one package and two libraries both called `:core` would otherwise collide. The name is not load-bearing for discovery (the whole package is scanned) but prevents collisions. - **Visibility: `public`.** An `internal` fragment does not work: `internal` is enforced per Kotlin @@ -297,7 +297,7 @@ One `SymbolProcessorProvider` (`PythonBindingProcessorProvider.kt`) with two rol | `python.multiplatform.excludePackages` | no | comma-separated packages to skip, on top of the always-excluded ones | **The Gradle plugin is built**: `python-multiplatform-gradle-plugin/`, id -`io.github.thisisthepy.python.multiplatform.bindings`. Applying it applies KSP, adds the processor to every +`org.thisisthepy.python.multiplatform.bindings`. Applying it applies KSP, adds the processor to every target's **main** KSP configuration (never a `…Test` one and never `kspCommonMainMetadata`, either of which would emit a second fragment under the same name), infers the role (`application` / `com.android.application` → `app`, else `library`; override with `pythonBindings { role.set("app") }`) and diff --git a/docs/guide/guide-binding-libraries.html b/docs/guide/guide-binding-libraries.html index 31378973a..b31891963 100644 --- a/docs/guide/guide-binding-libraries.html +++ b/docs/guide/guide-binding-libraries.html @@ -39,7 +39,7 @@

Bind a prebuilt library빌

01Apply the plugin플러그인 적용

plugins {
-    id("io.github.thisisthepy.python.multiplatform.bindings") version "<version>"
+    id("org.thisisthepy.python.multiplatform.bindings") version "<version>"
 }

The walker reads Kotlin metadata with ASM, generates Kotlin source for every reachable declaration, and lets kotlinc compile it. It never looks up JVM methods by name: value-class name mangling makes that impossible in principle.워커는 ASM 으로 Kotlin 메타데이터를 읽고, 닿을 수 있는 모든 선언에 대해 Kotlin 소스를 생성해 kotlinc 가 컴파일하게 한다. JVM 메서드를 이름으로 찾지 않는다. 값 클래스 이름 맹글링 때문에 그것은 원리적으로 불가능하다.

02What you get얻는 것

diff --git a/docs/locale/README_ko.md b/docs/locale/README_ko.md index 2627bfaa4..fe74fad20 100644 --- a/docs/locale/README_ko.md +++ b/docs/locale/README_ko.md @@ -123,7 +123,7 @@ async def main(): plugins { kotlin("jvm") application - id("io.github.thisisthepy.python.multiplatform.bindings") version "" + id("org.thisisthepy.python.multiplatform.bindings") version "" } ``` diff --git a/docs/platforms/ios-app-bundle.md b/docs/platforms/ios-app-bundle.md index 7d605b0f5..d58274285 100644 --- a/docs/platforms/ios-app-bundle.md +++ b/docs/platforms/ios-app-bundle.md @@ -12,7 +12,7 @@ prefix and payload, why, and how to check it. ## What happens **Gradle** (the bindings plugin, `IosConsumerWiring.kt`; rules in `IosPythonHomeLayout`). The app module -applies `io.github.thisisthepy.python.multiplatform.bindings`, which registers one task per slice, +applies `org.thisisthepy.python.multiplatform.bindings`, which registers one task per slice, `stageIosPythonHome__` (`iphoneos_arm64`, `iphonesimulator_arm64`, `iphonesimulator_x86_64`), and writes `/build/python-ios-home/-/` (for the sample, `sample/build/python-ios-home/...`): @@ -92,7 +92,7 @@ before. `PyConfig.home` is the non-deprecated route, but the library carries no ## Wiring an app The sample's project is `sample/src/iosMain/app.xcodeproj` (target `app`, product `PythonDemo.app`, bundle id -`org.thisisthepy.python.multiplatform.demo`). Its phase: +`io.github.thisisthepy.python.multiplatform.demo`). Its phase: ```sh set -e @@ -165,10 +165,10 @@ codesign --verify --deep --strict "$APP" && echo SIGNED_OK # 3. Install and launch with no SIMCTL_CHILD_* variable UDID=$(xcrun simctl list devices booted | grep -oE '[0-9A-F-]{36}' | head -n 1); echo "$UDID" env | grep '^SIMCTL_CHILD_' && echo "unset these first" # must print nothing -xcrun simctl uninstall "$UDID" org.thisisthepy.python.multiplatform.demo +xcrun simctl uninstall "$UDID" io.github.thisisthepy.python.multiplatform.demo xcrun simctl install "$UDID" "$APP" xcrun simctl launch --console-pty --terminate-running-process "$UDID" \ - org.thisisthepy.python.multiplatform.demo > .tmp/launch.log 2>&1 & + io.github.thisisthepy.python.multiplatform.demo > .tmp/launch.log 2>&1 & LAUNCH=$! # wait for the DEMO block (Monitor/until-loop; no sleep in this shell), then: kill "$LAUNCH" diff --git a/python-multiplatform-compose/fixtures/compose/build.gradle.kts b/python-multiplatform-compose/fixtures/compose/build.gradle.kts index 95aeb900a..40470cf26 100644 --- a/python-multiplatform-compose/fixtures/compose/build.gradle.kts +++ b/python-multiplatform-compose/fixtures/compose/build.gradle.kts @@ -26,7 +26,7 @@ plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.jetpack.compose) alias(libs.plugins.compose.compiler) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform-compose/fixtures/notebook-e2e/build.gradle.kts b/python-multiplatform-compose/fixtures/notebook-e2e/build.gradle.kts index 4f267ccb9..8c4915a86 100644 --- a/python-multiplatform-compose/fixtures/notebook-e2e/build.gradle.kts +++ b/python-multiplatform-compose/fixtures/notebook-e2e/build.gradle.kts @@ -33,7 +33,7 @@ plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.jetpack.compose) alias(libs.plugins.compose.compiler) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform-gradle-plugin/build.gradle.kts b/python-multiplatform-gradle-plugin/build.gradle.kts index 6950ecdfa..3ec90edad 100644 --- a/python-multiplatform-gradle-plugin/build.gradle.kts +++ b/python-multiplatform-gradle-plugin/build.gradle.kts @@ -7,7 +7,7 @@ plugins { `maven-publish` } -group = "io.github.thisisthepy" +group = "org.thisisthepy" // Same published version as the library and the KSP processor (#70): "$pythonVersion-$suffix" from // the root's gradle.properties, a -P override winning as it does in the root build (Gradle hands // start-parameter properties to included builds too). @@ -221,7 +221,7 @@ dependencies { gradlePlugin { plugins { create("pythonMultiplatformBindings") { - id = "io.github.thisisthepy.python.multiplatform.bindings" + id = "org.thisisthepy.python.multiplatform.bindings" implementationClass = "python.multiplatform.gradle.PythonBindingsPlugin" displayName = "Python Multiplatform bindings" description = "Wires the python-multiplatform KSP processor into every Kotlin target of a module." diff --git a/python-multiplatform-gradle-plugin/fixtures/artifact/build.gradle.kts b/python-multiplatform-gradle-plugin/fixtures/artifact/build.gradle.kts index b65538238..cfdd5fd0e 100644 --- a/python-multiplatform-gradle-plugin/fixtures/artifact/build.gradle.kts +++ b/python-multiplatform-gradle-plugin/fixtures/artifact/build.gradle.kts @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget */ plugins { alias(libs.plugins.kotlin.multiplatform) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform-gradle-plugin/fixtures/ios-consumer/build.gradle.kts b/python-multiplatform-gradle-plugin/fixtures/ios-consumer/build.gradle.kts index 5bd004df2..0ecf0f929 100644 --- a/python-multiplatform-gradle-plugin/fixtures/ios-consumer/build.gradle.kts +++ b/python-multiplatform-gradle-plugin/fixtures/ios-consumer/build.gradle.kts @@ -3,7 +3,7 @@ * `:python-multiplatform`. * * This module declares no `downloadPython_ios`, no linker option and no Xcode script of its own. All - * of it comes from `io.github.thisisthepy.python.multiplatform.bindings`: + * of it comes from `org.thisisthepy.python.multiplatform.bindings`: * * - `downloadPython_ios` and `preparePythonXcframework` (into this module's `build/`), * - `-framework Python -F...` on the two `Probe` framework binaries below, @@ -14,7 +14,7 @@ */ plugins { alias(libs.plugins.kotlin.multiplatform) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform-gradle-plugin/fixtures/klib-artifact/build.gradle.kts b/python-multiplatform-gradle-plugin/fixtures/klib-artifact/build.gradle.kts index 7e8a8f00a..a5d1c44db 100644 --- a/python-multiplatform-gradle-plugin/fixtures/klib-artifact/build.gradle.kts +++ b/python-multiplatform-gradle-plugin/fixtures/klib-artifact/build.gradle.kts @@ -36,7 +36,7 @@ */ plugins { alias(libs.plugins.kotlin.multiplatform) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } val pythonDownloadDir = project(":python-multiplatform").layout.buildDirectory.dir("python-standalone").get().asFile diff --git a/python-multiplatform-gradle-plugin/src/main/kotlin/python/multiplatform/gradle/PythonBindingsPlugin.kt b/python-multiplatform-gradle-plugin/src/main/kotlin/python/multiplatform/gradle/PythonBindingsPlugin.kt index 8c6e962d5..823db419d 100644 --- a/python-multiplatform-gradle-plugin/src/main/kotlin/python/multiplatform/gradle/PythonBindingsPlugin.kt +++ b/python-multiplatform-gradle-plugin/src/main/kotlin/python/multiplatform/gradle/PythonBindingsPlugin.kt @@ -249,7 +249,7 @@ interface PythonBindingsExtension { * target, is now one plugin. * * plugins { - * id("io.github.thisisthepy.python.multiplatform.bindings") + * id("org.thisisthepy.python.multiplatform.bindings") * } * * A module that produces the final binary adds `pythonBindings { role.set("app") }` unless it diff --git a/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/PublishedVersionTest.kt b/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/PublishedVersionTest.kt index 52f55eede..cff7e082c 100644 --- a/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/PublishedVersionTest.kt +++ b/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/PublishedVersionTest.kt @@ -22,7 +22,7 @@ class PublishedVersionTest { @Test fun theProcessorCoordinateCarriesTheLibraryVersion() { assertEquals( - "io.github.thisisthepy:python-multiplatform-ksp:$expected", + "org.thisisthepy:python-multiplatform-ksp:$expected", DEFAULT_PROCESSOR_COORDINATES, ) } @@ -30,7 +30,7 @@ class PublishedVersionTest { @Test fun theWasmRuntimeCoordinateCarriesTheLibraryVersion() { assertEquals( - "io.github.thisisthepy:python-multiplatform-wasm-runtime:$expected", + "org.thisisthepy:python-multiplatform-wasm-runtime:$expected", DEFAULT_WASM_RUNTIME_COORDINATES, ) } diff --git a/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/WiringTest.kt b/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/WiringTest.kt index 30710976d..b791b3fcb 100644 --- a/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/WiringTest.kt +++ b/python-multiplatform-gradle-plugin/src/test/kotlin/python/multiplatform/gradle/WiringTest.kt @@ -147,8 +147,8 @@ class WiringTest { // Two independent libraries both called `:core` would otherwise both emit // `python.multiplatform.generated.fragments.Fragment_core` and collide on one classpath. assertEquals( - "io_github_thisisthepy_python_multiplatform_ksp_fixtures_app", - deriveModuleName(group = "io.github.thisisthepy", path = ":python-multiplatform-ksp:fixtures:app", name = "app"), + "org_thisisthepy_python_multiplatform_ksp_fixtures_app", + deriveModuleName(group = "org.thisisthepy", path = ":python-multiplatform-ksp:fixtures:app", name = "app"), ) assertEquals( "com_example_core", diff --git a/python-multiplatform-ksp/fixtures/android/build.gradle.kts b/python-multiplatform-ksp/fixtures/android/build.gradle.kts index 61eb70d21..bbaa5b7bf 100644 --- a/python-multiplatform-ksp/fixtures/android/build.gradle.kts +++ b/python-multiplatform-ksp/fixtures/android/build.gradle.kts @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget /** * The fixture that carries an Android plugin. * - * ROADMAP §13: `id("io.github.thisisthepy.python.multiplatform.bindings")` applies + * ROADMAP §13: `id("org.thisisthepy.python.multiplatform.bindings")` applies * `com.google.devtools.ksp`, and KSP declares `MINIMUM_SUPPORTED_AGP_VERSION`. Below that AGP the * plugin dies at configuration time with * @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.android.library) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform-ksp/fixtures/android/src/androidInstrumentedTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt b/python-multiplatform-ksp/fixtures/android/src/androidInstrumentedTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt index fa4e90300..3303ba775 100644 --- a/python-multiplatform-ksp/fixtures/android/src/androidInstrumentedTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt +++ b/python-multiplatform-ksp/fixtures/android/src/androidInstrumentedTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt @@ -31,7 +31,7 @@ class GeneratedAndroidTableTest { @Test fun theAndroidModulesFragmentIsInTheAggregatedTable() { - assertEquals(setOf("io_github_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) + assertEquals(setOf("org_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) assertTrue(UpcallTable.resolve("fixture.android.androidDouble").isValid) } @@ -115,7 +115,7 @@ class GeneratedAndroidTableTest { val count = installAndCountEntries() assertTrue(count > 0) - assertEquals(setOf("io_github_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) + assertEquals(setOf("org_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) assertTrue(UpcallTable.resolve("fixture.android.androidDouble").isValid) assertFalse( UpcallTable.resolve("fixture.android.installGeneratedUpcallTable").isValid, diff --git a/python-multiplatform-ksp/fixtures/android/src/androidUnitTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt b/python-multiplatform-ksp/fixtures/android/src/androidUnitTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt index 3876b6492..807cd3ec6 100644 --- a/python-multiplatform-ksp/fixtures/android/src/androidUnitTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt +++ b/python-multiplatform-ksp/fixtures/android/src/androidUnitTest/kotlin/fixture/android/GeneratedAndroidTableTest.kt @@ -44,7 +44,7 @@ class GeneratedAndroidTableTest { // The name the gradle plugin derives from this module's group and path. Its presence is // what says KSP ran here at all -- the state ROADMAP §13 describes has no fragment // because the build never got past configuration. - assertEquals(setOf("io_github_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) + assertEquals(setOf("org_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) assertTrue(UpcallTable.resolve("fixture.android.androidDouble").isValid) } @@ -132,7 +132,7 @@ class GeneratedAndroidTableTest { val count = installAndCountEntries() assertTrue(count > 0) - assertEquals(setOf("io_github_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) + assertEquals(setOf("org_thisisthepy_python_multiplatform_ksp_fixtures_android"), UpcallTable.moduleNames) assertTrue(UpcallTable.resolve("fixture.android.androidDouble").isValid) assertFalse( UpcallTable.resolve("fixture.android.installGeneratedUpcallTable").isValid, diff --git a/python-multiplatform-ksp/fixtures/app/build.gradle.kts b/python-multiplatform-ksp/fixtures/app/build.gradle.kts index 8404411cd..57ec527d8 100644 --- a/python-multiplatform-ksp/fixtures/app/build.gradle.kts +++ b/python-multiplatform-ksp/fixtures/app/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.kotlin.multiplatform) - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/CommonInstallTest.kt b/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/CommonInstallTest.kt index e30de7b5b..2f7667f5b 100644 --- a/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/CommonInstallTest.kt +++ b/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/CommonInstallTest.kt @@ -38,7 +38,7 @@ class CommonInstallTest { assertTrue(UpcallTable.callableCount > 0, "commonMain installed nothing: $summary") assertEquals( - setOf("io_github_thisisthepy_python_multiplatform_ksp_fixtures_library", "io_github_thisisthepy_python_multiplatform_ksp_fixtures_app"), + setOf("org_thisisthepy_python_multiplatform_ksp_fixtures_library", "org_thisisthepy_python_multiplatform_ksp_fixtures_app"), UpcallTable.moduleNames, "the seam must install the same aggregate FunctionTable.fragments does", ) diff --git a/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/GeneratedTableTest.kt b/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/GeneratedTableTest.kt index b3ec843dd..625ec9c67 100644 --- a/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/GeneratedTableTest.kt +++ b/python-multiplatform-ksp/fixtures/app/src/desktopTest/kotlin/fixture/app/GeneratedTableTest.kt @@ -46,7 +46,7 @@ class GeneratedTableTest { // group and path -- neither fixture states a module name any more, and the group is in // there because every fragment object in every artifact shares one package. assertEquals( - setOf("io_github_thisisthepy_python_multiplatform_ksp_fixtures_library", "io_github_thisisthepy_python_multiplatform_ksp_fixtures_app"), + setOf("org_thisisthepy_python_multiplatform_ksp_fixtures_library", "org_thisisthepy_python_multiplatform_ksp_fixtures_app"), UpcallTable.moduleNames, ) assertTrue(UpcallTable.resolve("fixture.library.add").isValid) diff --git a/python-multiplatform-ksp/fixtures/library/build.gradle.kts b/python-multiplatform-ksp/fixtures/library/build.gradle.kts index 417ec00b7..088e93943 100644 --- a/python-multiplatform-ksp/fixtures/library/build.gradle.kts +++ b/python-multiplatform-ksp/fixtures/library/build.gradle.kts @@ -6,7 +6,7 @@ plugins { // One line in place of the KSP plugin, two per-target `add("ksp", ...)` lines and a // `ksp { arg(...) }` block. The role defaults to `library`; the module name is derived from // the project's group and path. - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { diff --git a/python-multiplatform/build.gradle.kts b/python-multiplatform/build.gradle.kts index 01af94e99..46e46c00b 100644 --- a/python-multiplatform/build.gradle.kts +++ b/python-multiplatform/build.gradle.kts @@ -54,7 +54,7 @@ fun deleteWithoutFollowingLinks(path: File) { plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.android.library) - id("io.github.thisisthepy.python.multiplatform.bindings") apply false + id("org.thisisthepy.python.multiplatform.bindings") apply false id("com.codingfeline.buildkonfig").version("0.15.2") //id("org.jetbrains.dokka") id("maven-publish") @@ -1174,7 +1174,7 @@ kotlin { // was not fine for the CPython libraries, hence the name guard below. // // `allMetadataJar` is the artifact published at the root coordinate - // `io.github.thisisthepy:python-multiplatform`, which is what every Kotlin Multiplatform + // `org.thisisthepy:python-multiplatform`, which is what every Kotlin Multiplatform // consumer resolves in order to compile against `commonMain`. Measured on the mavenLocal // publication while enabling the Android one (§15d): **87.4 MB, of which 83.0 MB was four // host platforms' libpython** (`lib/linux-x86_64` alone 64.7 MB compressed, 240 MB raw) @@ -2042,7 +2042,7 @@ val requireWasmRuntime: Boolean = fun Task.wasmRuntimePresent(marker: File): Boolean { if (marker.isFile) return true val remedy = "Unpack the published runtime " + - "(io.github.thisisthepy:python-multiplatform-wasm-runtime:$libraryVersion) and point " + + "(org.thisisthepy:python-multiplatform-wasm-runtime:$libraryVersion) and point " + "-PwasmPythonDir / PMP_PYTHON_DIR at it, or build one into the default location with " + "./gradlew :python-multiplatform:buildWasmPython (python-multiplatform/scripts/wasm/build-cpython.sh)." val what = "$name: no CPython Emscripten build at ${marker.parentFile} " + @@ -2150,7 +2150,7 @@ val stageWasmBrowserRuntime by tasks.registering { // ROADMAP §10 -- the other half of "the wiring is not in python-multiplatform-gradle-plugin". The // plugin cannot hand a consumer a directory that only exists on this machine; it can only resolve a // Maven coordinate. So `stageWasmBrowserRuntime`'s output is zipped and published under its own -// artifact ID, at this library's own version, so `implementation("io.github.thisisthepy: +// artifact ID, at this library's own version, so `implementation("org.thisisthepy: // python-multiplatform:$version")` and the runtime it needs stay paired by construction -- there is // no second version string for a consumer to get out of step. // @@ -2727,7 +2727,7 @@ publishing { // version, and a consumer who never builds a browser bundle should not need to resolve it // as a side effect of resolving the library at all. create("wasmRuntime") { - groupId = "io.github.thisisthepy" + groupId = "org.thisisthepy" artifactId = "python-multiplatform-wasm-runtime" version = libraryVersion artifact(wasmBrowserRuntimeZip) diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 3597caa42..2e8a35dcd 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -31,7 +31,7 @@ plugins { // // `python-multiplatform-ksp/fixtures/android` is the regression test. It is the first fixture to apply an Android // plugin, which is exactly why nothing caught this. - id("io.github.thisisthepy.python.multiplatform.bindings") + id("org.thisisthepy.python.multiplatform.bindings") } kotlin { @@ -248,11 +248,11 @@ tasks.withType().c } android { - namespace = "org.thisisthepy.python.multiplatform.demo" + namespace = "io.github.thisisthepy.python.multiplatform.demo" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { - applicationId = "org.thisisthepy.python.multiplatform.demo" + applicationId = "io.github.thisisthepy.python.multiplatform.demo" minSdk = libs.versions.android.minSdk.get().toInt() targetSdk = libs.versions.android.targetSdk.get().toInt() versionCode = 1 @@ -303,7 +303,7 @@ compose.desktop { nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) - packageName = "org.thisisthepy.python.multiplatform.demo" + packageName = "io.github.thisisthepy.python.multiplatform.demo" packageVersion = "1.0.0" } } diff --git a/sample/src/commonMain/kotlin/org/thisisthepy/python/multiplatform/demo/bindings/ExposedToPython.kt b/sample/src/commonMain/kotlin/org/thisisthepy/python/multiplatform/demo/bindings/ExposedToPython.kt index 7a2dca366..24eda1d9a 100644 --- a/sample/src/commonMain/kotlin/org/thisisthepy/python/multiplatform/demo/bindings/ExposedToPython.kt +++ b/sample/src/commonMain/kotlin/org/thisisthepy/python/multiplatform/demo/bindings/ExposedToPython.kt @@ -8,7 +8,7 @@ import kotlin.coroutines.suspendCoroutine * The Kotlin surface this app offers to Python. * * **Nothing here is registered by hand.** This module applies - * `id("io.github.thisisthepy.python.multiplatform.bindings")`, which runs `python-multiplatform-ksp` + * `id("org.thisisthepy.python.multiplatform.bindings")`, which runs `python-multiplatform-ksp` * over these sources at build time; every public declaration it finds becomes an entry in the * generated `python.multiplatform.generated.FunctionTable`, which [installGeneratedUpcallTable] * hands to [python.multiplatform.reflection.UpcallTable]. Exposure is a blacklist (ROADMAP §7, diff --git a/sample/src/iosMain/app.xcodeproj/project.pbxproj b/sample/src/iosMain/app.xcodeproj/project.pbxproj index 0961ac687..5c80959a7 100644 --- a/sample/src/iosMain/app.xcodeproj/project.pbxproj +++ b/sample/src/iosMain/app.xcodeproj/project.pbxproj @@ -459,7 +459,7 @@ "-framework", Demo, ); - PRODUCT_BUNDLE_IDENTIFIER = org.thisisthepy.python.multiplatform.demo; + PRODUCT_BUNDLE_IDENTIFIER = io.github.thisisthepy.python.multiplatform.demo; PRODUCT_NAME = PythonDemo; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -494,7 +494,7 @@ "-framework", Demo, ); - PRODUCT_BUNDLE_IDENTIFIER = org.thisisthepy.python.multiplatform.demo; + PRODUCT_BUNDLE_IDENTIFIER = io.github.thisisthepy.python.multiplatform.demo; PRODUCT_NAME = PythonDemo; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/settings.gradle.kts b/settings.gradle.kts index c7696ebe4..165f63cfd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,7 +3,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement { // The convenience plugin of ROADMAP §7 lives in its own build so that an outside consumer // resolves it by id like any other plugin. Including it here is what makes - // `id("io.github.thisisthepy.python.multiplatform.bindings")` resolve inside this repo. + // `id("org.thisisthepy.python.multiplatform.bindings")` resolve inside this repo. includeBuild("python-multiplatform-gradle-plugin") repositories {