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.
cmake/Tests/RunCMake/CheckModules/CheckLinkDirectories.cmake

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)