mirror of
https://codeberg.org/Kenta/KaylibKit.git
synced 2024-09-19 11:50:22 -06:00
Add Windows version of resourcePath. Add linker to definition file to fix duplicate symbol on compile
This commit is contained in:
parent
35653383c7
commit
9361ad31a7
3 changed files with 44 additions and 4 deletions
|
@ -6,7 +6,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "com.prism-architect"
|
group = "com.prism-architect"
|
||||||
version = "1.0.4"
|
version = "1.0.5"
|
||||||
|
|
||||||
// Codeberg repository properties providers
|
// Codeberg repository properties providers
|
||||||
val tokenProvider: Provider<String> = providers.gradleProperty("KaylibKitToken")
|
val tokenProvider: Provider<String> = providers.gradleProperty("KaylibKitToken")
|
||||||
|
|
|
@ -1,11 +1,51 @@
|
||||||
package kaylibkit.kCore
|
package kaylibkit.kCore
|
||||||
|
|
||||||
import kotlinx.cinterop.ExperimentalForeignApi
|
import kotlinx.cinterop.ExperimentalForeignApi
|
||||||
|
import kotlinx.cinterop.addressOf
|
||||||
|
import kotlinx.cinterop.pin
|
||||||
|
import kotlinx.cinterop.toKString
|
||||||
|
import platform.windows.*
|
||||||
|
|
||||||
@OptIn(ExperimentalForeignApi::class)
|
@OptIn(ExperimentalForeignApi::class)
|
||||||
actual fun setTraceLogCallbackInternal(callback: TraceLogCallback) {
|
actual fun setTraceLogCallbackInternal(callback: TraceLogCallback) {
|
||||||
kaylibc.SetTraceLogCallback(callback)
|
kaylibc.SetTraceLogCallback(callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the absolute path to the 'resources' folder located at the same location as your executable.
|
||||||
|
*
|
||||||
|
* This property provides the path to the 'resources' folder associated with your executable.
|
||||||
|
* Ensure that a folder named 'resources' is present in the same directory as your executable.
|
||||||
|
*
|
||||||
|
* @return The absolute path to the 'resources' folder, or null if it doesn't exist or cannot be determined.
|
||||||
|
*/
|
||||||
|
@OptIn(ExperimentalForeignApi::class)
|
||||||
actual inline val resourcePath: String?
|
actual inline val resourcePath: String?
|
||||||
get() { return "Not yet implemented" }
|
get() {
|
||||||
|
try {
|
||||||
|
val buffer = ByteArray(MAX_PATH) // Create a buffer to store the path to the executable file.
|
||||||
|
val pathLength = GetModuleFileNameA(null, buffer.pin().addressOf(0), MAX_PATH.toUInt()) // Retrieves the fully qualified path for the executable
|
||||||
|
|
||||||
|
// Check if the path length is less than or equal to zero, indicating an error. Throw exception if error is found
|
||||||
|
if (pathLength.toInt() == 0) throw ResourcePathException("Failed to retrieve executable path.")
|
||||||
|
|
||||||
|
val executablePath = buffer.toKString() // Convert the buffer to a Kotlin string to get the full path to the executable.
|
||||||
|
|
||||||
|
// Find the index of the last slash character ('\\') in the executable path, which separates the directory from the executable file name.
|
||||||
|
val lastBackslashIndex = executablePath.lastIndexOf('\\')
|
||||||
|
if (lastBackslashIndex == -1) throw ResourcePathException("Invalid executable path format: $executablePath.")
|
||||||
|
|
||||||
|
// Extract the directory portion of the executable path
|
||||||
|
val executableDir = executablePath.substring(0, lastBackslashIndex + 1)
|
||||||
|
val resourceDir = executableDir + "resources" // Return the directory path of the executable file along with the "resources" subdirectory.
|
||||||
|
|
||||||
|
// Check if the "resources" directory exists
|
||||||
|
if (GetFileAttributesW(resourceDir) == INVALID_FILE_ATTRIBUTES) {
|
||||||
|
throw ResourcePathException("The 'resources' directory does not exist at: $resourceDir, unable to load resources.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return resourceDir
|
||||||
|
} catch (e: ResourcePathException) {
|
||||||
|
println("ResourcePathException: ${e.message}")
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ libraryPaths.linux = src/nativeInterop/cinterop/lib/linux
|
||||||
libraryPaths.mingw = src/nativeInterop/cinterop/lib/mingw
|
libraryPaths.mingw = src/nativeInterop/cinterop/lib/mingw
|
||||||
|
|
||||||
compilerOpts = -Isrc/nativeInterop/cinterop/include
|
compilerOpts = -Isrc/nativeInterop/cinterop/include
|
||||||
linkerOpts.mingw = -lwinmm -lgdi32 -lopengl32 -lkernel32
|
linkerOpts.mingw = -lwinmm -lgdi32 -lopengl32 -lkernel32 -Wl,--allow-multiple-definition
|
||||||
linkerOpts.osx = -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
|
linkerOpts.osx = -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue