You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.0 KiB
123 lines
4.0 KiB
cmake_policy(SET CMP0075 NEW)
|
|
|
|
enable_language(C)
|
|
enable_language(CXX)
|
|
|
|
function(test_check_result isSucceed functionName)
|
|
if(isSucceed AND NOT IS_NEED_SUCCESS)
|
|
message(SEND_ERROR "${functionName}: check succeeded instead of failure")
|
|
elseif((NOT isSucceed) AND IS_NEED_SUCCESS)
|
|
message(SEND_ERROR "${functionName}: check failed instead of success")
|
|
endif()
|
|
endfunction()
|
|
|
|
# Common variables
|
|
set(validCSourceCode "int main() {return 0;}")
|
|
|
|
###
|
|
# Checking checkers
|
|
###
|
|
|
|
# It uses common internal function `CMAKE_CHECK_SOURCE_COMPILES()`
|
|
# include(CheckCCompilerFlag)
|
|
|
|
# Also checks common internal function `CMAKE_CHECK_SOURCE_COMPILES()`
|
|
include(CheckCSourceCompiles)
|
|
check_c_source_compiles("${validCSourceCode}" CHECK_C_SOURCE_COMPILES_SUCCEED)
|
|
test_check_result("${CHECK_C_SOURCE_COMPILES_SUCCEED}" check_c_source_compiles)
|
|
|
|
# Also checks common internal function `CMAKE_CHECK_SOURCE_RUNS()`
|
|
include(CheckCSourceRuns)
|
|
check_c_source_runs("${validCSourceCode}" CHECK_C_SOURCE_RUNS_SUCCEED)
|
|
test_check_result("${CHECK_C_SOURCE_RUNS_SUCCEED}" check_c_source_runs)
|
|
|
|
# Shares code with similar C checkers
|
|
# include(CheckCXXCompilerFlag)
|
|
# include(CheckCXXSourceCompiles)
|
|
# include(CheckCXXSourceRuns)
|
|
# include(CheckCXXSymbolExists)
|
|
|
|
# Shares code with similar C checkers
|
|
# include(CheckCompilerFlag)
|
|
# include(CheckSourceCompiles)
|
|
# include(CheckSourceRuns)
|
|
|
|
# Shares code with similar C checkers
|
|
# include(CheckFortranCompilerFlag)
|
|
# include(CheckFortranFunctionExists) # No way to test it
|
|
# include(CheckFortranSourceCompiles)
|
|
# include(CheckFortranSourceRuns)
|
|
|
|
include(CheckFunctionExists)
|
|
check_function_exists (memcpy CHECK_FUNCTION_EXISTS_SUCCEED)
|
|
test_check_result("${CHECK_FUNCTION_EXISTS_SUCCEED}" check_function_exists)
|
|
|
|
include(CheckIncludeFile)
|
|
check_include_file("stddef.h" CHECK_INCLUDE_FILE_SUCCEED)
|
|
test_check_result("${CHECK_INCLUDE_FILE_SUCCEED}" check_include_file)
|
|
|
|
include(CheckIncludeFileCXX)
|
|
check_include_file_cxx("stddef.h" CHECK_INCLUDE_FILE_CXX_SUCCEED)
|
|
test_check_result("${CHECK_INCLUDE_FILE_CXX_SUCCEED}" check_include_file_cxx)
|
|
|
|
include(CheckIncludeFiles)
|
|
check_include_files("stddef.h;stdlib.h" CHECK_INCLUDE_FILES_SUCCEED)
|
|
test_check_result("${CHECK_INCLUDE_FILES_SUCCEED}" check_include_files)
|
|
|
|
include(CheckLibraryExists)
|
|
block(PROPAGATE HAVE_LIBM)
|
|
unset(CMAKE_REQUIRED_LIBRARIES)
|
|
unset(CMAKE_REQUIRED_LINK_DIRECTORIES)
|
|
check_library_exists(m ceil "" HAVE_LIBM)
|
|
endblock()
|
|
|
|
if(HAVE_LIBM)
|
|
check_library_exists(m ceil "" CHECK_LIBRARY_EXISTS_SUCCEED)
|
|
test_check_result("${CHECK_LIBRARY_EXISTS_SUCCEED}" check_library_exists)
|
|
endif()
|
|
|
|
# Shares code with similar C checkers
|
|
# include(CheckOBJCCompilerFlag)
|
|
# include(CheckOBJCSourceCompiles)
|
|
# include(CheckOBJCSourceRuns)
|
|
|
|
# Shares code with similar C checkers
|
|
# include(CheckOBJCXXCompilerFlag)
|
|
# include(CheckOBJCXXSourceCompiles)
|
|
# include(CheckOBJCXXSourceRuns)
|
|
|
|
include(CheckPrototypeDefinition)
|
|
block(PROPAGATE CHECK_PROTOTYPE_DEFINITION_WORKS)
|
|
unset(CMAKE_REQUIRED_LIBRARIES)
|
|
unset(CMAKE_REQUIRED_LINK_DIRECTORIES)
|
|
check_prototype_definition(memmove
|
|
"void *memmove(void *dest, const void *src, size_t n)"
|
|
"NULL"
|
|
"string.h"
|
|
CHECK_PROTOTYPE_DEFINITION_SUCCEED)
|
|
endblock()
|
|
|
|
if (CHECK_PROTOTYPE_DEFINITION_WORKS)
|
|
check_prototype_definition(memmove
|
|
"void *memmove(void *dest, const void *src, size_t n)"
|
|
"NULL"
|
|
"string.h"
|
|
CHECK_PROTOTYPE_DEFINITION_SUCCEED)
|
|
test_check_result("${CHECK_PROTOTYPE_DEFINITION_SUCCEED}" check_prototype_definition)
|
|
endif()
|
|
|
|
# It uses common internal function `CMAKE_CHECK_SOURCE_COMPILES()`
|
|
# include(CheckStructHasMember)
|
|
|
|
include(CheckSymbolExists)
|
|
check_symbol_exists(errno "errno.h" CHECK_SYMBOL_EXISTS_SUCCEED)
|
|
test_check_result("${CHECK_SYMBOL_EXISTS_SUCCEED}" check_symbol_exists)
|
|
|
|
include(CheckTypeSize)
|
|
check_type_size(int SIZEOF_INT)
|
|
test_check_result("${HAVE_SIZEOF_INT}" check_type_size)
|
|
|
|
include(CheckVariableExists)
|
|
check_variable_exists(myTestVar CHECK_VARIABLE_EXISTS_SUCCEED)
|
|
test_check_result("${CHECK_VARIABLE_EXISTS_SUCCEED}" check_variable_exists)
|