mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-25 00:59:19 -06:00
Merge topic 'CheckIncludeFiles-language-CXX'
b31d5e1dCheckIncludeFiles: improve warning for missing argument1f1c2a9fCheckIncludeFiles: clean up documentation of new featuresc8609992Help: Add notes for topic 'CheckIncludeFiles-language-CXX'ea1bb902CheckIncludeFiles: add unit tests7669695aCheckIncludeFiles: extend to allow a LANGUAGE argument Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1464
This commit is contained in:
6
Help/release/dev/CheckIncludeFiles-language-CXX.rst
Normal file
6
Help/release/dev/CheckIncludeFiles-language-CXX.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
CheckIncludeFiles-language-CXX
|
||||
------------------------------
|
||||
|
||||
* The :module:`CheckIncludeFiles` module :command:`CHECK_INCLUDE_FILES`
|
||||
command gained a ``LANGUAGE`` option to specify whether to check using the
|
||||
``C`` or ``CXX`` compiler.
|
||||
@@ -6,19 +6,24 @@
|
||||
# -----------------
|
||||
#
|
||||
# Provides a macro to check if a list of one or more header files can
|
||||
# be included together in ``C``.
|
||||
# be included together.
|
||||
#
|
||||
# .. command:: CHECK_INCLUDE_FILES
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# CHECK_INCLUDE_FILES("<includes>" <variable>)
|
||||
# CHECK_INCLUDE_FILES("<includes>" <variable> [LANGUAGE <language>])
|
||||
#
|
||||
# Check if the given ``<includes>`` list may be included together
|
||||
# in a ``C`` source file and store the result in an internal cache
|
||||
# in a source file and store the result in an internal cache
|
||||
# entry named ``<variable>``. Specify the ``<includes>`` argument
|
||||
# as a :ref:`;-list <CMake Language Lists>` of header file names.
|
||||
#
|
||||
# If LANGUAGE is set, the specified compiler will be used to perform the
|
||||
# check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler
|
||||
# will be used if enabled. If the C compiler is not enabled, the C++
|
||||
# compiler will be used if enabled.
|
||||
#
|
||||
# The following variables may be set before calling this macro to modify
|
||||
# the way the check is run:
|
||||
#
|
||||
@@ -37,6 +42,31 @@
|
||||
macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
|
||||
if(NOT DEFINED "${VARIABLE}")
|
||||
set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
|
||||
|
||||
if("x${ARGN}" STREQUAL "x")
|
||||
if(CMAKE_C_COMPILER_LOADED)
|
||||
set(_lang C)
|
||||
elseif(CMAKE_CXX_COMPILER_LOADED)
|
||||
set(_lang CXX)
|
||||
else()
|
||||
message(FATAL_ERROR "CHECK_INCLUDE_FILES needs either C or CXX language enabled.\n")
|
||||
endif()
|
||||
elseif("x${ARGN}" MATCHES "^xLANGUAGE;([a-zA-Z]+)$")
|
||||
set(_lang "${CMAKE_MATCH_1}")
|
||||
elseif("x${ARGN}" MATCHES "^xLANGUAGE$")
|
||||
message(FATAL_ERROR "No languages listed for LANGUAGE option.\nSupported languages: C, CXX.\n")
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown arguments:\n ${ARGN}\n")
|
||||
endif()
|
||||
|
||||
if(_lang STREQUAL "C")
|
||||
set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckIncludeFiles/${var}.c)
|
||||
elseif(_lang STREQUAL "CXX")
|
||||
set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckIncludeFiles/${var}.cpp)
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown language:\n ${_lang}\nSupported languages: C, CXX.\n")
|
||||
endif()
|
||||
|
||||
if(CMAKE_REQUIRED_INCLUDES)
|
||||
set(CHECK_INCLUDE_FILES_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
|
||||
else()
|
||||
@@ -51,7 +81,7 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
|
||||
string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
|
||||
"\n\nint main(void){return 0;}\n")
|
||||
configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
|
||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFiles.c" @ONLY)
|
||||
"${src}" @ONLY)
|
||||
|
||||
set(_INCLUDE ${INCLUDE}) # remove empty elements
|
||||
if("${_INCLUDE}" MATCHES "^([^;]+);.+;([^;]+)$")
|
||||
@@ -68,7 +98,7 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
|
||||
endif()
|
||||
try_compile(${VARIABLE}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFiles.c
|
||||
${src}
|
||||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
||||
CMAKE_FLAGS
|
||||
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,8 @@
|
||||
CMake Error at .*/Modules/CheckIncludeFiles.cmake:[0-9]+. \(message\):
|
||||
No languages listed for LANGUAGE option.
|
||||
|
||||
Supported languages: C, CXX.
|
||||
|
||||
Call Stack \(most recent call first\):
|
||||
CheckIncludeFilesMissingLanguage.cmake:[0-9]+ \(check_include_files\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
||||
@@ -0,0 +1,3 @@
|
||||
enable_language(C)
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files("stddef.h;stdlib.h" HAVE_MISSING_ARGUMENT_H LANGUAGE)
|
||||
6
Tests/RunCMake/CheckModules/CheckIncludeFilesOk.cmake
Normal file
6
Tests/RunCMake/CheckModules/CheckIncludeFilesOk.cmake
Normal file
@@ -0,0 +1,6 @@
|
||||
enable_language(C)
|
||||
enable_language(CXX)
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files("stddef.h;stdlib.h" HAVE_STDLIB_H)
|
||||
check_include_files("stddef.h;stdlib.h" HAVE_STDLIB_H2 LANGUAGE C)
|
||||
check_include_files("cstddef;cstdlib" HAVE_CSTDLIB_H LANGUAGE CXX)
|
||||
4
Tests/RunCMake/CheckModules/CheckIncludeFilesOkNoC.cmake
Normal file
4
Tests/RunCMake/CheckModules/CheckIncludeFilesOkNoC.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
enable_language(CXX)
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files("cstddef;cstdlib" HAVE_CSTDLIB_H3 LANGUAGE CXX)
|
||||
check_include_files("cstddef;cstdlib" HAVE_CSTDLIB_H4)
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,8 @@
|
||||
CMake Error at .*/Modules/CheckIncludeFiles.cmake:[0-9]+. \(message\):
|
||||
Unknown arguments:
|
||||
|
||||
FOOBAR
|
||||
|
||||
Call Stack \(most recent call first\):
|
||||
CheckIncludeFilesUnknownArgument.cmake:[0-9]+ \(check_include_files\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
||||
@@ -0,0 +1,3 @@
|
||||
enable_language(C)
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files("stddef.h;stdlib.h" HAVE_UNKNOWN_ARGUMENT_H FOOBAR)
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,10 @@
|
||||
CMake Error at .*/Modules/CheckIncludeFiles.cmake:[0-9]+. \(message\):
|
||||
Unknown language:
|
||||
|
||||
FOOBAR
|
||||
|
||||
Supported languages: C, CXX.
|
||||
|
||||
Call Stack \(most recent call first\):
|
||||
CheckIncludeFilesUnknownLanguage.cmake:[0-9]+ \(check_include_files\)
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
||||
@@ -0,0 +1,3 @@
|
||||
enable_language(C)
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files("stddef.h;stdlib.h" HAVE_UNKNOWN_ARGUMENT_H LANGUAGE FOOBAR)
|
||||
@@ -14,3 +14,9 @@ run_cmake(CheckTypeSizeUnknownArgument)
|
||||
run_cmake(CheckTypeSizeMixedArgs)
|
||||
|
||||
run_cmake(CheckTypeSizeOkNoC)
|
||||
|
||||
run_cmake(CheckIncludeFilesOk)
|
||||
run_cmake(CheckIncludeFilesOkNoC)
|
||||
run_cmake(CheckIncludeFilesMissingLanguage)
|
||||
run_cmake(CheckIncludeFilesUnknownArgument)
|
||||
run_cmake(CheckIncludeFilesUnknownLanguage)
|
||||
|
||||
Reference in New Issue
Block a user