Files
impala/cmake_modules/FindJNI.cmake
Michael Ubell a524507b83 Jsig
2014-01-08 10:44:29 -08:00

262 lines
9.4 KiB
CMake

# - 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_JSIG_LIBRARY
NAMES
jsig
PATHS
${JAVA_JVM_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_JSIG_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_JSIG_LIBRARY JAVA_JVM_LIBRARY)
mark_as_advanced(JNI_LIBRARIES JNI_INCLUDE_DIRS JAVA_AWT_LIBRARY JAVA_JSIG_LIBRARY JAVA_JVM_LIBRARY)