diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml
new file mode 100644
index 0000000..4a53bee
--- /dev/null
+++ b/.idea/AndroidProjectSystem.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_js_0_2_8.xml b/.idea/artifacts/util_js_0_2_8.xml
new file mode 100644
index 0000000..0ba6a2b
--- /dev/null
+++ b/.idea/artifacts/util_js_0_2_8.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_js_0_3_0_beta_1.xml b/.idea/artifacts/util_js_0_3_0_beta_1.xml
new file mode 100644
index 0000000..4bbd519
--- /dev/null
+++ b/.idea/artifacts/util_js_0_3_0_beta_1.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_jvm_0_2_8.xml b/.idea/artifacts/util_jvm_0_2_8.xml
new file mode 100644
index 0000000..8fa3d1f
--- /dev/null
+++ b/.idea/artifacts/util_jvm_0_2_8.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_jvm_0_3_0_beta_1.xml b/.idea/artifacts/util_jvm_0_3_0_beta_1.xml
new file mode 100644
index 0000000..55dfb20
--- /dev/null
+++ b/.idea/artifacts/util_jvm_0_3_0_beta_1.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_wasm_js_0_2_8.xml b/.idea/artifacts/util_wasm_js_0_2_8.xml
new file mode 100644
index 0000000..50d7e15
--- /dev/null
+++ b/.idea/artifacts/util_wasm_js_0_2_8.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_wasm_js_0_3_0_beta_1.xml b/.idea/artifacts/util_wasm_js_0_3_0_beta_1.xml
new file mode 100644
index 0000000..a229bf4
--- /dev/null
+++ b/.idea/artifacts/util_wasm_js_0_3_0_beta_1.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_wasm_wasi_0_2_8.xml b/.idea/artifacts/util_wasm_wasi_0_2_8.xml
new file mode 100644
index 0000000..587e6c4
--- /dev/null
+++ b/.idea/artifacts/util_wasm_wasi_0_2_8.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/util_wasm_wasi_0_3_0_beta_1.xml b/.idea/artifacts/util_wasm_wasi_0_3_0_beta_1.xml
new file mode 100644
index 0000000..b4fdd03
--- /dev/null
+++ b/.idea/artifacts/util_wasm_wasi_0_3_0_beta_1.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..bcf4711
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7c47dd4..c0278ba 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,5 +4,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..a0f0f48
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/util.jvmMain.iml b/.idea/modules/util.jvmMain.iml
new file mode 100644
index 0000000..2c83a31
--- /dev/null
+++ b/.idea/modules/util.jvmMain.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 4843d18..ad72d7a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,12 +1,15 @@
-@file:OptIn(ExperimentalKotlinGradlePluginApi::class)
+//@file:OptIn(ExperimentalKotlinGradlePluginApi::class)
+@file:OptIn(ExperimentalWasmDsl::class)
-import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
+import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
- kotlin("jvm") version masterLibs.versions.kotlinVersion
- `java-library`
+// kotlin("jvm") version masterLibs.versions.kotlinVersion
+// `java-library`
`maven-publish`
alias(masterLibs.plugins.dokkaPlugin)
+ alias(masterLibs.plugins.kotlinMultiplatformPlugin)
alias(masterLibs.plugins.versionPlugin)
}
@@ -20,27 +23,98 @@ repositories {
maven("https://nexus.keinekekse.net/repository/maven-public/")
}
-dependencies {
- implementation(masterLibs.kotlinxSerialization)
- // f. cmd line via annotation KMP?
- implementation(kotlin("reflect"))
-
-}
-
-java {
- toolchain {
- languageVersion.set(JavaLanguageVersion.of(masterLibs.versions.javaVersion.get()))
- }
- withSourcesJar()
-}
+//dependencies {
+// implementation(masterLibs.kotlinxSerialization)
+// // f. cmd line via annotation KMP?
+// implementation(kotlin("reflect"))
+//
+//}
kotlin {
- jvmToolchain(masterLibs.versions.javaVersion.get().toInt())
-// compilerOptions {
-// languageVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_3)
-// }
+// explicitApi()
+
+ jvm {
+ compilerOptions.jvmTarget =
+ JvmTarget.valueOf("JVM_" + masterLibs.versions.javaVersion.get()) //JvmTarget.JVM_1_8
+ }
+
+ js {
+ browser {
+ testTask {
+ useKarma {
+ useChromeHeadless()
+ }
+ }
+ }
+ nodejs()
+ }
+
+ wasmJs {
+ browser {
+ testTask {
+ useKarma {
+ useChromeHeadless()
+ }
+ }
+ }
+ nodejs()
+ }
+
+ wasmWasi {
+ nodejs()
+ }
+
+// macosX64()
+ macosArm64()
+
+// iosX64()
+// iosArm64()
+// iosSimulatorArm64()
+
+// watchosArm32()
+// watchosArm64()
+// watchosX64()
+// watchosSimulatorArm64()
+// watchosDeviceArm64()
+
+// tvosArm64()
+// tvosX64()
+// tvosSimulatorArm64()
+
+// mingwX64()
+
+ linuxX64()
+// linuxArm64()
+
+// androidNativeArm32()
+// androidNativeArm64()
+// androidNativeX86()
+// androidNativeX64()
+
+ applyDefaultHierarchyTemplate()
+
+ sourceSets {
+ commonMain.dependencies {
+ implementation(masterLibs.kotlinxSerialization)
+ }
+ jvmMain.dependencies {
+ implementation(kotlin("reflect"))
+ }
+
+// commonTest.dependencies {
+// implementation(libs.kotlin.test)
+// implementation(libs.serialization.json)
+// }
+ }
}
+//kotlin {
+// jvmToolchain(masterLibs.versions.javaVersion.get().toInt())
+//// compilerOptions {
+//// languageVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_3)
+//// }
+//}
+
/* Generierte Dokka-Doku als javadoc.jar ausgeben (s.a. "publishing")
tasks.register("dokkaJar") {
group = "build"
@@ -62,10 +136,10 @@ publishing {
url = uri("https://nexus.keinekekse.net/repository/maven-releases/")
}
}
- publications.create("maven") {
- from(components["java"])
-// artifact(tasks["dokkaJar"])
- }
+// publications.create("maven") {
+// from(components["java"])
+//// artifact(tasks["dokkaJar"])
+// }
}
// ./gradlew dokkaGenerate
diff --git a/buildnumber.properties b/buildnumber.properties
index 4d39833..5efe45f 100644
--- a/buildnumber.properties
+++ b/buildnumber.properties
@@ -1,3 +1,3 @@
#auto generated
-#Sun Jan 18 02:02:24 CET 2026
-build.number=106
+#Sun Jan 18 17:08:09 CET 2026
+build.number=109
diff --git a/settings.gradle.kts b/settings.gradle.kts
index ab23bf9..212177d 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -19,7 +19,7 @@ dependencyResolutionManagement {
versionCatalogs {
create("masterLibs") {
// from(files("gradle/masterlibs.versions.toml"))
- from("net.keinekekse:version-catalog:107")
+ from("net.keinekekse:version-catalog:109")
}
}
}
diff --git a/src/main/kotlin/net/keinekekse/args/priv.kt b/src/commonMain/kotlin/net/keinekekse/args/priv.kt
similarity index 97%
rename from src/main/kotlin/net/keinekekse/args/priv.kt
rename to src/commonMain/kotlin/net/keinekekse/args/priv.kt
index 15ec705..2610210 100644
--- a/src/main/kotlin/net/keinekekse/args/priv.kt
+++ b/src/commonMain/kotlin/net/keinekekse/args/priv.kt
@@ -1,13 +1,14 @@
package net.keinekekse.args
import net.keinekekse.version.Version
-import kotlin.system.exitProcess
+
+expect fun exitApplication(rc: Int = 0): Nothing
class VerifyParameterException(message: String) : RuntimeException(message)
fun showParsingError(msg: String): Nothing {
- println(ArgumentParserException.PARSING_ERROR_MSG.format(msg))
- exitProcess(2)
+ println(ArgumentParserException.PARSING_ERROR_MSG + msg + "\n")
+ exitApplication(2)
}
/**
@@ -311,10 +312,10 @@ class CommandLine(
}
e?.message?.let {
println()
- println(ArgumentParserException.PARSING_ERROR_MSG.format(it))
+ println(ArgumentParserException.PARSING_ERROR_MSG + it + "\n")
println()
}
- exitProcess(0)
+ exitApplication(0)
}
private fun showSubcommands(parameters: MutableMap) {
@@ -346,7 +347,7 @@ class CommandLine(
private fun showVersion(): Nothing {
println("${programVersion.displayName} ${programVersion.fullVersion}, ${programVersion.copyright}\n")
- exitProcess(0)
+ exitApplication(0)
}
}
diff --git a/src/main/kotlin/net/keinekekse/args/pub.kt b/src/commonMain/kotlin/net/keinekekse/args/pub.kt
similarity index 98%
rename from src/main/kotlin/net/keinekekse/args/pub.kt
rename to src/commonMain/kotlin/net/keinekekse/args/pub.kt
index c2d8b70..bf11abc 100644
--- a/src/main/kotlin/net/keinekekse/args/pub.kt
+++ b/src/commonMain/kotlin/net/keinekekse/args/pub.kt
@@ -1,7 +1,6 @@
package net.keinekekse.args
import kotlin.reflect.KProperty
-import kotlin.system.exitProcess
interface ValueDelegate {
var value: T?
@@ -152,8 +151,8 @@ interface AddParameter {
// Fehler beim Check der Parameter-Definitionen und beim Parsen der Kommandozeile
internal class ArgumentParserException(message: String?) : RuntimeException(message) {
companion object {
- const val PARSING_ERROR_MSG = "\n*** ERROR parsing arguments: %s\n"
- const val DEFINITION_ERROR_MSG = "\n*** ERROR defining arguments: %s\n"
+ const val PARSING_ERROR_MSG = "\n*** ERROR parsing arguments: "
+ const val DEFINITION_ERROR_MSG = "\n*** ERROR defining arguments: "
fun showHelp() = ArgumentParserException(null)
fun noHelpOrVersion() =
ArgumentParserException("Option 'help' and option 'version' are not allowed.")
@@ -226,6 +225,6 @@ internal fun matchArgument(arg: String): Pair? =
ARGUMENT_PATTERN.matchEntire(arg)?.groupValues?.let { Pair(it[1] + it[2], it[3]) }
internal fun showDefiningError(msg: String): Nothing {
- println(ArgumentParserException.DEFINITION_ERROR_MSG.format(msg))
- exitProcess(1)
+ println(ArgumentParserException.DEFINITION_ERROR_MSG + msg + "\n")
+ exitApplication(1)
}
diff --git a/src/main/kotlin/net/keinekekse/util/Version.kt b/src/commonMain/kotlin/net/keinekekse/util/Version.kt
similarity index 51%
rename from src/main/kotlin/net/keinekekse/util/Version.kt
rename to src/commonMain/kotlin/net/keinekekse/util/Version.kt
index 30695fb..665f87e 100644
--- a/src/main/kotlin/net/keinekekse/util/Version.kt
+++ b/src/commonMain/kotlin/net/keinekekse/util/Version.kt
@@ -3,14 +3,14 @@ package net.keinekekse.util
import net.keinekekse.version.Version
object VERSION: Version {
- override val version = "0.2.8"
- override val fullVersion = "0.2.8+build.106"
+ override val version = "0.3.0-beta.1+build.109"
+ override val fullVersion = "0.3.0-beta.1+build.109"
override val major = 0
- override val minor = 2
- override val patch = 8
- override val preRelease = ""
- override val buildMetadata = "build.106"
- override val buildDate = "2026-01-18T01:02:24.139170Z"
+ override val minor = 3
+ override val patch = 0
+ override val preRelease = "beta.1"
+ override val buildMetadata = "build.109"
+ override val buildDate = "2026-01-18T16:08:09.445707Z"
override val displayName = "Utility Library"
override val copyright = "Copyright (c) 2025-2026 Hartmut Bauer"
override val name = "util"
diff --git a/src/main/kotlin/net/keinekekse/util/delegate.kt b/src/commonMain/kotlin/net/keinekekse/util/delegate.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/util/delegate.kt
rename to src/commonMain/kotlin/net/keinekekse/util/delegate.kt
diff --git a/src/main/kotlin/net/keinekekse/version/Version.kt b/src/commonMain/kotlin/net/keinekekse/version/Version.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/version/Version.kt
rename to src/commonMain/kotlin/net/keinekekse/version/Version.kt
diff --git a/src/main/kotlin/net/keinekekse/args/annotation/api.kt b/src/jvmMain/kotlin/net/keinekekse/args/annotation/api.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/args/annotation/api.kt
rename to src/jvmMain/kotlin/net/keinekekse/args/annotation/api.kt
diff --git a/src/main/kotlin/net/keinekekse/args/annotation/impl.kt b/src/jvmMain/kotlin/net/keinekekse/args/annotation/impl.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/args/annotation/impl.kt
rename to src/jvmMain/kotlin/net/keinekekse/args/annotation/impl.kt
diff --git a/src/jvmMain/kotlin/net/keinekekse/args/priv.jvm.kt b/src/jvmMain/kotlin/net/keinekekse/args/priv.jvm.kt
new file mode 100644
index 0000000..e2687e7
--- /dev/null
+++ b/src/jvmMain/kotlin/net/keinekekse/args/priv.jvm.kt
@@ -0,0 +1,7 @@
+package net.keinekekse.args
+
+import kotlin.system.exitProcess
+
+actual fun exitApplication(rc: Int): Nothing {
+ exitProcess(rc)
+}
diff --git a/src/main/kotlin/net/keinekekse/args/v1/arguments.kt b/src/jvmMain/kotlin/net/keinekekse/args/v1/arguments.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/args/v1/arguments.kt
rename to src/jvmMain/kotlin/net/keinekekse/args/v1/arguments.kt
diff --git a/src/main/kotlin/net/keinekekse/config/init.kt b/src/jvmMain/kotlin/net/keinekekse/config/init.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/config/init.kt
rename to src/jvmMain/kotlin/net/keinekekse/config/init.kt
diff --git a/src/main/kotlin/net/keinekekse/config/system_config.kt b/src/jvmMain/kotlin/net/keinekekse/config/system_config.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/config/system_config.kt
rename to src/jvmMain/kotlin/net/keinekekse/config/system_config.kt
diff --git a/src/main/kotlin/net/keinekekse/config/user_config.kt b/src/jvmMain/kotlin/net/keinekekse/config/user_config.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/config/user_config.kt
rename to src/jvmMain/kotlin/net/keinekekse/config/user_config.kt
diff --git a/src/main/kotlin/net/keinekekse/exec/exec.kt b/src/jvmMain/kotlin/net/keinekekse/exec/exec.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/exec/exec.kt
rename to src/jvmMain/kotlin/net/keinekekse/exec/exec.kt
diff --git a/src/main/kotlin/net/keinekekse/util/net.kt b/src/jvmMain/kotlin/net/keinekekse/util/net.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/util/net.kt
rename to src/jvmMain/kotlin/net/keinekekse/util/net.kt
diff --git a/src/main/kotlin/net/keinekekse/version/manifest/version.kt b/src/jvmMain/kotlin/net/keinekekse/version/manifest/version.kt
similarity index 100%
rename from src/main/kotlin/net/keinekekse/version/manifest/version.kt
rename to src/jvmMain/kotlin/net/keinekekse/version/manifest/version.kt
diff --git a/src/linuxX64Main/kotlin/net/keinekekse/args/priv.linuxX64.kt b/src/linuxX64Main/kotlin/net/keinekekse/args/priv.linuxX64.kt
new file mode 100644
index 0000000..4a5b50e
--- /dev/null
+++ b/src/linuxX64Main/kotlin/net/keinekekse/args/priv.linuxX64.kt
@@ -0,0 +1,8 @@
+package net.keinekekse.args
+
+import platform.posix.exit
+
+actual fun exitApplication(rc: Int): Nothing {
+ exit(rc)
+ return Unit as Nothing
+}
diff --git a/src/macosArm64Main/kotlin/net/keinekekse/args/priv.macosArm64.kt b/src/macosArm64Main/kotlin/net/keinekekse/args/priv.macosArm64.kt
new file mode 100644
index 0000000..4a5b50e
--- /dev/null
+++ b/src/macosArm64Main/kotlin/net/keinekekse/args/priv.macosArm64.kt
@@ -0,0 +1,8 @@
+package net.keinekekse.args
+
+import platform.posix.exit
+
+actual fun exitApplication(rc: Int): Nothing {
+ exit(rc)
+ return Unit as Nothing
+}
diff --git a/src/wasmWasiMain/kotlin/net/keinekekse/args/priv.wasmWasi.kt b/src/wasmWasiMain/kotlin/net/keinekekse/args/priv.wasmWasi.kt
new file mode 100644
index 0000000..66a21bd
--- /dev/null
+++ b/src/wasmWasiMain/kotlin/net/keinekekse/args/priv.wasmWasi.kt
@@ -0,0 +1,5 @@
+package net.keinekekse.args
+
+actual fun exitApplication(rc: Int): Nothing {
+ TODO("Not implemented on this platform")
+}
diff --git a/src/webMain/kotlin/net/keinekekse/args/priv.web.kt b/src/webMain/kotlin/net/keinekekse/args/priv.web.kt
new file mode 100644
index 0000000..af5033f
--- /dev/null
+++ b/src/webMain/kotlin/net/keinekekse/args/priv.web.kt
@@ -0,0 +1,5 @@
+package net.keinekekse.args
+
+actual fun exitApplication(rc: Int): Nothing {
+ TODO("Not yet implemented") // js + wasmJs
+}