Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions libpkl/src/main/c/pkl.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
pthread_mutex_t graal_mutex;
graal_isolatethread_t *isolatethread = NULL;

int pkl_init(PklMessageResponseHandler handler, void *payload) {
int pkl_init(PklMessageResponseHandler handler, void *userData) {
if (isolatethread != NULL) {
perror("pkl_init: isolatethread is already initialised");
return -1;
Expand All @@ -47,7 +47,7 @@ int pkl_init(PklMessageResponseHandler handler, void *payload) {
}

isolatethread = pkl_internal_init();
pkl_internal_register_response_handler(isolatethread, handler, payload);
pkl_internal_register_response_handler(isolatethread, handler, userData);
pkl_internal_server_start(isolatethread);
pthread_mutex_unlock(&graal_mutex);

Expand Down Expand Up @@ -84,3 +84,7 @@ int pkl_close() {

return 0;
};

char* pkl_version() {
return pkl_internal_version(isolatethread);
}
7 changes: 7 additions & 0 deletions libpkl/src/main/c/pkl.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,10 @@ int pkl_send_message(int length, char *message);
* @return -1 on failure, 0 on success.
*/
int pkl_close();

/**
* Returns the version of Pkl in use.
*
* @return a string with the version information.
*/
char* pkl_version();
11 changes: 11 additions & 0 deletions libpkl/src/main/java/org/pkl/libpkl/LibPkl.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
import org.graalvm.nativeimage.c.function.CFunctionPointer;
import org.graalvm.nativeimage.c.function.InvokeCFunctionPointer;
import org.graalvm.nativeimage.c.type.CCharPointer;
import org.graalvm.nativeimage.c.type.CTypeConversion;
import org.graalvm.nativeimage.c.type.VoidPointer;
import org.pkl.core.Release;
import org.pkl.core.messaging.MessageTransports.Logger;
import org.pkl.server.Server;

Expand Down Expand Up @@ -73,6 +75,15 @@ public static void pklInternalServerStop(IsolateThread thread) {
server.close();
}

@CEntryPoint(name = "pkl_internal_version")
public static CCharPointer pklInternalVersion(IsolateThread thread) {
var version = Release.current().version();

try (var versionInfoCCharHolder = CTypeConversion.toCString(version.toString())) {
return versionInfoCCharHolder.get();
}
}

public static void handleSendMessageToNative(byte[] bytes) {
try (var pin = PinnedObject.create(bytes)) {
// TODO: Provide a meaningful error the user if they haven't run `pkl_init`.
Expand Down
2 changes: 2 additions & 0 deletions libpkl/src/nativeTest/kotlin/org/pkl/libpkl/LibPklJNA.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ interface LibPklJNA : Library {
fun pkl_send_message(length: Int, message: ByteArray): Int

fun pkl_close(): Int

fun pkl_version(): String
}
8 changes: 8 additions & 0 deletions libpkl/src/nativeTest/kotlin/org/pkl/libpkl/LibPklTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@
*/
package org.pkl.libpkl

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.pkl.commons.test.server.AbstractServerTest
import org.pkl.commons.test.server.TestTransport
import org.pkl.core.Release

/**
* Tests libpkl bindings by using JNA (see [LibPklJNA] and [LibPklMessageTransport]).
Expand All @@ -43,4 +46,9 @@ class LibPklTest : AbstractServerTest() {
fun afterEach() {
client.close()
}

@Test
fun testVersionString() {
assertThat(LibPklJNA.INSTANCE.pkl_version()).isEqualTo(Release.current().version.toString())
}
}