]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Rework the style of CHECK_FUNCS() to better match
authorTim Kientzle <kientzle@gmail.com>
Sun, 2 Aug 2009 20:00:46 +0000 (16:00 -0400)
committerTim Kientzle <kientzle@gmail.com>
Sun, 2 Aug 2009 20:00:46 +0000 (16:00 -0400)
the style of built-in cmake tests:
 * One test per invocation
 * macro name is explicit

Convert some of the tests to CHECK_SYMBOL_EXISTS(),
which further reduces some of the magic within the
old CHECK_FUNCS.  It is now primarily an extended
version of CHECK_FUNCTION_EXISTS that understands the
glibc __stub_ convention for marking functions that
should be treated as nonexistent even though they
do exist in the local library.  I've renamed the
macro to CHECK_FUNCTION_EXISTS_GLIBC to better
reflect this.

SVN-Revision: 1308

CMakeLists.txt
build/cmake/CheckFuncs.cmake

index 905b82c7d938b096276e6e1df8a7cba7a181e46c..2cd67b5ce0427449dae7cb3aa9ac8abb4a8c16bc 100644 (file)
@@ -286,16 +286,55 @@ CHECK_FUNCTION_EXISTS(SHA512_Init HAVE_SHA512)
 #
 CHECK_SYMBOL_EXISTS(CreateHardLink "windows.h" HAVE_CREATEHARDLINK)
 CHECK_SYMBOL_EXISTS(CreateSymbolicLink "windows.h" HAVE_CREATESYMBOLICLINK)
