|
|
@@ -0,0 +1,122 @@
|
|
|
+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)
|