Merge topic 'find-java-os-x-fixes'
dd72b19f
Find{Java,JNI}: Use /usr/libexec/java_home on OS X70560ee1
FindJNI: Overhaul finding JDK libraries and headers on OS Xfcd66a7f
Find{Java,JNI}: Consider JAVA_HOME before ENV{JAVA_HOME}4b3614b2
Find{Java,JNI}: Use ENV{JAVA_HOME} first when set
This commit is contained in:
commit
14fe404956
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2013-2014 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 distribute this file outside of CMake, substitute the full
|
||||||
|
# License text for the above reference.)
|
||||||
|
|
||||||
|
# Do not include this module directly from code outside CMake!
|
||||||
|
set(_JAVA_HOME "")
|
||||||
|
if(JAVA_HOME AND IS_DIRECTORY "${JAVA_HOME}")
|
||||||
|
set(_JAVA_HOME "${JAVA_HOME}")
|
||||||
|
set(_JAVA_HOME_EXPLICIT 1)
|
||||||
|
else()
|
||||||
|
set(_ENV_JAVA_HOME "")
|
||||||
|
if(DEFINED ENV{JAVA_HOME})
|
||||||
|
file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _ENV_JAVA_HOME)
|
||||||
|
endif()
|
||||||
|
if(_ENV_JAVA_HOME AND IS_DIRECTORY "${_ENV_JAVA_HOME}")
|
||||||
|
set(_JAVA_HOME "${_ENV_JAVA_HOME}")
|
||||||
|
set(_JAVA_HOME_EXPLICIT 1)
|
||||||
|
else()
|
||||||
|
set(_CMD_JAVA_HOME "")
|
||||||
|
if(APPLE AND EXISTS /usr/libexec/java_home)
|
||||||
|
execute_process(COMMAND /usr/libexec/java_home
|
||||||
|
OUTPUT_VARIABLE _CMD_JAVA_HOME OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
endif()
|
||||||
|
if(_CMD_JAVA_HOME AND IS_DIRECTORY "${_CMD_JAVA_HOME}")
|
||||||
|
set(_JAVA_HOME "${_CMD_JAVA_HOME}")
|
||||||
|
set(_JAVA_HOME_EXPLICIT 0)
|
||||||
|
endif()
|
||||||
|
unset(_CMD_JAVA_HOME)
|
||||||
|
endif()
|
||||||
|
unset(_ENV_JAVA_HOME)
|
||||||
|
endif()
|
|
@ -6,7 +6,10 @@
|
||||||
#
|
#
|
||||||
# This module finds if Java is installed and determines where the
|
# This module finds if Java is installed and determines where the
|
||||||
# include files and libraries are. It also determines what the name of
|
# include files and libraries are. It also determines what the name of
|
||||||
# the library is. This code sets the following variables:
|
# the library is. The caller may set variable JAVA_HOME to specify a
|
||||||
|
# Java installation prefix explicitly.
|
||||||
|
#
|
||||||
|
# This module sets the following result variables:
|
||||||
#
|
#
|
||||||
# ::
|
# ::
|
||||||
#
|
#
|
||||||
|
@ -91,22 +94,37 @@ macro(java_append_library_directories _var)
|
||||||
endforeach()
|
endforeach()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
|
||||||
|
|
||||||
|
# Save CMAKE_FIND_FRAMEWORK
|
||||||
|
if(DEFINED CMAKE_FIND_FRAMEWORK)
|
||||||
|
set(_JNI_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
|
||||||
|
else()
|
||||||
|
unset(_JNI_CMAKE_FIND_FRAMEWORK)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(_JAVA_HOME_EXPLICIT)
|
||||||
|
set(CMAKE_FIND_FRAMEWORK NEVER)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(JAVA_AWT_LIBRARY_DIRECTORIES)
|
||||||
|
if(_JAVA_HOME)
|
||||||
|
JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
|
||||||
|
${_JAVA_HOME}/jre/lib/{libarch}
|
||||||
|
${_JAVA_HOME}/jre/lib
|
||||||
|
${_JAVA_HOME}/lib
|
||||||
|
${_JAVA_HOME}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
get_filename_component(java_install_version
|
get_filename_component(java_install_version
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
|
||||||
|
|
||||||
set(JAVA_AWT_LIBRARY_DIRECTORIES
|
list(APPEND 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.4;JavaHome]/lib"
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;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"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib"
|
||||||
)
|
)
|
||||||
|
|
||||||
file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _JAVA_HOME)
|
|
||||||
|
|
||||||
JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
|
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/lib
|
||||||
/usr/local/lib
|
/usr/local/lib
|
||||||
/usr/lib/jvm/java/lib
|
/usr/lib/jvm/java/lib
|
||||||
|
@ -135,20 +153,21 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
|
||||||
|
|
||||||
set(JAVA_JVM_LIBRARY_DIRECTORIES)
|
set(JAVA_JVM_LIBRARY_DIRECTORIES)
|
||||||
foreach(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
|
foreach(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
|
||||||
set(JAVA_JVM_LIBRARY_DIRECTORIES
|
list(APPEND JAVA_JVM_LIBRARY_DIRECTORIES
|
||||||
${JAVA_JVM_LIBRARY_DIRECTORIES}
|
|
||||||
"${dir}"
|
"${dir}"
|
||||||
"${dir}/client"
|
"${dir}/client"
|
||||||
"${dir}/server"
|
"${dir}/server"
|
||||||
)
|
)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
set(JAVA_AWT_INCLUDE_DIRECTORIES)
|
||||||
set(JAVA_AWT_INCLUDE_DIRECTORIES
|
if(_JAVA_HOME)
|
||||||
|
list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES ${_JAVA_HOME}/include)
|
||||||
|
endif()
|
||||||
|
list(APPEND 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.4;JavaHome]/include"
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;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"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
|
||||||
${_JAVA_HOME}/include
|
|
||||||
/usr/include
|
/usr/include
|
||||||
/usr/local/include
|
/usr/local/include
|
||||||
/usr/lib/java/include
|
/usr/lib/java/include
|
||||||
|
@ -173,7 +192,7 @@ foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
|
||||||
get_filename_component(jpath "${JAVA_PROG}" PATH)
|
get_filename_component(jpath "${JAVA_PROG}" PATH)
|
||||||
foreach(JAVA_INC_PATH ../include ../java/include ../share/java/include)
|
foreach(JAVA_INC_PATH ../include ../java/include ../share/java/include)
|
||||||
if(EXISTS ${jpath}/${JAVA_INC_PATH})
|
if(EXISTS ${jpath}/${JAVA_INC_PATH})
|
||||||
set(JAVA_AWT_INCLUDE_DIRECTORIES ${JAVA_AWT_INCLUDE_DIRECTORIES} "${jpath}/${JAVA_INC_PATH}")
|
list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${jpath}/${JAVA_INC_PATH}")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
foreach(JAVA_LIB_PATH
|
foreach(JAVA_LIB_PATH
|
||||||
|
@ -181,54 +200,55 @@ foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
|
||||||
../java/lib ../java/jre/lib ../java/jre/lib/i386
|
../java/lib ../java/jre/lib ../java/jre/lib/i386
|
||||||
../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
|
../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
|
||||||
if(EXISTS ${jpath}/${JAVA_LIB_PATH})
|
if(EXISTS ${jpath}/${JAVA_LIB_PATH})
|
||||||
set(JAVA_AWT_LIBRARY_DIRECTORIES ${JAVA_AWT_LIBRARY_DIRECTORIES} "${jpath}/${JAVA_LIB_PATH}")
|
list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${jpath}/${JAVA_LIB_PATH}")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
if(EXISTS ~/Library/Frameworks/JavaVM.framework)
|
if(CMAKE_FIND_FRAMEWORK STREQUAL "ONLY")
|
||||||
set(JAVA_HAVE_FRAMEWORK 1)
|
set(_JNI_SEARCHES FRAMEWORK)
|
||||||
endif()
|
elseif(CMAKE_FIND_FRAMEWORK STREQUAL "NEVER")
|
||||||
if(EXISTS /Library/Frameworks/JavaVM.framework)
|
set(_JNI_SEARCHES NORMAL)
|
||||||
set(JAVA_HAVE_FRAMEWORK 1)
|
elseif(CMAKE_FIND_FRAMEWORK STREQUAL "LAST")
|
||||||
endif()
|
set(_JNI_SEARCHES NORMAL FRAMEWORK)
|
||||||
if(EXISTS /System/Library/Frameworks/JavaVM.framework)
|
else()
|
||||||
set(JAVA_HAVE_FRAMEWORK 1)
|
set(_JNI_SEARCHES FRAMEWORK NORMAL)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(JAVA_HAVE_FRAMEWORK)
|
|
||||||
if(NOT JAVA_AWT_LIBRARY)
|
|
||||||
set (JAVA_AWT_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT JAVA_JVM_LIBRARY)
|
|
||||||
set (JAVA_JVM_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
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()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# 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()
|
endif()
|
||||||
|
set(_JNI_FRAMEWORK_JVM NAMES JavaVM)
|
||||||
|
set(_JNI_FRAMEWORK_JAWT "${_JNI_FRAMEWORK_JVM}")
|
||||||
else()
|
else()
|
||||||
find_library(JAVA_AWT_LIBRARY jawt
|
set(_JNI_SEARCHES NORMAL)
|
||||||
PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
|
endif()
|
||||||
|
|
||||||
|
set(_JNI_NORMAL_JVM
|
||||||
|
NAMES jvm
|
||||||
|
PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
|
||||||
)
|
)
|
||||||
find_library(JAVA_JVM_LIBRARY NAMES jvm JavaVM
|
|
||||||
PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
|
set(_JNI_NORMAL_JAWT
|
||||||
|
NAMES jawt
|
||||||
|
PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
foreach(search ${_JNI_SEARCHES})
|
||||||
|
find_library(JAVA_JVM_LIBRARY ${_JNI_${search}_JVM})
|
||||||
|
find_library(JAVA_AWT_LIBRARY ${_JNI_${search}_JAWT})
|
||||||
|
if(JAVA_JVM_LIBRARY)
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
unset(_JNI_SEARCHES)
|
||||||
|
unset(_JNI_FRAMEWORK_JVM)
|
||||||
|
unset(_JNI_FRAMEWORK_JAWT)
|
||||||
|
unset(_JNI_NORMAL_JVM)
|
||||||
|
unset(_JNI_NORMAL_JAWT)
|
||||||
|
|
||||||
|
# Find headers matching the library.
|
||||||
|
if("${JAVA_JVM_LIBRARY};${JAVA_AWT_LIBRARY};" MATCHES "(/JavaVM.framework|-framework JavaVM);")
|
||||||
|
set(CMAKE_FIND_FRAMEWORK ONLY)
|
||||||
|
else()
|
||||||
|
set(CMAKE_FIND_FRAMEWORK NEVER)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# add in the include path
|
# add in the include path
|
||||||
|
@ -252,6 +272,14 @@ find_path(JAVA_AWT_INCLUDE_PATH jawt.h
|
||||||
${JAVA_INCLUDE_PATH}
|
${JAVA_INCLUDE_PATH}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Restore CMAKE_FIND_FRAMEWORK
|
||||||
|
if(DEFINED _JNI_CMAKE_FIND_FRAMEWORK)
|
||||||
|
set(CMAKE_FIND_FRAMEWORK ${_JNI_CMAKE_FIND_FRAMEWORK})
|
||||||
|
unset(_JNI_CMAKE_FIND_FRAMEWORK)
|
||||||
|
else()
|
||||||
|
unset(CMAKE_FIND_FRAMEWORK)
|
||||||
|
endif()
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI DEFAULT_MSG JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI DEFAULT_MSG JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
|
||||||
JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
|
JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
|
||||||
|
|
|
@ -5,8 +5,10 @@
|
||||||
# Find Java
|
# Find Java
|
||||||
#
|
#
|
||||||
# This module finds if Java is installed and determines where the
|
# This module finds if Java is installed and determines where the
|
||||||
# include files and libraries are. This code sets the following
|
# include files and libraries are. The caller may set variable JAVA_HOME
|
||||||
# variables:
|
# to specify a Java installation prefix explicitly.
|
||||||
|
#
|
||||||
|
# This module sets the following result variables:
|
||||||
#
|
#
|
||||||
# ::
|
# ::
|
||||||
#
|
#
|
||||||
|
@ -67,8 +69,14 @@
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
# (To distribute this file outside of CMake, substitute the full
|
||||||
# License text for the above reference.)
|
# License text for the above reference.)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
|
||||||
|
|
||||||
# The HINTS option should only be used for values computed from the system.
|
# The HINTS option should only be used for values computed from the system.
|
||||||
set(_JAVA_HINTS
|
set(_JAVA_HINTS)
|
||||||
|
if(_JAVA_HOME)
|
||||||
|
list(APPEND _JAVA_HINTS ${_JAVA_HOME}/bin)
|
||||||
|
endif()
|
||||||
|
list(APPEND _JAVA_HINTS
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\2.0;JavaHome]/bin"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\2.0;JavaHome]/bin"
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin"
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin"
|
||||||
|
@ -77,7 +85,6 @@ set(_JAVA_HINTS
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin"
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin"
|
||||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin"
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin"
|
||||||
$ENV{JAVA_HOME}/bin
|
|
||||||
)
|
)
|
||||||
# Hard-coded guesses should still go in PATHS. This ensures that the user
|
# Hard-coded guesses should still go in PATHS. This ensures that the user
|
||||||
# environment can always override hard guesses.
|
# environment can always override hard guesses.
|
||||||
|
|
Loading…
Reference in New Issue