UseJava: Fix create_javah CLASSPATH handling on Windows

Preserve semicolons in the value.
This commit is contained in:
Marc Chevrier 2016-01-19 09:52:04 +01:00 committed by Brad King
parent 249aac71d0
commit 18c3714f4f
5 changed files with 42 additions and 5 deletions

View File

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

10
Tests/JavaJavah/C.cpp Normal file
View File

@ -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
Tests/JavaJavah/C.java Normal file
View File

@ -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);
}
}
}

View File

@ -9,10 +9,13 @@ include (UseJava)
# JNI support # JNI support
find_package(JNI) find_package(JNI)
add_jar(hello3 B.java HelloWorld2.java) add_jar(B1 B.java)
create_javah(TARGET B_javah CLASSES B CLASSPATH hello3) 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) add_dependencies(B B_javah)
target_include_directories(B PRIVATE ${CMAKE_CURRENT_BINARY_DIR} target_include_directories(B PRIVATE ${CMAKE_CURRENT_BINARY_DIR}

View File

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