summaryrefslogtreecommitdiffstats
path: root/cmake/Modules/FindJNI.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/Modules/FindJNI.cmake')
-rw-r--r--cmake/Modules/FindJNI.cmake254
1 files changed, 254 insertions, 0 deletions
diff --git a/cmake/Modules/FindJNI.cmake b/cmake/Modules/FindJNI.cmake
new file mode 100644
index 000000000..a7da5b138
--- /dev/null
+++ b/cmake/Modules/FindJNI.cmake
@@ -0,0 +1,254 @@
+# - Find JNI java libraries.
+# This module finds if Java is installed and determines where the
+# include files and libraries are. It also determines what the name of
+# the library is. This code sets the following variables:
+#
+# JNI_INCLUDE_DIRS = the include dirs to use
+# JNI_LIBRARIES = the libraries to use
+# JAVA_AWT_LIBRARY = the path to the jawt library
+# JAVA_JVM_LIBRARY = the path to the jvm library
+# JAVA_INCLUDE_PATH = the include path to jni.h
+# JAVA_INCLUDE_PATH2 = the include path to jni_md.h
+# JAVA_AWT_INCLUDE_PATH = the include path to jawt.h
+#
+
+#=============================================================================
+# Copyright 2001-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distributed this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# Expand {libarch} occurences to java_libarch subdirectory(-ies) and set ${_var}
+macro(JAVA_APPEND_LIBRARY_DIRECTORIES _var)
+ # Determine java arch-specific library subdir
+ if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ # Based on openjdk/jdk/make/common/shared/Platform.gmk as of 6b16
+ # and kaffe as of 1.1.8 which uses the first part of the
+ # GNU config.guess platform triplet.
+ if (CMAKE_SYSTEM_PROCESSOR MATCHES "^i[3-9]86$")
+ set(_java_libarch "i386")
+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ set(_java_libarch "amd64" "x86_64")
+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc")
+ set(_java_libarch "ppc" "powerpc" "ppc64")
+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
+ set(_java_libarch "sparc" "sparcv9")
+ else (CMAKE_SYSTEM_PROCESSOR MATCHES "^i[3-9]86$")
+ set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}")
+ endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i[3-9]86$")
+ else (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ set(_java_libarch "i386" "amd64" "ppc") # previous default
+ endif (CMAKE_SYSTEM_NAME MATCHES "Linux")
+
+ foreach(_path ${ARGN})
+ if (_path MATCHES "{libarch}")
+ foreach(_libarch ${_java_libarch})
+ string(REPLACE "{libarch}" "${_libarch}" _newpath "${_path}")
+ list(APPEND ${_var} "${_newpath}")
+ endforeach(_libarch)
+ else (_path MATCHES "{libarch}")
+ list(APPEND ${_var} "${_path}")
+ endif (_path MATCHES "{libarch}")
+ endforeach(_path)
+endmacro(JAVA_APPEND_LIBRARY_DIRECTORIES)
+
+file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _JAVA_HOME)
+
+get_filename_component(java_install_version
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME
+)
+
+set(JAVA_AWT_LIBRARY_DIRECTORIES
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/lib"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/lib"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib"
+)
+
+
+java_append_library_directories(JAVA_AWT_LIBRARY_DIRECTORIES
+ ${_JAVA_HOME}/jre/lib/{libarch}
+ ${_JAVA_HOME}/jre/lib
+ ${_JAVA_HOME}/lib
+ ${_JAVA_HOME}
+ /usr/lib
+ /usr/local/lib
+ /usr/lib/jvm/java/lib
+ /usr/lib/java/jre/lib/{libarch}
+ /usr/local/lib/java/jre/lib/{libarch}
+ /usr/local/share/java/jre/lib/{libarch}
+ /usr/lib/j2sdk1.4-sun/jre/lib/{libarch}
+ /usr/lib/j2sdk1.5-sun/jre/lib/{libarch}
+ /opt/sun-jdk-1.5.0.04/jre/lib/{libarch}
+ /usr/lib/jvm/java-6-sun/jre/lib/{libarch}
+ /usr/lib/jvm/java-1.5.0-sun/jre/lib/{libarch}
+ /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/{libarch} # can this one be removed according to #8821 ? Alex
+ /usr/lib/jvm/java-openjdk/jre/lib/{libarch}
+ /usr/lib/jvm/java-6-openjdk/jre/lib/{libarch}
+ /usr/lib/jvm/java-openjdk/jre/lib/{libarch}
+ # Debian specific paths for default JVM
+ /usr/lib/jvm/default-java/jre/lib/{libarch}
+ /usr/lib/jvm/default-java/jre/lib
+ /usr/lib/jvm/default-java/lib
+)
+
+set(JAVA_JVM_LIBRARY_DIRECTORIES)
+foreach (dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
+ set(JAVA_JVM_LIBRARY_DIRECTORIES
+ ${JAVA_JVM_LIBRARY_DIRECTORIES}
+ "${dir}"
+ "${dir}/client"
+ "${dir}/server"
+ )
+endforeach (dir)
+
+
+set(JAVA_AWT_INCLUDE_DIRECTORIES
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
+ ${_JAVA_HOME}/include
+ /usr/include
+ /usr/local/include
+ /usr/lib/java/include
+ /usr/local/lib/java/include
+ /usr/lib/jvm/java/include
+ /usr/lib/jvm/java-6-sun/include
+ /usr/lib/jvm/java-1.5.0-sun/include
+ /usr/lib/jvm/java-6-sun-1.6.0.00/include # can this one be removed according to #8821 ? Alex
+ /usr/lib/jvm/java-6-openjdk/include
+ /usr/local/share/java/include
+ /usr/lib/j2sdk1.4-sun/include
+ /usr/lib/j2sdk1.5-sun/include
+ /opt/sun-jdk-1.5.0.04/include
+ # Debian specific path for default JVM
+ /usr/lib/jvm/default-java/include
+)
+
+foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}" "${JAVA_HEADER}")
+ get_filename_component(jpath "${JAVA_PROG}" PATH)
+ foreach (JAVA_INC_PATH ../include ../java/include ../share/java/include)
+ if (EXISTS ${jpath}/${JAVA_INC_PATH})
+ set(JAVA_AWT_INCLUDE_DIRECTORIES
+ ${JAVA_AWT_INCLUDE_DIRECTORIES}
+ "${jpath}/${JAVA_INC_PATH}"
+ )
+ endif (EXISTS ${jpath}/${JAVA_INC_PATH})
+ endforeach (JAVA_INC_PATH)
+
+ foreach (JAVA_LIB_PATH
+ ../lib ../jre/lib ../jre/lib/i386
+ ../java/lib ../java/jre/lib ../java/jre/lib/i386
+ ../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
+ if (EXISTS ${jpath}/${JAVA_LIB_PATH})
+ set(JAVA_AWT_LIBRARY_DIRECTORIES
+ ${JAVA_AWT_LIBRARY_DIRECTORIES}
+ "${jpath}/${JAVA_LIB_PATH}"
+ )
+ endif (EXISTS ${jpath}/${JAVA_LIB_PATH})
+ endforeach (JAVA_LIB_PATH)
+endforeach (JAVA_PROG)
+
+if (APPLE)
+ if (EXISTS ~/Library/Frameworks/JavaVM.framework)
+ set(JAVA_HAVE_FRAMEWORK 1)
+ endif (EXISTS ~/Library/Frameworks/JavaVM.framework)
+
+ if (EXISTS /Library/Frameworks/JavaVM.framework)
+ SET(JAVA_HAVE_FRAMEWORK 1)
+ endif (EXISTS /Library/Frameworks/JavaVM.framework)
+
+ if (EXISTS /System/Library/Frameworks/JavaVM.framework)
+ set(JAVA_HAVE_FRAMEWORK 1)
+ endif(EXISTS /System/Library/Frameworks/JavaVM.framework)
+
+ if (JAVA_HAVE_FRAMEWORK)
+ if(NOT JAVA_AWT_LIBRARY)
+ set(JAVA_AWT_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE)
+ endif(NOT JAVA_AWT_LIBRARY)
+
+ if (NOT JAVA_JVM_LIBRARY)
+ set (JAVA_JVM_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE)
+ endif (NOT JAVA_JVM_LIBRARY)
+
+ if (NOT JAVA_AWT_INCLUDE_PATH)
+ if (EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h)
+ set(JAVA_AWT_INCLUDE_PATH "/System/Library/Frameworks/JavaVM.framework/Headers" CACHE FILEPATH "jawt.h location" FORCE)
+ endif(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h)
+ endif (NOT JAVA_AWT_INCLUDE_PATH)
+
+ #
+ # If using "-framework JavaVM", prefer its headers *before* the others in
+ # JAVA_AWT_INCLUDE_DIRECTORIES... (*prepend* to the list here)
+ #
+ set(JAVA_AWT_INCLUDE_DIRECTORIES
+ ~/Library/Frameworks/JavaVM.framework/Headers
+ /Library/Frameworks/JavaVM.framework/Headers
+ /System/Library/Frameworks/JavaVM.framework/Headers
+ ${JAVA_AWT_INCLUDE_DIRECTORIES}
+ )
+ endif(JAVA_HAVE_FRAMEWORK)
+else (APPLE)
+ find_library(JAVA_AWT_LIBRARY
+ NAMES
+ jawt
+ PATHS
+ ${JAVA_AWT_LIBRARY_DIRECTORIES}
+ )
+
+ find_library(JAVA_JVM_LIBRARY
+ NAMES
+ jvm
+ JavaVM
+ PATHS
+ ${JAVA_JVM_LIBRARY_DIRECTORIES}
+ )
+endif (APPLE)
+
+# add in the include path
+find_path(JAVA_INCLUDE_PATH
+ NAMES
+ jni.h
+ PATHS
+ ${JAVA_AWT_INCLUDE_DIRECTORIES}
+)
+
+find_path(JAVA_INCLUDE_PATH2
+ NAMES
+ jni_md.h
+ PATHS
+ ${JAVA_INCLUDE_PATH}
+ ${JAVA_INCLUDE_PATH}/win32
+ ${JAVA_INCLUDE_PATH}/linux
+ ${JAVA_INCLUDE_PATH}/freebsd
+ ${JAVA_INCLUDE_PATH}/solaris
+)
+
+find_path(JAVA_AWT_INCLUDE_PATH
+ NAMES
+ jawt.h
+ PATHS
+ ${JAVA_INCLUDE_PATH}
+)
+
+set(JNI_LIBRARIES
+ ${JAVA_AWT_LIBRARY}
+ ${JAVA_JVM_LIBRARY}
+)
+
+set(JNI_INCLUDE_DIRS
+ ${JAVA_INCLUDE_PATH}
+ ${JAVA_INCLUDE_PATH2}
+ ${JAVA_AWT_INCLUDE_PATH}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(JNI DEFAULT_MSG JNI_LIBRARIES JNI_INCLUDE_DIRS JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY)
+
+mark_as_advanced(JNI_LIBRARIES JNI_INCLUDE_DIRS JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY)