mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06:00
The first time you run cmake, it sets the implicit include path
to the value reported by the parser (and this value gets saved
in CMake${lang}Compiler.cmake). But if you re-run cmake,
UnixPaths.cmake blindly appends an extra /usr/include to the
value saved in CMake${lang}Compiler.cmake. That should not be
harmful in most cases, but we want later runs of cmake to be
consistent with the initial one. Resolve using a solution
suggested by Brad King:
- UnixPaths now sets the default implicit include path in a new
variable named _CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT
This value is only used the first time cmake is run (by
CMakeDetermineCompilerABI.cmake when it calls the implicit
include parser).
- if CMakeDetermineCompilerABI.cmake successfully calls the
implicit include parser, it overwrites the value in
_CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT with the
value returned by the parser
- CMakeDetermineCompilerABI.cmake always sets
CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES to the above value
of _CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT
- the final value of CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES gets
saved to CMake${lang}Compiler.cmake when it is regenerated after
the compiler tests are done.
- CMakeDetermineCompilerABI.cmake is only executed the first time cmake
is run. Additional runs of cmake directly load the implicit include
path from the value saved in CMake${lang}Compiler.cmake (the parser
and _INIT variable are not used).
The above depends on UnixPaths.cmake being loaded to set the _INIT value
before CMakeDetermineCompilerABI.cmake runs the implicit include parser.
90 lines
2.6 KiB
CMake
90 lines
2.6 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
|
|
# Block multiple inclusion because "CMakeCInformation.cmake" includes
|
|
# "Platform/${CMAKE_SYSTEM_NAME}" even though the generic module
|
|
# "CMakeSystemSpecificInformation.cmake" already included it.
|
|
# The extra inclusion is a work-around documented next to the include()
|
|
# call, so this can be removed when the work-around is removed.
|
|
if(__UNIX_PATHS_INCLUDED)
|
|
return()
|
|
endif()
|
|
set(__UNIX_PATHS_INCLUDED 1)
|
|
|
|
set(UNIX 1)
|
|
|
|
# also add the install directory of the running cmake to the search directories
|
|
# CMAKE_ROOT is CMAKE_INSTALL_PREFIX/share/cmake, so we need to go two levels up
|
|
get_filename_component(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH)
|
|
get_filename_component(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH)
|
|
|
|
# List common installation prefixes. These will be used for all
|
|
# search types.
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
|
|
# Standard
|
|
/usr/local /usr /
|
|
|
|
# CMake install location
|
|
"${_CMAKE_INSTALL_DIR}"
|
|
)
|
|
if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
|
|
# Project install destination.
|
|
"${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
if(CMAKE_STAGING_PREFIX)
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
|
|
# User-supplied staging prefix.
|
|
"${CMAKE_STAGING_PREFIX}"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# Non "standard" but common install prefixes
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
|
|
/usr/X11R6
|
|
/usr/pkg
|
|
/opt
|
|
)
|
|
|
|
# List common include file locations not under the common prefixes.
|
|
list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
|
|
# X11
|
|
/usr/include/X11
|
|
)
|
|
|
|
list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
|
|
# X11
|
|
/usr/lib/X11
|
|
)
|
|
|
|
list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
|
|
/lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64
|
|
)
|
|
|
|
# Platform-wide directories to avoid adding via -I<dir>.
|
|
list(APPEND CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES
|
|
/usr/include
|
|
)
|
|
|
|
# Default per-language values. These may be later replaced after
|
|
# parsing the implicit directory information from compiler output.
|
|
set(_CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES_INIT
|
|
${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}
|
|
/usr/include
|
|
)
|
|
set(_CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES_INIT
|
|
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}
|
|
/usr/include
|
|
)
|
|
set(_CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES_INIT
|
|
${CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES}
|
|
/usr/include
|
|
)
|
|
|
|
# Enable use of lib32 and lib64 search path variants by default.
|
|
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)
|
|
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
|
|
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS TRUE)
|