-CHECK_FUNCS(chflags chown chroot)
-CHECK_FUNCS(fchdir fchflags fchmod fchown fcntl fork)
-CHECK_FUNCS(fstat ftruncate futimes geteuid getpid)
-CHECK_FUNCS(lchflags lchmod lchown link lstat)
-CHECK_FUNCS(lutimes memmove memset mkdir mkfifo mknod)
-CHECK_FUNCS(nl_langinfo pipe poll readlink select setenv setlocale)
-CHECK_FUNCS(strchr strdup strerror strrchr symlink timegm)
-CHECK_FUNCS(tzset unsetenv utime utimes vfork)
-CHECK_FUNCS(wcrtomb wcscpy wcslen wctomb wmemcmp wmemcpy)
-
+CHECK_FUNCTION_EXISTS_GLIBC(chflags HAVE_CHFLAGS)
+CHECK_FUNCTION_EXISTS_GLIBC(chown HAVE_CHOWN)
+CHECK_FUNCTION_EXISTS_GLIBC(chroot HAVE_CHROOT)
+CHECK_FUNCTION_EXISTS_GLIBC(fchdir HAVE_FCHDIR)
+CHECK_FUNCTION_EXISTS_GLIBC(fchflags HAVE_FCHFLAGS)
+CHECK_FUNCTION_EXISTS_GLIBC(fchmod HAVE_FCHMOD)
+CHECK_FUNCTION_EXISTS_GLIBC(fchown HAVE_FCHOWN)
+CHECK_FUNCTION_EXISTS_GLIBC(fcntl HAVE_FCNTL)
+CHECK_FUNCTION_EXISTS_GLIBC(fork HAVE_FORK)
+CHECK_FUNCTION_EXISTS_GLIBC(fstat HAVE_FSTAT)
+CHECK_FUNCTION_EXISTS_GLIBC(ftruncate HAVE_FTRUNCATE)
+CHECK_FUNCTION_EXISTS_GLIBC(futimes HAVE_FUTIMES)
+CHECK_FUNCTION_EXISTS_GLIBC(geteuid HAVE_GETEUID)
+CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID)
+CHECK_FUNCTION_EXISTS_GLIBC(lchflags HAVE_LCHFLAGS)
+CHECK_FUNCTION_EXISTS_GLIBC(lchmod HAVE_LCHMOD)
+CHECK_FUNCTION_EXISTS_GLIBC(lchown HAVE_LCHOWN)
+CHECK_FUNCTION_EXISTS_GLIBC(link HAVE_LINK)
+CHECK_FUNCTION_EXISTS_GLIBC(lstat HAVE_LSTAT)
+CHECK_FUNCTION_EXISTS_GLIBC(lutimes HAVE_LUTIMES)
+CHECK_FUNCTION_EXISTS_GLIBC(memmove HAVE_MEMMOVE)
+CHECK_FUNCTION_EXISTS_GLIBC(memset HAVE_MEMSET)
+CHECK_FUNCTION_EXISTS_GLIBC(mkdir HAVE_MKDIR)
+CHECK_FUNCTION_EXISTS_GLIBC(mkfifo HAVE_MKFIFO)
+CHECK_FUNCTION_EXISTS_GLIBC(mknod HAVE_MKNOD)
+CHECK_FUNCTION_EXISTS_GLIBC(nl_langinfo HAVE_NL_LANGINFO)
+CHECK_FUNCTION_EXISTS_GLIBC(pipe HAVE_PIPE)
+CHECK_FUNCTION_EXISTS_GLIBC(poll HAVE_POLL)
+CHECK_FUNCTION_EXISTS_GLIBC(readlink HAVE_READLINK)
+CHECK_FUNCTION_EXISTS_GLIBC(select HAVE_SELECT)
+CHECK_FUNCTION_EXISTS_GLIBC(setenv HAVE_SETENV)
+CHECK_FUNCTION_EXISTS_GLIBC(setlocale HAVE_SETLOCALE)
+CHECK_FUNCTION_EXISTS_GLIBC(strchr HAVE_STRCHR)
+CHECK_FUNCTION_EXISTS_GLIBC(strdup HAVE_STRDUP)
+CHECK_FUNCTION_EXISTS_GLIBC(strerror HAVE_STRERROR)
+CHECK_FUNCTION_EXISTS_GLIBC(strrchr HAVE_STRRCHR)
+CHECK_FUNCTION_EXISTS_GLIBC(symlink HAVE_SYMLINK)
+CHECK_FUNCTION_EXISTS_GLIBC(timegm HAVE_TIMEGM)
+CHECK_FUNCTION_EXISTS_GLIBC(tzset HAVE_TZSET)
+CHECK_FUNCTION_EXISTS_GLIBC(unsetenv HAVE_UNSETENV)
+CHECK_FUNCTION_EXISTS_GLIBC(utime HAVE_UTIME)
+CHECK_FUNCTION_EXISTS_GLIBC(utimes HAVE_UTIMES)
+CHECK_FUNCTION_EXISTS_GLIBC(vfork HAVE_VFORK)
+CHECK_FUNCTION_EXISTS_GLIBC(wcrtomb HAVE_WCRTOMB)
+CHECK_FUNCTION_EXISTS_GLIBC(wcscpy HAVE_WCSCPY)
+CHECK_FUNCTION_EXISTS_GLIBC(wcslen HAVE_WCSLEN)
+CHECK_FUNCTION_EXISTS_GLIBC(wctomb HAVE_WCTOMB)
+CHECK_SYMBOL_EXISTS(wmemcmp "wchar.h" HAVE_WMEMCMP)
+CHECK_SYMBOL_EXISTS(wmemcpy "wchar.h" HAVE_WMEMCPY)
 
 SET(CMAKE_REQUIRED_LIBRARIES "")
 CHECK_SYMBOL_EXISTS(fseeko           "stdio.h"    HAVE_FSEEKO)
@@ -498,10 +537,16 @@ IF(ENABLE_XATTR)
   IF(HAVE_ATTR_LIB)
     SET(CMAKE_REQUIRED_LIBRARIES "attr")
   ENDIF(HAVE_ATTR_LIB)
