diff --git a/CMake/GenerateDCMTKConfigure.cmake b/CMake/GenerateDCMTKConfigure.cmake index ac3ae70aa..87b62f7af 100644 --- a/CMake/GenerateDCMTKConfigure.cmake +++ b/CMake/GenerateDCMTKConfigure.cmake @@ -241,9 +241,14 @@ include("${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake") include("${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake") include("${DCMTK_CMAKE_INCLUDE}CMake/CheckFunctionWithHeaderExists.cmake") include(CheckCXXSymbolExists OPTIONAL) -if(NOT COMMAND CHECK_CXX_SYMBOL_EXISTS) - # fallback implementation for old CMake Versions - function(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VAR) +# Defined with DCMTK_ prefix to avoid overriding the global command name. +if(COMMAND check_cxx_symbol_exists) + macro(DCMTK_CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VAR) + check_cxx_symbol_exists("${SYMBOL}" "${FILES}" "${VAR}") + endmacro() +else() + # Fallback for CMake versions that predate CheckCXXSymbolExists + function(DCMTK_CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VAR) set(CODE) foreach(FILE ${FILES}) set(CODE "${CODE}#include <${FILE}>\n") @@ -256,7 +261,7 @@ endif() foreach(FUNC "__FUNCTION__" "__PRETTY_FUNCTION__" "__func__") CHECK_SYMBOL_EXISTS("${FUNC}" "" "HAVE_${FUNC}_C_MACRO") # test if the C++ compiler also supports them (e.g. SunPro doesn't) - CHECK_CXX_SYMBOL_EXISTS("${FUNC}" "" "HAVE_${FUNC}_CXX_MACRO") + DCMTK_CHECK_CXX_SYMBOL_EXISTS("${FUNC}" "" "HAVE_${FUNC}_CXX_MACRO") if(HAVE_${FUNC}_C_MACRO AND HAVE_${FUNC}_CXX_MACRO) set("HAVE_${FUNC}_MACRO" 1 CACHE INTERNAL "Have symbol ${FUNC}" FORCE) else() @@ -505,48 +510,53 @@ endif() set(CXXHEADERS ${CXXHEADERS} cstdint) endif() + # On Windows check_function_exists fails due to symbol name mangling; use + # check_symbol_exists instead. Defined with DCMTK_ prefix to avoid + # overriding the global CHECK_FUNCTION_EXISTS command. if(WIN32) - # CHECK_FUNCTION_EXISTS does not work correctly on Windows (due to symbol name mangling) - # use CHECK_SYMBOL_EXISTS instead - macro(CHECK_FUNCTION_EXISTS FUNCTION VAR) + macro(DCMTK_CHECK_FUNCTION_EXISTS FUNCTION VAR) check_symbol_exists("${FUNCTION}" "${HEADERS}" "${VAR}") endmacro() + else() + macro(DCMTK_CHECK_FUNCTION_EXISTS FUNCTION VAR) + check_function_exists("${FUNCTION}" "${VAR}") + endmacro() endif() - CHECK_FUNCTION_EXISTS(_findfirst HAVE__FINDFIRST) - CHECK_FUNCTION_EXISTS(_set_output_format HAVE__SET_OUTPUT_FORMAT) - CHECK_FUNCTION_EXISTS(atoll HAVE_ATOLL) - CHECK_FUNCTION_EXISTS(cuserid HAVE_CUSERID) - CHECK_FUNCTION_EXISTS(fgetln HAVE_FGETLN) - CHECK_FUNCTION_EXISTS(flock HAVE_FLOCK) - CHECK_FUNCTION_EXISTS(fork HAVE_FORK) - CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO) - CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME) - CHECK_FUNCTION_EXISTS(geteuid HAVE_GETEUID) - CHECK_FUNCTION_EXISTS(getgrnam HAVE_GETGRNAM) - CHECK_FUNCTION_EXISTS(gethostbyaddr_r HAVE_GETHOSTBYADDR_R) - CHECK_FUNCTION_EXISTS(gethostbyname_r HAVE_GETHOSTBYNAME_R) - CHECK_FUNCTION_EXISTS(gethostid HAVE_GETHOSTID) - CHECK_FUNCTION_EXISTS(getlogin HAVE_GETLOGIN) - CHECK_FUNCTION_EXISTS(getlogin_r HAVE_GETLOGIN_R) - CHECK_FUNCTION_EXISTS(getpwnam HAVE_GETPWNAM) - CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) - CHECK_FUNCTION_EXISTS(getuid HAVE_GETUID) - CHECK_FUNCTION_EXISTS(gmtime_r HAVE_GMTIME_R) - CHECK_FUNCTION_EXISTS(localtime_r HAVE_LOCALTIME_R) - CHECK_FUNCTION_EXISTS(lockf HAVE_LOCKF) - CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT) - CHECK_FUNCTION_EXISTS(malloc_debug HAVE_MALLOC_DEBUG) - CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP) - CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP) - CHECK_FUNCTION_EXISTS(setuid HAVE_SETUID) - CHECK_FUNCTION_EXISTS(sleep HAVE_SLEEP) - CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT) - CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY) - CHECK_FUNCTION_EXISTS(sysinfo HAVE_SYSINFO) - CHECK_FUNCTION_EXISTS(uname HAVE_UNAME) - CHECK_FUNCTION_EXISTS(usleep HAVE_USLEEP) - CHECK_FUNCTION_EXISTS(waitpid HAVE_WAITPID) + DCMTK_CHECK_FUNCTION_EXISTS(_findfirst HAVE__FINDFIRST) + DCMTK_CHECK_FUNCTION_EXISTS(_set_output_format HAVE__SET_OUTPUT_FORMAT) + DCMTK_CHECK_FUNCTION_EXISTS(atoll HAVE_ATOLL) + DCMTK_CHECK_FUNCTION_EXISTS(cuserid HAVE_CUSERID) + DCMTK_CHECK_FUNCTION_EXISTS(fgetln HAVE_FGETLN) + DCMTK_CHECK_FUNCTION_EXISTS(flock HAVE_FLOCK) + DCMTK_CHECK_FUNCTION_EXISTS(fork HAVE_FORK) + DCMTK_CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO) + DCMTK_CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME) + DCMTK_CHECK_FUNCTION_EXISTS(geteuid HAVE_GETEUID) + DCMTK_CHECK_FUNCTION_EXISTS(getgrnam HAVE_GETGRNAM) + DCMTK_CHECK_FUNCTION_EXISTS(gethostbyaddr_r HAVE_GETHOSTBYADDR_R) + DCMTK_CHECK_FUNCTION_EXISTS(gethostbyname_r HAVE_GETHOSTBYNAME_R) + DCMTK_CHECK_FUNCTION_EXISTS(gethostid HAVE_GETHOSTID) + DCMTK_CHECK_FUNCTION_EXISTS(getlogin HAVE_GETLOGIN) + DCMTK_CHECK_FUNCTION_EXISTS(getlogin_r HAVE_GETLOGIN_R) + DCMTK_CHECK_FUNCTION_EXISTS(getpwnam HAVE_GETPWNAM) + DCMTK_CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) + DCMTK_CHECK_FUNCTION_EXISTS(getuid HAVE_GETUID) + DCMTK_CHECK_FUNCTION_EXISTS(gmtime_r HAVE_GMTIME_R) + DCMTK_CHECK_FUNCTION_EXISTS(localtime_r HAVE_LOCALTIME_R) + DCMTK_CHECK_FUNCTION_EXISTS(lockf HAVE_LOCKF) + DCMTK_CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT) + DCMTK_CHECK_FUNCTION_EXISTS(malloc_debug HAVE_MALLOC_DEBUG) + DCMTK_CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP) + DCMTK_CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP) + DCMTK_CHECK_FUNCTION_EXISTS(setuid HAVE_SETUID) + DCMTK_CHECK_FUNCTION_EXISTS(sleep HAVE_SLEEP) + DCMTK_CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT) + DCMTK_CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY) + DCMTK_CHECK_FUNCTION_EXISTS(sysinfo HAVE_SYSINFO) + DCMTK_CHECK_FUNCTION_EXISTS(uname HAVE_UNAME) + DCMTK_CHECK_FUNCTION_EXISTS(usleep HAVE_USLEEP) + DCMTK_CHECK_FUNCTION_EXISTS(waitpid HAVE_WAITPID) CHECK_SYMBOL_EXISTS(strcasestr "string.h" HAVE_PROTOTYPE_STRCASESTR)