From: Kefu Chai Date: Fri, 4 May 2018 14:32:35 +0000 (+0800) Subject: cmake: use javac -h for creating JNI native headers X-Git-Tag: v12.2.6~137^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1f1c7eddd490ccae43daa43d98a834bd839fa2cf;p=ceph.git cmake: use javac -h for creating JNI native headers JDK 1.10 does not offer javah anymore, so we need to use "javac -h" or add_jar(... GENERATE_NATIVE_HEADERS) instead. Fixes: http://tracker.ceph.com/issues/24012 Signed-off-by: Kefu Chai (cherry picked from commit edc504b9d446cc1739f3e8e087914cfe66d6cac3) Conflicts: src/java/CMakeLists.txt: in master, we dropped the support for trusty, but luminous still supports trusty. while trusty ships JDK-7, where javac does not support "-h" option yet. so we need to handle this case. "-h" was introduced in Java SE 8, see https://docs.oracle.com/javase/8/docs/technotes/guides/javac/index.html . --- diff --git a/src/java/CMakeLists.txt b/src/java/CMakeLists.txt index fe365501de9e..70ed8e6d8393 100644 --- a/src/java/CMakeLists.txt +++ b/src/java/CMakeLists.txt @@ -22,18 +22,34 @@ set(java_srcs # as per # https://blogs.oracle.com/darcy/entry/bootclasspath_older_source set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.7" "-target" "1.7" "-Xlint:-options") -add_jar(libcephfs ${java_srcs}) +set(jni_header_dir "${CMAKE_CURRENT_BINARY_DIR}/native") +if(Java_VERSION VERSION_LESS 1.8) + add_jar(libcephfs ${java_srcs}) + get_property(libcephfs_jar TARGET libcephfs PROPERTY JAR_FILE) + set(java_h native/com_ceph_fs_CephMount.h) + add_custom_command( + OUTPUT ${java_h} + COMMAND ${Java_JAVAH_EXECUTABLE} -classpath ${libcephfs_jar} -jni -o ${java_h} com.ceph.fs.CephMount + COMMENT "Building C header files from classes...") + add_custom_target(jni-header + DEPENDS ${java_h}) + add_dependencies(jni-header libcephfs) +else() + if(CMAKE_VERSION VERSION_LESS 3.11) + set(CMAKE_JAVA_COMPILE_FLAGS ${CMAKE_JAVA_COMPILE_FLAGS} "-h" ${jni_header_dir}) + add_jar(libcephfs ${java_srcs}) + add_custom_target( + jni-header + DEPENDS libcephfs) + add_dependencies(jni-header libcephfs) + else() + add_jar(libcephfs ${java_srcs} + GENERATE_NATIVE_HEADERS jni-header + DESTINATION ${jni_header_dir}) + endif() + get_property(libcephfs_jar TARGET libcephfs PROPERTY JAR_FILE) +endif() install_jar(libcephfs share/java) -get_property(libcephfs_jar TARGET libcephfs PROPERTY JAR_FILE) - -set(java_h native/com_ceph_fs_CephMount.h) -add_custom_command( - OUTPUT ${java_h} - COMMAND ${Java_JAVAH_EXECUTABLE} -classpath ${libcephfs_jar} -jni -o ${CMAKE_CURRENT_BINARY_DIR}/${java_h} com.ceph.fs.CephMount) -add_custom_target( - jni-header - DEPENDS ${java_h}) -add_dependencies(jni-header libcephfs) find_jar(JUNIT_JAR NAMES junit4 junit