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)