From: Michihiro NAKAJIMA Date: Thu, 19 Mar 2009 22:21:35 +0000 (-0400) Subject: Improve cmake detecting a function on linux. X-Git-Tag: v2.7.0~122 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5dd8d2e265bb87df20785c9653b73871ced6bcdd;p=thirdparty%2Flibarchive.git Improve cmake detecting a function on linux. The GNU C library defines stub functions(chflags, fchflags..), and so cmake detecting the function process found out that stub function. This commit avoid detecting the stub function. SVN-Revision: 812 --- diff --git a/build/cmake/CheckFuncs.cmake b/build/cmake/CheckFuncs.cmake index b7aa3f166..108774fdd 100644 --- a/build/cmake/CheckFuncs.cmake +++ b/build/cmake/CheckFuncs.cmake @@ -14,7 +14,6 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. - INCLUDE(CheckFunctionExists) INCLUDE(CheckSymbolExists) @@ -23,17 +22,34 @@ MACRO (CHECK_FUNCS _FUNCS) STRING(TOUPPER ${_func} _funcvar) SET(_funcvar "HAVE_${_funcvar}") SET(_include "") - IF (WIN32 AND "${_func}" MATCHES "^wmemcmp$") - SET(_include "wchar.h") - ENDIF (WIN32 AND "${_func}" MATCHES "^wmemcmp$") - IF (WIN32 AND "${_func}" MATCHES "^wmemcpy$") - SET(_include "wchar.h") - ENDIF (WIN32 AND "${_func}" MATCHES "^wmemcpy$") - IF ("${_include}" STREQUAL "") - CHECK_FUNCTION_EXISTS("${_func}" "${_funcvar}") - ELSE ("${_include}" STREQUAL "") - CHECK_SYMBOL_EXISTS("${_func}" "${_include}" "${_funcvar}") - ENDIF ("${_include}" STREQUAL "") + IF ("${_funcvar}" MATCHES "^${_funcvar}$") + IF (WIN32 AND "${_func}" MATCHES "^wmemcmp$") + SET(_include "wchar.h") + ENDIF (WIN32 AND "${_func}" MATCHES "^wmemcmp$") + IF (WIN32 AND "${_func}" MATCHES "^wmemcpy$") + SET(_include "wchar.h") + ENDIF (WIN32 AND "${_func}" MATCHES "^wmemcpy$") + IF ("${_include}" STREQUAL "") + SET(CHECK_STUB_FUNC_1 "__stub_${_func}") + SET(CHECK_STUB_FUNC_2 "__stub___${_func}") + CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/build/cmake/CheckFuncs_stub.c.in + ${CMAKE_BINARY_DIR}/cmake.tmp/CheckFuncs_stub.c IMMEDIATE) + TRY_COMPILE(__stub + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/cmake.tmp/CheckFuncs_stub.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} + "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}") + IF (__stub) + SET("${_funcvar}" "" CACHE INTERNAL "Have function ${_func}") + ELSE (__stub) + CHECK_FUNCTION_EXISTS("${_func}" "${_funcvar}") + ENDIF (__stub) + ELSE ("${_include}" STREQUAL "") + CHECK_SYMBOL_EXISTS("${_func}" "${_include}" "${_funcvar}") + ENDIF ("${_include}" STREQUAL "") + ENDIF ("${_funcvar}" MATCHES "^${_funcvar}$") ENDFOREACH (_func) ENDMACRO (CHECK_FUNCS) diff --git a/build/cmake/CheckFuncs_stub.c.in b/build/cmake/CheckFuncs_stub.c.in new file mode 100644 index 000000000..50da414b5 --- /dev/null +++ b/build/cmake/CheckFuncs_stub.c.in @@ -0,0 +1,16 @@ +#ifdef __STDC__ +#include +#else +#include +#endif + +int +main() +{ +#if defined ${CHECK_STUB_FUNC_1} || defined ${CHECK_STUB_FUNC_2} + return 0; +#else +this system have stub + return 0; +#endif +}