Browse Source

UseJava: Fix create_javah CLASSPATH handling on Windows

Preserve semicolons in the value.
Marc Chevrier 9 years ago
parent
commit
18c3714f4f

+ 2 - 2
Modules/UseJava.cmake

@@ -1212,7 +1212,7 @@ function (create_javah)
 
     set (_output_files)
     if (WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
-      set(_classpath_sep ";")
+      set(_classpath_sep "$<SEMICOLON>")
     else ()
       set(_classpath_sep ":")
     endif()
@@ -1242,7 +1242,7 @@ function (create_javah)
         endif()
       endforeach()
       string (REPLACE ";" "${_classpath_sep}" _classpath "${_classpath}")
-      list (APPEND _javah_options -classpath ${_classpath})
+      list (APPEND _javah_options -classpath "${_classpath}")
     endif()
 
     if (_create_javah_OUTPUT_DIR)

+ 10 - 0
Tests/JavaJavah/C.cpp

@@ -0,0 +1,10 @@
+
+#include <jni.h>
+#include <stdio.h>
+
+#include "C.h"
+
+JNIEXPORT void JNICALL Java_C_printName(JNIEnv *, jobject)
+{
+  printf("C\n");
+}

+ 19 - 0
Tests/JavaJavah/C.java

@@ -0,0 +1,19 @@
+class C
+{
+  public C()
+    {
+    }
+
+    public native void printName();
+
+    static {
+        try {
+
+            System.loadLibrary("B");
+
+        } catch (UnsatisfiedLinkError e) {
+            System.err.println("Native code library failed to load.\n" + e);
+            System.exit(1);
+        }
+    }
+}

+ 6 - 3
Tests/JavaJavah/CMakeLists.txt

@@ -9,10 +9,13 @@ include (UseJava)
 # JNI support
 find_package(JNI)
 
-add_jar(hello3 B.java HelloWorld2.java)
-create_javah(TARGET B_javah CLASSES B CLASSPATH hello3)
+add_jar(B1 B.java)
+add_jar(C1 C.java)
+create_javah(TARGET B_javah CLASSES B C CLASSPATH B1 C1)
 
-add_library(B SHARED B.cpp)
+add_jar(hello3 HelloWorld2.java)
+
+add_library(B SHARED B.cpp C.cpp)
 add_dependencies(B B_javah)
 
 target_include_directories(B PRIVATE ${CMAKE_CURRENT_BINARY_DIR}

+ 5 - 0
Tests/JavaJavah/HelloWorld2.java

@@ -5,6 +5,11 @@ class HelloWorld2
         B b;
         b = new B();
         b.printName();
+
+        C c;
+        c = new C();
+        c.printName();
+
         System.out.println("Hello World!");
     }
 }