7195aca54f
At the top of a build tree we configure inside the CMakeFiles directory files such as "CMakeSystem.cmake" and "CMake<lang>Compiler.cmake" to save information detected about the system and compilers in use. The method of detection and the exact results store varies across CMake versions as things improve. This leads to problems when loading files configured by a different version of CMake. Previously we ignored such existing files only if the major.minor part of the CMake version component changed, and depended on the CMakeCache.txt to tell us the last version of CMake that wrote the files. This led to problems if the user deletes the CMakeCache.txt or we add required information to the files in a patch-level release of CMake (still a "feature point" release by modern CMake versioning convention). Ensure that we always have version-consistent platform information files by storing them in a subdirectory named with the CMake version. Every version of CMake will do its own system and compiler identification checks even when a build tree has already been configured by another version of CMake. Stored results will not clobber those from other versions of CMake which may be run again on the same tree in the future. Loaded results will match what the system and language modules expect. Rename the undocumented variable CMAKE_PLATFORM_ROOT_BIN to CMAKE_PLATFORM_INFO_DIR to clarify its purpose. The new variable points at the version-specific directory while the old variable did not.
103 lines
4.1 KiB
CMake
103 lines
4.1 KiB
CMake
|
|
#=============================================================================
|
|
# Copyright 2002-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 distribute this file outside of CMake, substitute the full
|
|
# License text for the above reference.)
|
|
|
|
# determine the compiler to use for Java programs
|
|
# NOTE, a generator may set CMAKE_Java_COMPILER before
|
|
# loading this file to force a compiler.
|
|
|
|
if(NOT CMAKE_Java_COMPILER)
|
|
# prefer the environment variable CC
|
|
if($ENV{JAVA_COMPILER} MATCHES ".+")
|
|
get_filename_component(CMAKE_Java_COMPILER_INIT $ENV{JAVA_COMPILER} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
|
|
if(CMAKE_Java_FLAGS_ENV_INIT)
|
|
set(CMAKE_Java_COMPILER_ARG1 "${CMAKE_Java_FLAGS_ENV_INIT}" CACHE STRING "First argument to Java compiler")
|
|
endif()
|
|
if(NOT EXISTS ${CMAKE_Java_COMPILER_INIT})
|
|
message(SEND_ERROR "Could not find compiler set in environment variable JAVA_COMPILER:\n$ENV{JAVA_COMPILER}.")
|
|
endif()
|
|
endif()
|
|
|
|
if($ENV{JAVA_RUNTIME} MATCHES ".+")
|
|
get_filename_component(CMAKE_Java_RUNTIME_INIT $ENV{JAVA_RUNTIME} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
|
|
if(NOT EXISTS ${CMAKE_Java_RUNTIME_INIT})
|
|
message(SEND_ERROR "Could not find compiler set in environment variable JAVA_RUNTIME:\n$ENV{JAVA_RUNTIME}.")
|
|
endif()
|
|
endif()
|
|
|
|
if($ENV{JAVA_ARCHIVE} MATCHES ".+")
|
|
get_filename_component(CMAKE_Java_ARCHIVE_INIT $ENV{JAVA_ARCHIVE} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
|
|
if(NOT EXISTS ${CMAKE_Java_ARCHIVE_INIT})
|
|
message(SEND_ERROR "Could not find compiler set in environment variable JAVA_ARCHIVE:\n$ENV{JAVA_ARCHIVE}.")
|
|
endif()
|
|
endif()
|
|
|
|
set(Java_BIN_PATH
|
|
"[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.8;JavaHome]/bin"
|
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin"
|
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;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.3;JavaHome]/bin"
|
|
$ENV{JAVA_HOME}/bin
|
|
/usr/bin
|
|
/usr/lib/java/bin
|
|
/usr/share/java/bin
|
|
/usr/local/bin
|
|
/usr/local/java/bin
|
|
/usr/local/java/share/bin
|
|
/usr/java/j2sdk1.4.2_04
|
|
/usr/lib/j2sdk1.4-sun/bin
|
|
/usr/java/j2sdk1.4.2_09/bin
|
|
/usr/lib/j2sdk1.5-sun/bin
|
|
/opt/sun-jdk-1.5.0.04/bin
|
|
)
|
|
# if no compiler has been specified yet, then look for one
|
|
if(CMAKE_Java_COMPILER_INIT)
|
|
set(CMAKE_Java_COMPILER ${CMAKE_Java_COMPILER_INIT} CACHE PATH "Java Compiler")
|
|
else()
|
|
find_program(CMAKE_Java_COMPILER
|
|
NAMES javac
|
|
PATHS ${Java_BIN_PATH}
|
|
)
|
|
endif()
|
|
|
|
# if no runtime has been specified yet, then look for one
|
|
if(CMAKE_Java_RUNTIME_INIT)
|
|
set(CMAKE_Java_RUNTIME ${CMAKE_Java_RUNTIME_INIT} CACHE PATH "Java Compiler")
|
|
else()
|
|
find_program(CMAKE_Java_RUNTIME
|
|
NAMES java
|
|
PATHS ${Java_BIN_PATH}
|
|
)
|
|
endif()
|
|
|
|
# if no archive has been specified yet, then look for one
|
|
if(CMAKE_Java_ARCHIVE_INIT)
|
|
set(CMAKE_Java_ARCHIVE ${CMAKE_Java_ARCHIVE_INIT} CACHE PATH "Java Compiler")
|
|
else()
|
|
find_program(CMAKE_Java_ARCHIVE
|
|
NAMES jar
|
|
PATHS ${Java_BIN_PATH}
|
|
)
|
|
endif()
|
|
endif()
|
|
mark_as_advanced(CMAKE_Java_COMPILER)
|
|
|
|
# configure variables set in this file for fast reload later on
|
|
configure_file(${CMAKE_ROOT}/Modules/CMakeJavaCompiler.cmake.in
|
|
${CMAKE_PLATFORM_INFO_DIR}/CMakeJavaCompiler.cmake IMMEDIATE @ONLY)
|
|
set(CMAKE_Java_COMPILER_ENV_VAR "JAVA_COMPILER")
|