-  CHECK_FUNCS(extattr_get_file extattr_list_file)
-  CHECK_FUNCS(extattr_set_fd extattr_set_file)
-  CHECK_FUNCS(fsetxattr getxattr)
-  CHECK_FUNCS(lgetxattr listxattr llistxattr lsetxattr)
+  CHECK_FUNCTION_EXISTS_GLIBC(extattr_get_file HAVE_EXTATTR_GET_FILE)
+  CHECK_FUNCTION_EXISTS_GLIBC(extattr_list_file HAVE_EXTATTR_LIST_FILE)
+  CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_fd HAVE_EXTATTR_SET_FD)
+  CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_file HAVE_EXTATTR_SET_FILE)
+  CHECK_FUNCTION_EXISTS_GLIBC(fsetxattr HAVE_FSETXATTR)
+  CHECK_FUNCTION_EXISTS_GLIBC(getxattr HAVE_GETXATTR)
+  CHECK_FUNCTION_EXISTS_GLIBC(lgetxattr HAVE_LGETXATTR)
+  CHECK_FUNCTION_EXISTS_GLIBC(listxattr HAVE_LISTXATTR)
+  CHECK_FUNCTION_EXISTS_GLIBC(llistxattr HAVE_LLISTXATTR)
+  CHECK_FUNCTION_EXISTS_GLIBC(lsetxattr HAVE_LSETXATTR)
 ENDIF(ENABLE_XATTR)
 
 #
@@ -518,7 +563,11 @@ IF(ENABLE_ACL)
     SET(CMAKE_REQUIRED_LIBRARIES "acl")
   ENDIF(HAVE_ACL_LIB)
   #
-  CHECK_FUNCS(acl_create_entry acl_init acl_set_fd acl_set_fd_np acl_set_file)
+  CHECK_FUNCTION_EXISTS_GLIBC(acl_create_entry HAVE_ACL_CREATE_ENTRY)
+  CHECK_FUNCTION_EXISTS_GLIBC(acl_init HAVE_ACL_INIT)
+  CHECK_FUNCTION_EXISTS_GLIBC(acl_set_fd HAVE_ACL_SET_FD)
+  CHECK_FUNCTION_EXISTS_GLIBC(acl_set_fd_np HAVE_ACL_SET_FD_NP)
+  CHECK_FUNCTION_EXISTS_GLIBC(acl_set_file HAVE_ACL_SET_FILE)
   CHECK_TYPE_EXISTS(acl_permset_t "sys/types.h;sys/acl.h"    HAVE_ACL_PERMSET_T)
 
   # The "acl_get_perm()" function was omitted from the POSIX draft.
index 108774fdd42c1d67924caf309befb85b454d0921..37c87bbe07151582b51beb3f39ea16ce359e2fa9 100644 (file)
@@ -1,7 +1,15 @@
-# - Check if the system has the specified type
-# CHECK_FUNCS (FUNCTION1 FUNCTION2 ...)
+# Check if the system has the specified function; treat glibc "stub"
+# functions as nonexistent:
+# CHECK_FUNCTION_EXISTS_GLIBC (FUNCTION FUNCVAR)
 #
 #  FUNCTION - the function(s) where the prototype should be declared
+#  FUNCVAR - variable to define if the function does exist
+#
+# In particular, this understands the glibc convention of
+# defining macros __stub_XXXX or __stub___XXXX if the function
+# does appear in the library but is merely a stub that does nothing.
+# By detecting this case, we can select alternate behavior on
+# platforms that don't support this functionality.
 #
 # The following variables may be set before calling this macro to
 # modify the way the check is run:
 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
 
 INCLUDE(CheckFunctionExists)
-INCLUDE(CheckSymbolExists)
 
-MACRO (CHECK_FUNCS _FUNCS)
-   FOREACH (_func ${ARGV})
-      STRING(TOUPPER ${_func} _funcvar)
-      SET(_funcvar "HAVE_${_funcvar}")
-      SET(_include "")
-      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)
+MACRO (CHECK_FUNCTION_EXISTS_GLIBC _FUNC _FUNCVAR)
+   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)
 ENDMACRO (CHECK_FUNCS)