From 3b5a4a064871fdf9a0fcabafc27c491fc1f56a2f Mon Sep 17 00:00:00 2001 From: Dana Robinson Date: Mon, 31 Aug 2015 23:24:03 -0500 Subject: [PATCH] [svn-r27636] Added cmake_ext_mod files from trunk. Merging them properly was annoying with the direct clobber of the externals directory with real files. --- config/cmake_ext_mod/CTestCustom.cmake | 16 + config/cmake_ext_mod/CheckTypeSize.cmake | 50 + config/cmake_ext_mod/ConfigureChecks.cmake | 756 ++++++++++++++ config/cmake_ext_mod/FindMPI.cmake | 684 ++++++++++++ config/cmake_ext_mod/FindSZIP.cmake | 172 ++++ config/cmake_ext_mod/GetTimeOfDayTest.cpp | 15 + config/cmake_ext_mod/HDFCXXTests.cpp | 56 + config/cmake_ext_mod/HDFLibMacros.cmake | 270 +++++ config/cmake_ext_mod/HDFMacros.cmake | 277 +++++ config/cmake_ext_mod/HDFTests.c | 466 +++++++++ config/cmake_ext_mod/HDFUseFortran.cmake | 180 ++++ .../cmake_ext_mod/NSIS.InstallOptions.ini.in | 37 + config/cmake_ext_mod/NSIS.template.in | 974 ++++++++++++++++++ config/cmake_ext_mod/grepTest.cmake | 64 ++ config/cmake_ext_mod/hdf.bmp | Bin 0 -> 1254 bytes config/cmake_ext_mod/hdf.icns | Bin 0 -> 326012 bytes config/cmake_ext_mod/hdf.ico | Bin 0 -> 23558 bytes config/cmake_ext_mod/prunTest.cmake | 145 +++ config/cmake_ext_mod/runTest.cmake | 207 ++++ config/cmake_ext_mod/version.plist.in | 17 + 20 files changed, 4386 insertions(+) create mode 100644 config/cmake_ext_mod/CTestCustom.cmake create mode 100644 config/cmake_ext_mod/CheckTypeSize.cmake create mode 100644 config/cmake_ext_mod/ConfigureChecks.cmake create mode 100644 config/cmake_ext_mod/FindMPI.cmake create mode 100644 config/cmake_ext_mod/FindSZIP.cmake create mode 100644 config/cmake_ext_mod/GetTimeOfDayTest.cpp create mode 100644 config/cmake_ext_mod/HDFCXXTests.cpp create mode 100644 config/cmake_ext_mod/HDFLibMacros.cmake create mode 100644 config/cmake_ext_mod/HDFMacros.cmake create mode 100644 config/cmake_ext_mod/HDFTests.c create mode 100644 config/cmake_ext_mod/HDFUseFortran.cmake create mode 100644 config/cmake_ext_mod/NSIS.InstallOptions.ini.in create mode 100644 config/cmake_ext_mod/NSIS.template.in create mode 100644 config/cmake_ext_mod/grepTest.cmake create mode 100644 config/cmake_ext_mod/hdf.bmp create mode 100644 config/cmake_ext_mod/hdf.icns create mode 100644 config/cmake_ext_mod/hdf.ico create mode 100644 config/cmake_ext_mod/prunTest.cmake create mode 100644 config/cmake_ext_mod/runTest.cmake create mode 100644 config/cmake_ext_mod/version.plist.in diff --git a/config/cmake_ext_mod/CTestCustom.cmake b/config/cmake_ext_mod/CTestCustom.cmake new file mode 100644 index 0000000000..025bce4b3d --- /dev/null +++ b/config/cmake_ext_mod/CTestCustom.cmake @@ -0,0 +1,16 @@ +set (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 3000) + +set (CTEST_CUSTOM_WARNING_EXCEPTION + ${CTEST_CUSTOM_WARNING_EXCEPTION} + "note.*expected.*void.*but argument is of type.*volatile" + "SZIP.src.*:[ \t]*warning" + "jpeg.src.*:[ \t]*warning" + "POSIX name for this item is deprecated" + "disabling jobserver mode" + "warning.*implicit declaration of function" + "note: expanded from macro" +) + +set (CTEST_CUSTOM_MEMCHECK_IGNORE + ${CTEST_CUSTOM_MEMCHECK_IGNORE} +) diff --git a/config/cmake_ext_mod/CheckTypeSize.cmake b/config/cmake_ext_mod/CheckTypeSize.cmake new file mode 100644 index 0000000000..5095a27b1c --- /dev/null +++ b/config/cmake_ext_mod/CheckTypeSize.cmake @@ -0,0 +1,50 @@ +# +# Check if the type exists and determine size of type. if the type +# exists, the size will be stored to the variable. +# +# CHECK_TYPE_SIZE - macro which checks the size of type +# VARIABLE - variable to store size if the type exists. +# HAVE_${VARIABLE} - does the variable exists or not +# + +MACRO (HDF_CHECK_TYPE_SIZE TYPE VARIABLE) + set (CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS 1) + if ("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$") + set (MACRO_CHECK_TYPE_SIZE_FLAGS + "-DCHECK_TYPE_SIZE_TYPE=\"${TYPE}\" ${CMAKE_REQUIRED_FLAGS}" + ) + foreach (def HAVE_SYS_TYPES_H HAVE_STDINT_H HAVE_STDDEF_H HAVE_INTTYPES_H) + if ("${def}") + set (MACRO_CHECK_TYPE_SIZE_FLAGS "${MACRO_CHECK_TYPE_SIZE_FLAGS} -D${def}") + endif ("${def}") + endforeach (def) + + message (STATUS "Check size of ${TYPE}") + if (CMAKE_REQUIRED_LIBRARIES) + set (CHECK_TYPE_SIZE_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}" + ) + endif (CMAKE_REQUIRED_LIBRARIES) + try_run (${VARIABLE} HAVE_${VARIABLE} + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/CheckTypeSize.c + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_TYPE_SIZE_FLAGS} + "${CHECK_TYPE_SIZE_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT + ) + if (HAVE_${VARIABLE}) + message (STATUS "Check size of ${TYPE} - done") + file (APPEND + ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log + "Determining size of ${TYPE} passed with the following output:\n${OUTPUT}\n\n" + ) + else (HAVE_${VARIABLE}) + message (STATUS "Check size of ${TYPE} - failed") + file (APPEND + ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log + "Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\n\n" + ) + endif (HAVE_${VARIABLE}) + endif ("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$") + set (CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS) +ENDMACRO (HDF_CHECK_TYPE_SIZE) diff --git a/config/cmake_ext_mod/ConfigureChecks.cmake b/config/cmake_ext_mod/ConfigureChecks.cmake new file mode 100644 index 0000000000..e058b10905 --- /dev/null +++ b/config/cmake_ext_mod/ConfigureChecks.cmake @@ -0,0 +1,756 @@ +#----------------------------------------------------------------------------- +# Include all the necessary files for macros +#----------------------------------------------------------------------------- +include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake) +include (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) +include (${CMAKE_ROOT}/Modules/CheckIncludeFileCXX.cmake) +include (${CMAKE_ROOT}/Modules/CheckIncludeFiles.cmake) +include (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake) +include (${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake) +include (${CMAKE_ROOT}/Modules/CheckTypeSize.cmake) +include (${CMAKE_ROOT}/Modules/CheckVariableExists.cmake) +include (${CMAKE_ROOT}/Modules/CheckFortranFunctionExists.cmake) +include (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) +if(CMAKE_CXX_COMPILER) + include (${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake) +endif(CMAKE_CXX_COMPILER) + +#----------------------------------------------------------------------------- +# APPLE/Darwin setup +#----------------------------------------------------------------------------- +if (APPLE) + list (LENGTH CMAKE_OSX_ARCHITECTURES ARCH_LENGTH) + if (ARCH_LENGTH GREATER 1) + set (CMAKE_OSX_ARCHITECTURES "" CACHE STRING "" FORCE) + message(FATAL_ERROR "Building Universal Binaries on OS X is NOT supported by the HDF5 project. This is" + "due to technical reasons. The best approach would be build each architecture in separate directories" + "and use the 'lipo' tool to combine them into a single executable or library. The 'CMAKE_OSX_ARCHITECTURES'" + "variable has been set to a blank value which will build the default architecture for this system.") + endif () + set (${HDF_PREFIX}_AC_APPLE_UNIVERSAL_BUILD 0) +endif (APPLE) + +# Check for Darwin (not just Apple - we also want to catch OpenDarwin) +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set (${HDF_PREFIX}_HAVE_DARWIN 1) +endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + +# Check for Solaris +if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + set (${HDF_PREFIX}_HAVE_SOLARIS 1) +endif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + +#----------------------------------------------------------------------------- +# This MACRO checks IF the symbol exists in the library and IF it +# does, it appends library to the list. +#----------------------------------------------------------------------------- +set (LINK_LIBS "") +MACRO (CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE) + CHECK_LIBRARY_EXISTS ("${LIBRARY};${LINK_LIBS}" ${SYMBOL} "" ${VARIABLE}) + if (${VARIABLE}) + set (LINK_LIBS ${LINK_LIBS} ${LIBRARY}) + endif (${VARIABLE}) +ENDMACRO (CHECK_LIBRARY_EXISTS_CONCAT) + +# ---------------------------------------------------------------------- +# WINDOWS Hard code Values +# ---------------------------------------------------------------------- + +set (WINDOWS) +if (WIN32) + if (MINGW) + set (${HDF_PREFIX}_HAVE_MINGW 1) + set (WINDOWS 1) # MinGW tries to imitate Windows + set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1") + endif (MINGW) + set (${HDF_PREFIX}_HAVE_WIN32_API 1) + set (CMAKE_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib") + if (NOT UNIX AND NOT MINGW) + set (WINDOWS 1) + set (CMAKE_REQUIRED_FLAGS "/DWIN32_LEAN_AND_MEAN=1 /DNOGDI=1") + if (MSVC) + set (${HDF_PREFIX}_HAVE_VISUAL_STUDIO 1) + endif (MSVC) + endif (NOT UNIX AND NOT MINGW) +endif (WIN32) + +if (WINDOWS) + set (${HDF_PREFIX}_HAVE_STDDEF_H 1) + set (${HDF_PREFIX}_HAVE_SYS_STAT_H 1) + set (${HDF_PREFIX}_HAVE_SYS_TYPES_H 1) + set (${HDF_PREFIX}_HAVE_LIBM 1) + set (${HDF_PREFIX}_HAVE_STRDUP 1) + set (${HDF_PREFIX}_HAVE_SYSTEM 1) + set (${HDF_PREFIX}_HAVE_LONGJMP 1) + if (NOT MINGW) + set (${HDF_PREFIX}_HAVE_GETHOSTNAME 1) + endif (NOT MINGW) + if (NOT UNIX AND NOT CYGWIN AND NOT MINGW) + set (${HDF_PREFIX}_HAVE_GETCONSOLESCREENBUFFERINFO 1) + endif (NOT UNIX AND NOT CYGWIN AND NOT MINGW) + set (${HDF_PREFIX}_HAVE_FUNCTION 1) + set (${HDF_PREFIX}_GETTIMEOFDAY_GIVES_TZ 1) + set (${HDF_PREFIX}_HAVE_TIMEZONE 1) + set (${HDF_PREFIX}_HAVE_GETTIMEOFDAY 1) + if (MINGW) + set (${HDF_PREFIX}_HAVE_WINSOCK2_H 1) + endif (MINGW) + set (${HDF_PREFIX}_HAVE_LIBWS2_32 1) + set (${HDF_PREFIX}_HAVE_LIBWSOCK32 1) +endif (WINDOWS) + +# ---------------------------------------------------------------------- +# END of WINDOWS Hard code Values +# ---------------------------------------------------------------------- + +if (CYGWIN) + set (${HDF_PREFIX}_HAVE_LSEEK64 0) +endif (CYGWIN) + +#----------------------------------------------------------------------------- +# Check for the math library "m" +#----------------------------------------------------------------------------- +if (NOT WINDOWS) + CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM) + CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen ${HDF_PREFIX}_HAVE_LIBDL) + CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32) + CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32) +endif (NOT WINDOWS) + +CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname ${HDF_PREFIX}_HAVE_LIBUCB) +CHECK_LIBRARY_EXISTS_CONCAT ("socket" connect ${HDF_PREFIX}_HAVE_LIBSOCKET) +CHECK_LIBRARY_EXISTS ("c" gethostbyname "" NOT_NEED_LIBNSL) + +if (NOT NOT_NEED_LIBNSL) + CHECK_LIBRARY_EXISTS_CONCAT ("nsl" gethostbyname ${HDF_PREFIX}_HAVE_LIBNSL) +endif (NOT NOT_NEED_LIBNSL) + +# For other tests to use the same libraries +set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LINK_LIBS}) + +set (USE_INCLUDES "") +if (WINDOWS) + set (USE_INCLUDES ${USE_INCLUDES} "windows.h") +endif (WINDOWS) + +if (NOT WINDOWS) + TEST_BIG_ENDIAN (${HDF_PREFIX}_WORDS_BIGENDIAN) +endif (NOT WINDOWS) + +# For other specific tests, use this MACRO. +MACRO (HDF_FUNCTION_TEST OTHER_TEST) + if ("${HDF_PREFIX}_${OTHER_TEST}" MATCHES "^${HDF_PREFIX}_${OTHER_TEST}$") + set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}") + set (OTHER_TEST_ADD_LIBRARIES) + if (CMAKE_REQUIRED_LIBRARIES) + set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + endif (CMAKE_REQUIRED_LIBRARIES) + + foreach (def ${HDF_EXTRA_TEST_DEFINITIONS}) + set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}=${${def}}") + endforeach (def) + + foreach (def + HAVE_SYS_TIME_H + HAVE_UNISTD_H + HAVE_SYS_TYPES_H + HAVE_SYS_SOCKET_H + ) + if ("${${HDF_PREFIX}_${def}}") + set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}") + endif ("${${HDF_PREFIX}_${def}}") + endforeach (def) + + if (LARGEFILE) + set (MACRO_CHECK_FUNCTION_DEFINITIONS + "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE" + ) + endif (LARGEFILE) + + #message (STATUS "Performing ${OTHER_TEST}") + TRY_COMPILE (${OTHER_TEST} + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/HDFTests.c + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + "${OTHER_TEST_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT + ) + if (${OTHER_TEST}) + set (${HDF_PREFIX}_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}") + message (STATUS "Performing Other Test ${OTHER_TEST} - Success") + else (${OTHER_TEST}) + message (STATUS "Performing Other Test ${OTHER_TEST} - Failed") + set (${HDF_PREFIX}_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing Other Test ${OTHER_TEST} failed with the following output:\n" + "${OUTPUT}\n" + ) + endif (${OTHER_TEST}) + endif ("${HDF_PREFIX}_${OTHER_TEST}" MATCHES "^${HDF_PREFIX}_${OTHER_TEST}$") +ENDMACRO (HDF_FUNCTION_TEST) + +#----------------------------------------------------------------------------- +# Check for these functions before the time headers are checked +#----------------------------------------------------------------------------- +HDF_FUNCTION_TEST (STDC_HEADERS) + +#----------------------------------------------------------------------------- +# Check IF header file exists and add it to the list. +#----------------------------------------------------------------------------- +MACRO (CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE) + CHECK_INCLUDE_FILES ("${USE_INCLUDES};${FILE}" ${VARIABLE}) + if (${VARIABLE}) + set (USE_INCLUDES ${USE_INCLUDES} ${FILE}) + endif (${VARIABLE}) +ENDMACRO (CHECK_INCLUDE_FILE_CONCAT) + +#----------------------------------------------------------------------------- +# Check for the existence of certain header files +#----------------------------------------------------------------------------- +CHECK_INCLUDE_FILE_CONCAT ("sys/resource.h" ${HDF_PREFIX}_HAVE_SYS_RESOURCE_H) +CHECK_INCLUDE_FILE_CONCAT ("sys/time.h" ${HDF_PREFIX}_HAVE_SYS_TIME_H) +CHECK_INCLUDE_FILE_CONCAT ("unistd.h" ${HDF_PREFIX}_HAVE_UNISTD_H) +CHECK_INCLUDE_FILE_CONCAT ("sys/ioctl.h" ${HDF_PREFIX}_HAVE_SYS_IOCTL_H) +CHECK_INCLUDE_FILE_CONCAT ("sys/stat.h" ${HDF_PREFIX}_HAVE_SYS_STAT_H) +CHECK_INCLUDE_FILE_CONCAT ("sys/socket.h" ${HDF_PREFIX}_HAVE_SYS_SOCKET_H) +CHECK_INCLUDE_FILE_CONCAT ("sys/types.h" ${HDF_PREFIX}_HAVE_SYS_TYPES_H) +CHECK_INCLUDE_FILE_CONCAT ("stddef.h" ${HDF_PREFIX}_HAVE_STDDEF_H) +CHECK_INCLUDE_FILE_CONCAT ("setjmp.h" ${HDF_PREFIX}_HAVE_SETJMP_H) +CHECK_INCLUDE_FILE_CONCAT ("features.h" ${HDF_PREFIX}_HAVE_FEATURES_H) +CHECK_INCLUDE_FILE_CONCAT ("dirent.h" ${HDF_PREFIX}_HAVE_DIRENT_H) +CHECK_INCLUDE_FILE_CONCAT ("stdint.h" ${HDF_PREFIX}_HAVE_STDINT_H) + +# IF the c compiler found stdint, check the C++ as well. On some systems this +# file will be found by C but not C++, only do this test IF the C++ compiler +# has been initialized (e.g. the project also includes some c++) +if (${HDF_PREFIX}_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED) + CHECK_INCLUDE_FILE_CXX ("stdint.h" ${HDF_PREFIX}_HAVE_STDINT_H_CXX) + if (NOT ${HDF_PREFIX}_HAVE_STDINT_H_CXX) + set (${HDF_PREFIX}_HAVE_STDINT_H "" CACHE INTERNAL "Have includes HAVE_STDINT_H") + set (USE_INCLUDES ${USE_INCLUDES} "stdint.h") + endif (NOT ${HDF_PREFIX}_HAVE_STDINT_H_CXX) +endif (${HDF_PREFIX}_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED) + +# Darwin +CHECK_INCLUDE_FILE_CONCAT ("mach/mach_time.h" ${HDF_PREFIX}_HAVE_MACH_MACH_TIME_H) + +# Windows +CHECK_INCLUDE_FILE_CONCAT ("io.h" ${HDF_PREFIX}_HAVE_IO_H) +if (NOT CYGWIN) + CHECK_INCLUDE_FILE_CONCAT ("winsock2.h" ${HDF_PREFIX}_HAVE_WINSOCK2_H) +endif (NOT CYGWIN) +CHECK_INCLUDE_FILE_CONCAT ("sys/timeb.h" ${HDF_PREFIX}_HAVE_SYS_TIMEB_H) + +if (CMAKE_SYSTEM_NAME MATCHES "OSF") + CHECK_INCLUDE_FILE_CONCAT ("sys/sysinfo.h" ${HDF_PREFIX}_HAVE_SYS_SYSINFO_H) + CHECK_INCLUDE_FILE_CONCAT ("sys/proc.h" ${HDF_PREFIX}_HAVE_SYS_PROC_H) +else (CMAKE_SYSTEM_NAME MATCHES "OSF") + set (${HDF_PREFIX}_HAVE_SYS_SYSINFO_H "" CACHE INTERNAL "" FORCE) + set (${HDF_PREFIX}_HAVE_SYS_PROC_H "" CACHE INTERNAL "" FORCE) +endif (CMAKE_SYSTEM_NAME MATCHES "OSF") + +CHECK_INCLUDE_FILE_CONCAT ("globus/common.h" ${HDF_PREFIX}_HAVE_GLOBUS_COMMON_H) +CHECK_INCLUDE_FILE_CONCAT ("pdb.h" ${HDF_PREFIX}_HAVE_PDB_H) +CHECK_INCLUDE_FILE_CONCAT ("pthread.h" ${HDF_PREFIX}_HAVE_PTHREAD_H) +CHECK_INCLUDE_FILE_CONCAT ("srbclient.h" ${HDF_PREFIX}_HAVE_SRBCLIENT_H) +CHECK_INCLUDE_FILE_CONCAT ("string.h" ${HDF_PREFIX}_HAVE_STRING_H) +CHECK_INCLUDE_FILE_CONCAT ("strings.h" ${HDF_PREFIX}_HAVE_STRINGS_H) +CHECK_INCLUDE_FILE_CONCAT ("stdlib.h" ${HDF_PREFIX}_HAVE_STDLIB_H) +CHECK_INCLUDE_FILE_CONCAT ("memory.h" ${HDF_PREFIX}_HAVE_MEMORY_H) +CHECK_INCLUDE_FILE_CONCAT ("dlfcn.h" ${HDF_PREFIX}_HAVE_DLFCN_H) +CHECK_INCLUDE_FILE_CONCAT ("inttypes.h" ${HDF_PREFIX}_HAVE_INTTYPES_H) +CHECK_INCLUDE_FILE_CONCAT ("netinet/in.h" ${HDF_PREFIX}_HAVE_NETINET_IN_H) + +#----------------------------------------------------------------------------- +# Check for large file support +#----------------------------------------------------------------------------- + +# The linux-lfs option is deprecated. +set (LINUX_LFS 0) + +set (HDF_EXTRA_C_FLAGS) +set (HDF_EXTRA_FLAGS) +if (NOT WINDOWS) + if (NOT ${HDF_PREFIX}_HAVE_SOLARIS) + # Linux Specific flags + # This was originally defined as _POSIX_SOURCE which was updated to + # _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX + # functionality so clock_gettime and CLOCK_MONOTONIC are defined + # correctly. + # POSIX feature information can be found in the gcc manual at: + # http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html + set (HDF_EXTRA_C_FLAGS -D_POSIX_C_SOURCE=199506L) + # _BSD_SOURCE deprecated in GLIBC >= 2.20 + TRY_RUN (HAVE_DEFAULT_SOURCE_RUN HAVE_DEFAULT_SOURCE_COMPILE + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/HDFTests.c + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-DHAVE_DEFAULT_SOURCE + OUTPUT_VARIABLE OUTPUT + ) + if (HAVE_DEFAULT_SOURCE_COMPILE AND HAVE_DEFAULT_SOURCE_RUN) + set (HDF_EXTRA_FLAGS -D_DEFAULT_SOURCE) + else (HAVE_DEFAULT_SOURCE_COMPILE AND HAVE_DEFAULT_SOURCE_RUN) + set (HDF_EXTRA_FLAGS -D_BSD_SOURCE) + endif (HAVE_DEFAULT_SOURCE_COMPILE AND HAVE_DEFAULT_SOURCE_RUN) + + option (HDF_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON) + if (HDF_ENABLE_LARGE_FILE) + set (msg "Performing TEST_LFS_WORKS") + TRY_RUN (TEST_LFS_WORKS_RUN TEST_LFS_WORKS_COMPILE + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/HDFTests.c + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-DTEST_LFS_WORKS + OUTPUT_VARIABLE OUTPUT + ) + if (TEST_LFS_WORKS_COMPILE) + if (TEST_LFS_WORKS_RUN MATCHES 0) + set (TEST_LFS_WORKS 1 CACHE INTERNAL ${msg}) + set (LARGEFILE 1) + set (HDF_EXTRA_FLAGS ${HDF_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE) + message (STATUS "${msg}... yes") + else (TEST_LFS_WORKS_RUN MATCHES 0) + set (TEST_LFS_WORKS "" CACHE INTERNAL ${msg}) + message (STATUS "${msg}... no") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Test TEST_LFS_WORKS Run failed with the following output and exit code:\n ${OUTPUT}\n" + ) + endif (TEST_LFS_WORKS_RUN MATCHES 0) + else (TEST_LFS_WORKS_COMPILE ) + set (TEST_LFS_WORKS "" CACHE INTERNAL ${msg}) + message (STATUS "${msg}... no") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Test TEST_LFS_WORKS Compile failed with the following output:\n ${OUTPUT}\n" + ) + endif (TEST_LFS_WORKS_COMPILE) + endif (HDF_ENABLE_LARGE_FILE) + set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${HDF_EXTRA_FLAGS}) + endif (NOT ${HDF_PREFIX}_HAVE_SOLARIS) +endif (NOT WINDOWS) + +add_definitions (${HDF_EXTRA_FLAGS}) + +#----------------------------------------------------------------------------- +# Check for HAVE_OFF64_T functionality +#----------------------------------------------------------------------------- +if (NOT WINDOWS OR MINGW) + HDF_FUNCTION_TEST (HAVE_OFF64_T) + if (${HDF_PREFIX}_HAVE_OFF64_T) + CHECK_FUNCTION_EXISTS (lseek64 ${HDF_PREFIX}_HAVE_LSEEK64) + CHECK_FUNCTION_EXISTS (fseeko64 ${HDF_PREFIX}_HAVE_FSEEKO64) + CHECK_FUNCTION_EXISTS (ftello64 ${HDF_PREFIX}_HAVE_FTELLO64) + CHECK_FUNCTION_EXISTS (ftruncate64 ${HDF_PREFIX}_HAVE_FTRUNCATE64) + endif (${HDF_PREFIX}_HAVE_OFF64_T) + + CHECK_FUNCTION_EXISTS (fseeko ${HDF_PREFIX}_HAVE_FSEEKO) + CHECK_FUNCTION_EXISTS (ftello ${HDF_PREFIX}_HAVE_FTELLO) + + HDF_FUNCTION_TEST (HAVE_STAT64_STRUCT) + if (HAVE_STAT64_STRUCT) + CHECK_FUNCTION_EXISTS (fstat64 ${HDF_PREFIX}_HAVE_FSTAT64) + CHECK_FUNCTION_EXISTS (stat64 ${HDF_PREFIX}_HAVE_STAT64) + endif (HAVE_STAT64_STRUCT) +endif (NOT WINDOWS OR MINGW) + +#----------------------------------------------------------------------------- +# Check the size in bytes of all the int and float types +#----------------------------------------------------------------------------- +MACRO (HDF_CHECK_TYPE_SIZE type var) + set (aType ${type}) + set (aVar ${var}) +# message (STATUS "Checking size of ${aType} and storing into ${aVar}") + CHECK_TYPE_SIZE (${aType} ${aVar}) + if (NOT ${aVar}) + set (${aVar} 0 CACHE INTERNAL "SizeOf for ${aType}") +# message (STATUS "Size of ${aType} was NOT Found") + endif (NOT ${aVar}) +ENDMACRO (HDF_CHECK_TYPE_SIZE) + +HDF_CHECK_TYPE_SIZE (char ${HDF_PREFIX}_SIZEOF_CHAR) +HDF_CHECK_TYPE_SIZE (short ${HDF_PREFIX}_SIZEOF_SHORT) +HDF_CHECK_TYPE_SIZE (int ${HDF_PREFIX}_SIZEOF_INT) +HDF_CHECK_TYPE_SIZE (unsigned ${HDF_PREFIX}_SIZEOF_UNSIGNED) +if (NOT APPLE) + HDF_CHECK_TYPE_SIZE (long ${HDF_PREFIX}_SIZEOF_LONG) +endif (NOT APPLE) +HDF_CHECK_TYPE_SIZE ("long long" ${HDF_PREFIX}_SIZEOF_LONG_LONG) +HDF_CHECK_TYPE_SIZE (__int64 ${HDF_PREFIX}_SIZEOF___INT64) +if (NOT ${HDF_PREFIX}_SIZEOF___INT64) + set (${HDF_PREFIX}_SIZEOF___INT64 0) +endif (NOT ${HDF_PREFIX}_SIZEOF___INT64) + +HDF_CHECK_TYPE_SIZE (float ${HDF_PREFIX}_SIZEOF_FLOAT) +HDF_CHECK_TYPE_SIZE (double ${HDF_PREFIX}_SIZEOF_DOUBLE) +HDF_CHECK_TYPE_SIZE ("long double" ${HDF_PREFIX}_SIZEOF_LONG_DOUBLE) + +HDF_CHECK_TYPE_SIZE (int8_t ${HDF_PREFIX}_SIZEOF_INT8_T) +HDF_CHECK_TYPE_SIZE (uint8_t ${HDF_PREFIX}_SIZEOF_UINT8_T) +HDF_CHECK_TYPE_SIZE (int_least8_t ${HDF_PREFIX}_SIZEOF_INT_LEAST8_T) +HDF_CHECK_TYPE_SIZE (uint_least8_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST8_T) +HDF_CHECK_TYPE_SIZE (int_fast8_t ${HDF_PREFIX}_SIZEOF_INT_FAST8_T) +HDF_CHECK_TYPE_SIZE (uint_fast8_t ${HDF_PREFIX}_SIZEOF_UINT_FAST8_T) + +HDF_CHECK_TYPE_SIZE (int16_t ${HDF_PREFIX}_SIZEOF_INT16_T) +HDF_CHECK_TYPE_SIZE (uint16_t ${HDF_PREFIX}_SIZEOF_UINT16_T) +HDF_CHECK_TYPE_SIZE (int_least16_t ${HDF_PREFIX}_SIZEOF_INT_LEAST16_T) +HDF_CHECK_TYPE_SIZE (uint_least16_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST16_T) +HDF_CHECK_TYPE_SIZE (int_fast16_t ${HDF_PREFIX}_SIZEOF_INT_FAST16_T) +HDF_CHECK_TYPE_SIZE (uint_fast16_t ${HDF_PREFIX}_SIZEOF_UINT_FAST16_T) + +HDF_CHECK_TYPE_SIZE (int32_t ${HDF_PREFIX}_SIZEOF_INT32_T) +HDF_CHECK_TYPE_SIZE (uint32_t ${HDF_PREFIX}_SIZEOF_UINT32_T) +HDF_CHECK_TYPE_SIZE (int_least32_t ${HDF_PREFIX}_SIZEOF_INT_LEAST32_T) +HDF_CHECK_TYPE_SIZE (uint_least32_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST32_T) +HDF_CHECK_TYPE_SIZE (int_fast32_t ${HDF_PREFIX}_SIZEOF_INT_FAST32_T) +HDF_CHECK_TYPE_SIZE (uint_fast32_t ${HDF_PREFIX}_SIZEOF_UINT_FAST32_T) + +HDF_CHECK_TYPE_SIZE (int64_t ${HDF_PREFIX}_SIZEOF_INT64_T) +HDF_CHECK_TYPE_SIZE (uint64_t ${HDF_PREFIX}_SIZEOF_UINT64_T) +HDF_CHECK_TYPE_SIZE (int_least64_t ${HDF_PREFIX}_SIZEOF_INT_LEAST64_T) +HDF_CHECK_TYPE_SIZE (uint_least64_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST64_T) +HDF_CHECK_TYPE_SIZE (int_fast64_t ${HDF_PREFIX}_SIZEOF_INT_FAST64_T) +HDF_CHECK_TYPE_SIZE (uint_fast64_t ${HDF_PREFIX}_SIZEOF_UINT_FAST64_T) + +if (NOT APPLE) + HDF_CHECK_TYPE_SIZE (size_t ${HDF_PREFIX}_SIZEOF_SIZE_T) + HDF_CHECK_TYPE_SIZE (ssize_t ${HDF_PREFIX}_SIZEOF_SSIZE_T) + if (NOT ${HDF_PREFIX}_SIZEOF_SSIZE_T) + set (${HDF_PREFIX}_SIZEOF_SSIZE_T 0) + endif (NOT ${HDF_PREFIX}_SIZEOF_SSIZE_T) + if (NOT WINDOWS) + HDF_CHECK_TYPE_SIZE (ptrdiff_t ${HDF_PREFIX}_SIZEOF_PTRDIFF_T) + endif (NOT WINDOWS) +endif (NOT APPLE) + +HDF_CHECK_TYPE_SIZE (off_t ${HDF_PREFIX}_SIZEOF_OFF_T) +HDF_CHECK_TYPE_SIZE (off64_t ${HDF_PREFIX}_SIZEOF_OFF64_T) +if (NOT ${HDF_PREFIX}_SIZEOF_OFF64_T) + set (${HDF_PREFIX}_SIZEOF_OFF64_T 0) +endif (NOT ${HDF_PREFIX}_SIZEOF_OFF64_T) + +if (NOT WINDOWS) + #----------------------------------------------------------------------------- + # Check if the dev_t type is a scalar type + #----------------------------------------------------------------------------- + HDF_FUNCTION_TEST (DEV_T_IS_SCALAR) + + # ---------------------------------------------------------------------- + # Check for MONOTONIC_TIMER support (used in clock_gettime). This has + # to be done after any POSIX/BSD defines to ensure that the test gets + # the correct POSIX level on linux. + CHECK_VARIABLE_EXISTS (CLOCK_MONOTONIC HAVE_CLOCK_MONOTONIC) + + #----------------------------------------------------------------------------- + # Check a bunch of time functions + #----------------------------------------------------------------------------- + foreach (test + HAVE_TM_GMTOFF + HAVE___TM_GMTOFF +# HAVE_TIMEZONE + HAVE_STRUCT_TIMEZONE + GETTIMEOFDAY_GIVES_TZ + TIME_WITH_SYS_TIME + HAVE_TM_ZONE + HAVE_STRUCT_TM_TM_ZONE + ) + HDF_FUNCTION_TEST (${test}) + endforeach (test) + if (NOT CYGWIN AND NOT MINGW) + HDF_FUNCTION_TEST (HAVE_TIMEZONE) +# HDF_FUNCTION_TEST (HAVE_STAT_ST_BLOCKS) + endif (NOT CYGWIN AND NOT MINGW) + + # ---------------------------------------------------------------------- + # Does the struct stat have the st_blocks field? This field is not Posix. + # + HDF_FUNCTION_TEST (HAVE_STAT_ST_BLOCKS) + + # ---------------------------------------------------------------------- + # How do we figure out the width of a tty in characters? + # + CHECK_FUNCTION_EXISTS (ioctl ${HDF_PREFIX}_HAVE_IOCTL) + HDF_FUNCTION_TEST (HAVE_STRUCT_VIDEOCONFIG) + HDF_FUNCTION_TEST (HAVE_STRUCT_TEXT_INFO) + CHECK_FUNCTION_EXISTS (_getvideoconfig ${HDF_PREFIX}_HAVE__GETVIDEOCONFIG) + CHECK_FUNCTION_EXISTS (gettextinfo ${HDF_PREFIX}_HAVE_GETTEXTINFO) + CHECK_FUNCTION_EXISTS (_scrsize ${HDF_PREFIX}_HAVE__SCRSIZE) + if (NOT CYGWIN AND NOT MINGW) + CHECK_FUNCTION_EXISTS (GetConsoleScreenBufferInfo ${HDF_PREFIX}_HAVE_GETCONSOLESCREENBUFFERINFO) + endif (NOT CYGWIN AND NOT MINGW) + CHECK_SYMBOL_EXISTS (TIOCGWINSZ "sys/ioctl.h" ${HDF_PREFIX}_HAVE_TIOCGWINSZ) + CHECK_SYMBOL_EXISTS (TIOCGETD "sys/ioctl.h" ${HDF_PREFIX}_HAVE_TIOCGETD) +endif (NOT WINDOWS) + +#----------------------------------------------------------------------------- +# Check for some functions that are used +# +CHECK_FUNCTION_EXISTS (alarm ${HDF_PREFIX}_HAVE_ALARM) +CHECK_FUNCTION_EXISTS (fork ${HDF_PREFIX}_HAVE_FORK) +CHECK_FUNCTION_EXISTS (frexpf ${HDF_PREFIX}_HAVE_FREXPF) +CHECK_FUNCTION_EXISTS (frexpl ${HDF_PREFIX}_HAVE_FREXPL) + +CHECK_FUNCTION_EXISTS (gethostname ${HDF_PREFIX}_HAVE_GETHOSTNAME) +CHECK_FUNCTION_EXISTS (getpwuid ${HDF_PREFIX}_HAVE_GETPWUID) +CHECK_FUNCTION_EXISTS (getrusage ${HDF_PREFIX}_HAVE_GETRUSAGE) +CHECK_FUNCTION_EXISTS (lstat ${HDF_PREFIX}_HAVE_LSTAT) + +CHECK_FUNCTION_EXISTS (rand_r ${HDF_PREFIX}_HAVE_RAND_R) +CHECK_FUNCTION_EXISTS (random ${HDF_PREFIX}_HAVE_RANDOM) +CHECK_FUNCTION_EXISTS (setsysinfo ${HDF_PREFIX}_HAVE_SETSYSINFO) + +CHECK_FUNCTION_EXISTS (signal ${HDF_PREFIX}_HAVE_SIGNAL) +CHECK_FUNCTION_EXISTS (longjmp ${HDF_PREFIX}_HAVE_LONGJMP) +CHECK_FUNCTION_EXISTS (setjmp ${HDF_PREFIX}_HAVE_SETJMP) +CHECK_FUNCTION_EXISTS (siglongjmp ${HDF_PREFIX}_HAVE_SIGLONGJMP) +CHECK_FUNCTION_EXISTS (sigsetjmp ${HDF_PREFIX}_HAVE_SIGSETJMP) +CHECK_FUNCTION_EXISTS (sigprocmask ${HDF_PREFIX}_HAVE_SIGPROCMASK) + +CHECK_FUNCTION_EXISTS (snprintf ${HDF_PREFIX}_HAVE_SNPRINTF) +CHECK_FUNCTION_EXISTS (srandom ${HDF_PREFIX}_HAVE_SRANDOM) +CHECK_FUNCTION_EXISTS (strdup ${HDF_PREFIX}_HAVE_STRDUP) +CHECK_FUNCTION_EXISTS (symlink ${HDF_PREFIX}_HAVE_SYMLINK) +CHECK_FUNCTION_EXISTS (system ${HDF_PREFIX}_HAVE_SYSTEM) + +CHECK_FUNCTION_EXISTS (tmpfile ${HDF_PREFIX}_HAVE_TMPFILE) +CHECK_FUNCTION_EXISTS (asprintf ${HDF_PREFIX}_HAVE_ASPRINTF) +CHECK_FUNCTION_EXISTS (vasprintf ${HDF_PREFIX}_HAVE_VASPRINTF) +CHECK_FUNCTION_EXISTS (waitpid ${HDF_PREFIX}_HAVE_WAITPID) + +CHECK_FUNCTION_EXISTS (vsnprintf ${HDF_PREFIX}_HAVE_VSNPRINTF) +if (NOT WINDOWS) + if (${HDF_PREFIX}_HAVE_VSNPRINTF) + HDF_FUNCTION_TEST (VSNPRINTF_WORKS) + endif (${HDF_PREFIX}_HAVE_VSNPRINTF) +endif (NOT WINDOWS) + +#----------------------------------------------------------------------------- +# sigsetjmp is special; may actually be a macro +#----------------------------------------------------------------------------- +if (NOT ${HDF_PREFIX}_HAVE_SIGSETJMP) + if (${HDF_PREFIX}_HAVE_SETJMP_H) + CHECK_SYMBOL_EXISTS (sigsetjmp "setjmp.h" ${HDF_PREFIX}_HAVE_MACRO_SIGSETJMP) + if (${HDF_PREFIX}_HAVE_MACRO_SIGSETJMP) + set (${HDF_PREFIX}_HAVE_SIGSETJMP 1) + endif (${HDF_PREFIX}_HAVE_MACRO_SIGSETJMP) + endif (${HDF_PREFIX}_HAVE_SETJMP_H) +endif (NOT ${HDF_PREFIX}_HAVE_SIGSETJMP) + +#----------------------------------------------------------------------------- +# Check a bunch of other functions +#----------------------------------------------------------------------------- +if (NOT WINDOWS) + foreach (test + HAVE_ATTRIBUTE + HAVE_C99_FUNC +# STDC_HEADERS + HAVE_FUNCTION + HAVE_C99_DESIGNATED_INITIALIZER + SYSTEM_SCOPE_THREADS + HAVE_SOCKLEN_T + CXX_HAVE_OFFSETOF + ) + HDF_FUNCTION_TEST (${test}) + endforeach (test) +endif (NOT WINDOWS) + +# For other CXX specific tests, use this MACRO. +MACRO (HDF_CXX_FUNCTION_TEST OTHER_TEST) + if ("${OTHER_TEST}" MATCHES "^${OTHER_TEST}$") + set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}") + set (OTHER_TEST_ADD_LIBRARIES) + if (CMAKE_REQUIRED_LIBRARIES) + set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + endif (CMAKE_REQUIRED_LIBRARIES) + + foreach (def ${HDF_EXTRA_TEST_DEFINITIONS}) + set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}=${${def}}") + endforeach (def) + + foreach (def + HAVE_SYS_TIME_H + HAVE_UNISTD_H + HAVE_SYS_TYPES_H + HAVE_SYS_SOCKET_H + ) + if ("${${HDF_PREFIX}_${def}}") + set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}") + endif ("${${HDF_PREFIX}_${def}}") + endforeach (def) + + if (LARGEFILE) + set (MACRO_CHECK_FUNCTION_DEFINITIONS + "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE" + ) + endif (LARGEFILE) + + #message (STATUS "Performing ${OTHER_TEST}") + TRY_COMPILE (${OTHER_TEST} + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/HDFCXXTests.cpp + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + "${OTHER_TEST_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT + ) + if (${OTHER_TEST} EQUAL 0) + set (${OTHER_TEST} 1 CACHE INTERNAL "CXX test ${FUNCTION}") + message (STATUS "Performing CXX Test ${OTHER_TEST} - Success") + else (${OTHER_TEST} EQUAL 0) + message (STATUS "Performing CXX Test ${OTHER_TEST} - Failed") + set (${OTHER_TEST} "" CACHE INTERNAL "CXX test ${FUNCTION}") + file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log + "Performing CXX Test ${OTHER_TEST} failed with the following output:\n" + "${OUTPUT}\n" + ) + endif (${OTHER_TEST} EQUAL 0) + endif ("${OTHER_TEST}" MATCHES "^${OTHER_TEST}$") +ENDMACRO (HDF_CXX_FUNCTION_TEST) + +#----------------------------------------------------------------------------- +# Check a bunch of cxx functions +#----------------------------------------------------------------------------- +if (CMAKE_CXX_COMPILER_LOADED) + foreach (test + OLD_HEADER_FILENAME + ${HDF_PREFIX}_NO_NAMESPACE + ${HDF_PREFIX}_NO_STD + BOOL_NOTDEFINED + NO_STATIC_CAST + ) + HDF_CXX_FUNCTION_TEST (${test}) + endforeach (test) +endif (CMAKE_CXX_COMPILER_LOADED) + +#----------------------------------------------------------------------------- +# Check if InitOnceExecuteOnce is available +#----------------------------------------------------------------------------- +if (WINDOWS) + if (NOT HDF_NO_IOEO_TEST) + message (STATUS "Checking for InitOnceExecuteOnce:") + if ("${${HDF_PREFIX}_HAVE_IOEO}" MATCHES "^${${HDF_PREFIX}_HAVE_IOEO}$") + if (LARGEFILE) + set (CMAKE_REQUIRED_DEFINITIONS + "${CURRENT_TEST_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE" + ) + endif (LARGEFILE) + set (MACRO_CHECK_FUNCTION_DEFINITIONS + "-DHAVE_IOEO ${CMAKE_REQUIRED_FLAGS}") + if (CMAKE_REQUIRED_LIBRARIES) + set (CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + else (CMAKE_REQUIRED_LIBRARIES) + set (CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES) + endif (CMAKE_REQUIRED_LIBRARIES) + if (CMAKE_REQUIRED_INCLUDES) + set (CHECK_C_SOURCE_COMPILES_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + else (CMAKE_REQUIRED_INCLUDES) + set (CHECK_C_SOURCE_COMPILES_ADD_INCLUDES) + endif (CMAKE_REQUIRED_INCLUDES) + + TRY_RUN(HAVE_IOEO_EXITCODE HAVE_IOEO_COMPILED + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/HDFTests.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH} + "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}" + "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}" + COMPILE_OUTPUT_VARIABLE OUTPUT) + # if it did not compile make the return value fail code of 1 + if (NOT HAVE_IOEO_COMPILED) + set (HAVE_IOEO_EXITCODE 1) + endif (NOT HAVE_IOEO_COMPILED) + # if the return value was 0 then it worked + if ("${HAVE_IOEO_EXITCODE}" EQUAL 0) + set (${HDF_PREFIX}_HAVE_IOEO 1 CACHE INTERNAL "Test InitOnceExecuteOnce") + message (STATUS "Performing Test InitOnceExecuteOnce - Success") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing C SOURCE FILE Test InitOnceExecuteOnce succeded with the following output:\n" + "${OUTPUT}\n" + "Return value: ${HAVE_IOEO}\n") + else ("${HAVE_IOEO_EXITCODE}" EQUAL 0) + if (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN") + set (${HDF_PREFIX}_HAVE_IOEO "${HAVE_IOEO_EXITCODE}") + else (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN") + set (${HDF_PREFIX}_HAVE_IOEO "" CACHE INTERNAL "Test InitOnceExecuteOnce") + endif (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN") + + message (STATUS "Performing Test InitOnceExecuteOnce - Failed") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing InitOnceExecuteOnce Test failed with the following output:\n" + "${OUTPUT}\n" + "Return value: ${HAVE_IOEO_EXITCODE}\n") + endif ("${HAVE_IOEO_EXITCODE}" EQUAL 0) + endif ("${${HDF_PREFIX}_HAVE_IOEO}" MATCHES "^${${HDF_PREFIX}_HAVE_IOEO}$") + endif (NOT HDF_NO_IOEO_TEST) +endif (WINDOWS) + +#----------------------------------------------------------------------------- +# Determine how 'inline' is used +#----------------------------------------------------------------------------- +set (HDF_EXTRA_TEST_DEFINITIONS INLINE_TEST_INLINE) +foreach (inline_test inline __inline__ __inline) + set (INLINE_TEST_INLINE ${inline_test}) + HDF_FUNCTION_TEST (INLINE_TEST_${inline_test}) +endforeach (inline_test) + +set (HDF_EXTRA_TEST_DEFINITIONS) +if (INLINE_TEST___inline__) + set (${HDF_PREFIX}_inline __inline__) +else (INLINE_TEST___inline__) + if (INLINE_TEST___inline) + set (${HDF_PREFIX}_inline __inline) + else (INLINE_TEST___inline) + if (INLINE_TEST_inline) + set (${HDF_PREFIX}_inline inline) + endif (INLINE_TEST_inline) + endif (INLINE_TEST___inline) +endif (INLINE_TEST___inline__) + +#----------------------------------------------------------------------------- +# Check how to print a Long Long integer +#----------------------------------------------------------------------------- +if (NOT ${HDF_PREFIX}_PRINTF_LL_WIDTH OR ${HDF_PREFIX}_PRINTF_LL_WIDTH MATCHES "unknown") + set (PRINT_LL_FOUND 0) + message (STATUS "Checking for appropriate format for 64 bit long:") + foreach (HDF5_PRINTF_LL l64 l L q I64 ll) + set (CURRENT_TEST_DEFINITIONS "-DPRINTF_LL_WIDTH=${HDF5_PRINTF_LL}") + if (${HDF_PREFIX}_SIZEOF_LONG_LONG) + set (CURRENT_TEST_DEFINITIONS "${CURRENT_TEST_DEFINITIONS} -DHAVE_LONG_LONG") + endif (${HDF_PREFIX}_SIZEOF_LONG_LONG) + TRY_RUN (HDF5_PRINTF_LL_TEST_RUN HDF5_PRINTF_LL_TEST_COMPILE + ${CMAKE_BINARY_DIR} + ${HDF_RESOURCES_EXT_DIR}/HDFTests.c + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CURRENT_TEST_DEFINITIONS} + OUTPUT_VARIABLE OUTPUT + ) + if (HDF5_PRINTF_LL_TEST_COMPILE) + if (HDF5_PRINTF_LL_TEST_RUN MATCHES 0) + set (${HDF_PREFIX}_PRINTF_LL_WIDTH "\"${HDF5_PRINTF_LL}\"" CACHE INTERNAL "Width for printf for type `long long' or `__int64', us. `ll") + set (PRINT_LL_FOUND 1) + else (HDF5_PRINTF_LL_TEST_RUN MATCHES 0) + message ("Width with ${HDF5_PRINTF_LL} failed with result: ${HDF5_PRINTF_LL_TEST_RUN}") + endif (HDF5_PRINTF_LL_TEST_RUN MATCHES 0) + else (HDF5_PRINTF_LL_TEST_COMPILE) + file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log + "Test ${HDF_PREFIX}_PRINTF_LL_WIDTH for ${HDF5_PRINTF_LL} failed with the following output:\n ${OUTPUT}\n" + ) + endif (HDF5_PRINTF_LL_TEST_COMPILE) + endforeach (HDF5_PRINTF_LL) + + if (PRINT_LL_FOUND) + message (STATUS "Checking for apropriate format for 64 bit long: found ${${HDF_PREFIX}_PRINTF_LL_WIDTH}") + else (PRINT_LL_FOUND) + message (STATUS "Checking for apropriate format for 64 bit long: not found") + set (${HDF_PREFIX}_PRINTF_LL_WIDTH "\"unknown\"" CACHE INTERNAL + "Width for printf for type `long long' or `__int64', us. `ll" + ) + endif (PRINT_LL_FOUND) +endif (NOT ${HDF_PREFIX}_PRINTF_LL_WIDTH OR ${HDF_PREFIX}_PRINTF_LL_WIDTH MATCHES "unknown") + +# ---------------------------------------------------------------------- +# Set the flag to indicate that the machine can handle converting +# denormalized floating-point values. +# (This flag should be set for all machines, except for the Crays, where +# the cache value is set in it's config file) +# +set (${HDF_PREFIX}_CONVERT_DENORMAL_FLOAT 1) diff --git a/config/cmake_ext_mod/FindMPI.cmake b/config/cmake_ext_mod/FindMPI.cmake new file mode 100644 index 0000000000..1c9a2e3e6e --- /dev/null +++ b/config/cmake_ext_mod/FindMPI.cmake @@ -0,0 +1,684 @@ +#.rst: +# FindMPI +# ------- +# +# Find a Message Passing Interface (MPI) implementation +# +# The Message Passing Interface (MPI) is a library used to write +# high-performance distributed-memory parallel applications, and is +# typically deployed on a cluster. MPI is a standard interface (defined +# by the MPI forum) for which many implementations are available. All +# of them have somewhat different include paths, libraries to link +# against, etc., and this module tries to smooth out those differences. +# +# === Variables === +# +# This module will set the following variables per language in your +# project, where is one of C, CXX, or Fortran: +# +# :: +# +# MPI__FOUND TRUE if FindMPI found MPI flags for +# MPI__COMPILER MPI Compiler wrapper for +# MPI__COMPILE_FLAGS Compilation flags for MPI programs +# MPI__INCLUDE_PATH Include path(s) for MPI header +# MPI__LINK_FLAGS Linking flags for MPI programs +# MPI__LIBRARIES All libraries to link MPI programs against +# +# Additionally, FindMPI sets the following variables for running MPI +# programs from the command line: +# +# :: +# +# MPIEXEC Executable for running MPI programs +# MPIEXEC_NUMPROC_FLAG Flag to pass to MPIEXEC before giving +# it the number of processors to run on +# MPIEXEC_PREFLAGS Flags to pass to MPIEXEC directly +# before the executable to run. +# MPIEXEC_POSTFLAGS Flags to pass to MPIEXEC after other flags +# +# === Usage === +# +# To use this module, simply call FindMPI from a CMakeLists.txt file, or +# run find_package(MPI), then run CMake. If you are happy with the +# auto- detected configuration for your language, then you're done. If +# not, you have two options: +# +# :: +# +# 1. Set MPI__COMPILER to the MPI wrapper (mpicc, etc.) of your +# choice and reconfigure. FindMPI will attempt to determine all the +# necessary variables using THAT compiler's compile and link flags. +# 2. If this fails, or if your MPI implementation does not come with +# a compiler wrapper, then set both MPI__LIBRARIES and +# MPI__INCLUDE_PATH. You may also set any other variables +# listed above, but these two are required. This will circumvent +# autodetection entirely. +# +# When configuration is successful, MPI__COMPILER will be set to +# the compiler wrapper for , if it was found. MPI__FOUND +# and other variables above will be set if any MPI implementation was +# found for , regardless of whether a compiler was found. +# +# When using MPIEXEC to execute MPI applications, you should typically +# use all of the MPIEXEC flags as follows: +# +# :: +# +# ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} PROCS +# ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS +# +# where PROCS is the number of processors on which to execute the +# program, EXECUTABLE is the MPI program, and ARGS are the arguments to +# pass to the MPI program. +# +# === Backward Compatibility === +# +# For backward compatibility with older versions of FindMPI, these +# variables are set, but deprecated: +# +# :: +# +# MPI_FOUND MPI_COMPILER MPI_LIBRARY +# MPI_COMPILE_FLAGS MPI_INCLUDE_PATH MPI_EXTRA_LIBRARY +# MPI_LINK_FLAGS MPI_LIBRARIES +# +# In new projects, please use the MPI__XXX equivalents. + +#============================================================================= +# Copyright 2001-2011 Kitware, Inc. +# Copyright 2010-2011 Todd Gamblin tgamblin@llnl.gov +# Copyright 2001-2009 Dave Partyka +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# include this to handle the QUIETLY and REQUIRED arguments +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +include(GetPrerequisites) + +# +# This part detects MPI compilers, attempting to wade through the mess of compiler names in +# a sensible way. +# +# The compilers are detected in this order: +# +# 1. Try to find the most generic available MPI compiler, as this is usually set up by +# cluster admins. e.g., if plain old mpicc is available, we'll use it and assume it's +# the right compiler. +# +# 2. If a generic mpicc is NOT found, then we attempt to find one that matches +# CMAKE__COMPILER_ID. e.g. if you are using XL compilers, we'll try to find mpixlc +# and company, but not mpiicc. This hopefully prevents toolchain mismatches. +# +# If you want to force a particular MPI compiler other than what we autodetect (e.g. if you +# want to compile regular stuff with GNU and parallel stuff with Intel), you can always set +# your favorite MPI__COMPILER explicitly and this stuff will be ignored. +# + +# Start out with the generic MPI compiler names, as these are most commonly used. +set(_MPI_C_COMPILER_NAMES mpicc mpcc mpicc_r mpcc_r) +set(_MPI_CXX_COMPILER_NAMES mpicxx mpiCC mpcxx mpCC mpic++ mpc++ + mpicxx_r mpiCC_r mpcxx_r mpCC_r mpic++_r mpc++_r) +set(_MPI_Fortran_COMPILER_NAMES mpif95 mpif95_r mpf95 mpf95_r + mpif90 mpif90_r mpf90 mpf90_r + mpif77 mpif77_r mpf77 mpf77_r) + +# GNU compiler names +set(_MPI_GNU_C_COMPILER_NAMES mpigcc mpgcc mpigcc_r mpgcc_r) +set(_MPI_GNU_CXX_COMPILER_NAMES mpig++ mpg++ mpig++_r mpg++_r) +set(_MPI_GNU_Fortran_COMPILER_NAMES mpigfortran mpgfortran mpigfortran_r mpgfortran_r + mpig77 mpig77_r mpg77 mpg77_r) + +# Intel MPI compiler names +set(_MPI_Intel_C_COMPILER_NAMES mpiicc) +set(_MPI_Intel_CXX_COMPILER_NAMES mpiicpc mpiicxx mpiic++ mpiiCC) +set(_MPI_Intel_Fortran_COMPILER_NAMES mpiifort mpiif95 mpiif90 mpiif77) + +# PGI compiler names +set(_MPI_PGI_C_COMPILER_NAMES mpipgcc mppgcc) +set(_MPI_PGI_CXX_COMPILER_NAMES mpipgCC mppgCC) +set(_MPI_PGI_Fortran_COMPILER_NAMES mpipgf95 mpipgf90 mppgf95 mppgf90 mpipgf77 mppgf77) + +# XLC MPI Compiler names +set(_MPI_XL_C_COMPILER_NAMES mpxlc mpxlc_r mpixlc mpixlc_r) +set(_MPI_XL_CXX_COMPILER_NAMES mpixlcxx mpixlC mpixlc++ mpxlcxx mpxlc++ mpixlc++ mpxlCC + mpixlcxx_r mpixlC_r mpixlc++_r mpxlcxx_r mpxlc++_r mpixlc++_r mpxlCC_r) +set(_MPI_XL_Fortran_COMPILER_NAMES mpixlf95 mpixlf95_r mpxlf95 mpxlf95_r + mpixlf90 mpixlf90_r mpxlf90 mpxlf90_r + mpixlf77 mpixlf77_r mpxlf77 mpxlf77_r + mpixlf mpixlf_r mpxlf mpxlf_r) + +# append vendor-specific compilers to the list if we either don't know the compiler id, +# or if we know it matches the regular compiler. +foreach (lang C CXX Fortran) + foreach (id GNU Intel PGI XL) + if (NOT CMAKE_${lang}_COMPILER_ID OR CMAKE_${lang}_COMPILER_ID STREQUAL id) + list(APPEND _MPI_${lang}_COMPILER_NAMES ${_MPI_${id}_${lang}_COMPILER_NAMES}) + endif() + unset(_MPI_${id}_${lang}_COMPILER_NAMES) # clean up the namespace here + endforeach() +endforeach() + + +# Names to try for MPI exec +set(_MPI_EXEC_NAMES mpiexec mpirun lamexec srun) + +# Grab the path to MPI from the registry if we're on windows. +set(_MPI_PREFIX_PATH) +if(WIN32) + # MSMPI + file(TO_CMAKE_PATH "$ENV{MSMPI_BIN}" msmpi_bin_path) # The default path ends with a '\' and doesn't mix with ';' when appending. + list(APPEND _MPI_PREFIX_PATH "${msmpi_bin_path}") + unset(msmpi_bin_path) + list(APPEND _MPI_PREFIX_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MPI;InstallRoot]/Bin") + list(APPEND _MPI_PREFIX_PATH "$ENV{MSMPI_INC}/..") # The SDK is installed separately from the runtime + # MPICH + list(APPEND _MPI_PREFIX_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH\\SMPD;binary]/..") + list(APPEND _MPI_PREFIX_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH2;Path]") + list(APPEND _MPI_PREFIX_PATH "$ENV{ProgramW6432}/MPICH2/") +endif() + +# Build a list of prefixes to search for MPI. +foreach(SystemPrefixDir ${CMAKE_SYSTEM_PREFIX_PATH}) + foreach(MpiPackageDir ${_MPI_PREFIX_PATH}) + if(EXISTS ${SystemPrefixDir}/${MpiPackageDir}) + list(APPEND _MPI_PREFIX_PATH "${SystemPrefixDir}/${MpiPackageDir}") + endif() + endforeach() +endforeach() + +function (_mpi_check_compiler compiler options cmdvar resvar) + execute_process( + COMMAND "${compiler}" ${options} + OUTPUT_VARIABLE cmdline OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE cmdline ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE success) + # Intel MPI 5.0.1 will return a zero return code even when the + # argument to the MPI compiler wrapper is unknown. Attempt to + # catch this case. + if("${cmdline}" MATCHES "undefined reference") + set(success 255 ) + endif() + set(${cmdvar} "${cmdline}" PARENT_SCOPE) + set(${resvar} "${success}" PARENT_SCOPE) +endfunction() + +# +# interrogate_mpi_compiler(lang try_libs) +# +# Attempts to extract compiler and linker args from an MPI compiler. The arguments set +# by this function are: +# +# MPI__INCLUDE_PATH MPI__LINK_FLAGS MPI__FOUND +# MPI__COMPILE_FLAGS MPI__LIBRARIES +# +# MPI__COMPILER must be set beforehand to the absolute path to an MPI compiler for +# . Additionally, MPI__INCLUDE_PATH and MPI__LIBRARIES may be set +# to skip autodetection. +# +# If try_libs is TRUE, this will also attempt to find plain MPI libraries in the usual +# way. In general, this is not as effective as interrogating the compilers, as it +# ignores language-specific flags and libraries. However, some MPI implementations +# (Windows implementations) do not have compiler wrappers, so this approach must be used. +# +function (interrogate_mpi_compiler lang try_libs) + # MPI_${lang}_NO_INTERROGATE will be set to a compiler name when the *regular* compiler was + # discovered to be the MPI compiler. This happens on machines like the Cray XE6 that use + # modules to set cc, CC, and ftn to the MPI compilers. If the user force-sets another MPI + # compiler, MPI_${lang}_COMPILER won't be equal to MPI_${lang}_NO_INTERROGATE, and we'll + # inspect that compiler anew. This allows users to set new compilers w/o rm'ing cache. + string(COMPARE NOTEQUAL "${MPI_${lang}_NO_INTERROGATE}" "${MPI_${lang}_COMPILER}" interrogate) + + # If MPI is set already in the cache, don't bother with interrogating the compiler. + if (interrogate AND ((NOT MPI_${lang}_INCLUDE_PATH) OR (NOT MPI_${lang}_LIBRARIES))) + if (MPI_${lang}_COMPILER) + # Check whether the -showme:compile option works. This indicates that we have either OpenMPI + # or a newer version of LAM-MPI, and implies that -showme:link will also work. + _mpi_check_compiler("${MPI_${lang}_COMPILER}" "-showme:compile" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN) + if (MPI_COMPILER_RETURN EQUAL 0) + # If we appear to have -showme:compile, then we should + # also have -showme:link. Try it. + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:link + OUTPUT_VARIABLE MPI_LINK_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_LINK_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + + if (MPI_COMPILER_RETURN EQUAL 0) + # We probably have -showme:incdirs and -showme:libdirs as well, + # so grab that while we're at it. + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:incdirs + OUTPUT_VARIABLE MPI_INCDIRS OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_INCDIRS ERROR_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:libdirs + OUTPUT_VARIABLE MPI_LIBDIRS OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_LIBDIRS ERROR_STRIP_TRAILING_WHITESPACE) + + else() + # reset things here if something went wrong. + set(MPI_COMPILE_CMDLINE) + set(MPI_LINK_CMDLINE) + endif() + endif () + + # Older versions of LAM-MPI have "-showme". Try to find that. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + _mpi_check_compiler("${MPI_${lang}_COMPILER}" "-showme" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN) + endif() + + # MVAPICH uses -compile-info and -link-info. Try them. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + _mpi_check_compiler("${MPI_${lang}_COMPILER}" "-compile-info" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN) + + # If we have compile-info, also have link-info. + if (MPI_COMPILER_RETURN EQUAL 0) + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -link-info + OUTPUT_VARIABLE MPI_LINK_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_LINK_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + endif() + + # make sure we got compile and link. Reset vars if something's wrong. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + set(MPI_COMPILE_CMDLINE) + set(MPI_LINK_CMDLINE) + endif() + endif() + + # MPICH just uses "-show". Try it. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + _mpi_check_compiler("${MPI_${lang}_COMPILER}" "-show" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN) + endif() + + if (MPI_COMPILER_RETURN EQUAL 0) + # We have our command lines, but we might need to copy MPI_COMPILE_CMDLINE + # into MPI_LINK_CMDLINE, if we didn't find the link line. + if (NOT MPI_LINK_CMDLINE) + set(MPI_LINK_CMDLINE ${MPI_COMPILE_CMDLINE}) + endif() + else() + message(STATUS "Unable to determine MPI from MPI driver ${MPI_${lang}_COMPILER}") + set(MPI_COMPILE_CMDLINE) + set(MPI_LINK_CMDLINE) + endif() + + # Here, we're done with the interrogation part, and we'll try to extract args we care + # about from what we learned from the compiler wrapper scripts. + + # If interrogation came back with something, extract our variable from the MPI command line + if (MPI_COMPILE_CMDLINE OR MPI_LINK_CMDLINE) + # Extract compile flags from the compile command line. + string(REGEX MATCHALL "(^| )-[Df]([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_FLAGS "${MPI_COMPILE_CMDLINE}") + set(MPI_COMPILE_FLAGS_WORK) + + foreach(FLAG ${MPI_ALL_COMPILE_FLAGS}) + if (MPI_COMPILE_FLAGS_WORK) + set(MPI_COMPILE_FLAGS_WORK "${MPI_COMPILE_FLAGS_WORK} ${FLAG}") + else() + set(MPI_COMPILE_FLAGS_WORK ${FLAG}) + endif() + endforeach() + + # Extract include paths from compile command line + string(REGEX MATCHALL "(^| )-I([^\" ]+|\"[^\"]+\")" MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}") + foreach(IPATH ${MPI_ALL_INCLUDE_PATHS}) + string(REGEX REPLACE "^ ?-I" "" IPATH ${IPATH}) + string(REPLACE "//" "/" IPATH ${IPATH}) + list(APPEND MPI_INCLUDE_PATH_WORK ${IPATH}) + endforeach() + + # try using showme:incdirs if extracting didn't work. + if (NOT MPI_INCLUDE_PATH_WORK) + set(MPI_INCLUDE_PATH_WORK ${MPI_INCDIRS}) + separate_arguments(MPI_INCLUDE_PATH_WORK) + endif() + + # If all else fails, just search for mpi.h in the normal include paths. + if (NOT MPI_INCLUDE_PATH_WORK) + set(MPI_HEADER_PATH "MPI_HEADER_PATH-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_path(MPI_HEADER_PATH mpi.h + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES include) + set(MPI_INCLUDE_PATH_WORK ${MPI_HEADER_PATH}) + endif() + + # Extract linker paths from the link command line + string(REGEX MATCHALL "(^| |-Wl,)-L([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_PATHS "${MPI_LINK_CMDLINE}") + set(MPI_LINK_PATH) + foreach(LPATH ${MPI_ALL_LINK_PATHS}) + string(REGEX REPLACE "^(| |-Wl,)-L" "" LPATH ${LPATH}) + string(REPLACE "//" "/" LPATH ${LPATH}) + list(APPEND MPI_LINK_PATH ${LPATH}) + endforeach() + + # try using showme:libdirs if extracting didn't work. + if (NOT MPI_LINK_PATH) + set(MPI_LINK_PATH ${MPI_LIBDIRS}) + separate_arguments(MPI_LINK_PATH) + endif() + + # Extract linker flags from the link command line + string(REGEX MATCHALL "(^| )(-Wl,|-Xlinker )([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_FLAGS "${MPI_LINK_CMDLINE}") + set(MPI_LINK_FLAGS_WORK) + foreach(FLAG ${MPI_ALL_LINK_FLAGS}) + if (MPI_LINK_FLAGS_WORK) + set(MPI_LINK_FLAGS_WORK "${MPI_LINK_FLAGS_WORK} ${FLAG}") + else() + set(MPI_LINK_FLAGS_WORK ${FLAG}) + endif() + endforeach() + + # Extract the set of libraries to link against from the link command + # line + string(REGEX MATCHALL "(^| )-l([^\" ]+|\"[^\"]+\")" MPI_LIBNAMES "${MPI_LINK_CMDLINE}") + + # add the compiler implicit directories because some compilers + # such as the intel compiler have libraries that show up + # in the showme list that can only be found in the implicit + # link directories of the compiler. + if (DEFINED CMAKE_${lang}_IMPLICIT_LINK_DIRECTORIES) + set(MPI_LINK_PATH + "${MPI_LINK_PATH};${CMAKE_${lang}_IMPLICIT_LINK_DIRECTORIES}") + endif () + + # Determine full path names for all of the libraries that one needs + # to link against in an MPI program + foreach(LIB ${MPI_LIBNAMES}) + string(REGEX REPLACE "^ ?-l" "" LIB ${LIB}) + # MPI_LIB is cached by find_library, but we don't want that. Clear it first. + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB NAMES ${LIB} HINTS ${MPI_LINK_PATH}) + + if (MPI_LIB) + list(APPEND MPI_LIBRARIES_WORK ${MPI_LIB}) + elseif (NOT MPI_FIND_QUIETLY) + message(WARNING "Unable to find MPI library ${LIB}") + endif() + endforeach() + + # Sanity check MPI_LIBRARIES to make sure there are enough libraries + list(LENGTH MPI_LIBRARIES_WORK MPI_NUMLIBS) + list(LENGTH MPI_LIBNAMES MPI_NUMLIBS_EXPECTED) + if (NOT MPI_NUMLIBS EQUAL MPI_NUMLIBS_EXPECTED) + set(MPI_LIBRARIES_WORK "MPI_${lang}_LIBRARIES-NOTFOUND") + endif() + endif() + + elseif(try_libs) + # If we didn't have an MPI compiler script to interrogate, attempt to find everything + # with plain old find functions. This is nasty because MPI implementations have LOTS of + # different library names, so this section isn't going to be very generic. We need to + # make sure it works for MS MPI, though, since there are no compiler wrappers for that. + find_path(MPI_HEADER_PATH mpi.h + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES include Inc) + set(MPI_INCLUDE_PATH_WORK ${MPI_HEADER_PATH}) + + # Decide between 32-bit and 64-bit libraries for Microsoft's MPI + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + set(MS_MPI_ARCH_DIR x64) + set(MS_MPI_ARCH_DIR2 amd64) + else() + set(MS_MPI_ARCH_DIR x86) + set(MS_MPI_ARCH_DIR2 i386) + endif() + + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB + NAMES mpi mpich mpich2 msmpi + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES lib lib/${MS_MPI_ARCH_DIR} Lib Lib/${MS_MPI_ARCH_DIR} lib/${MS_MPI_ARCH_DIR2} Lib/${MS_MPI_ARCH_DIR2}) + set(MPI_LIBRARIES_WORK ${MPI_LIB}) + + # Right now, we only know about the extra libs for C++. + # We could add Fortran here (as there is usually libfmpich, etc.), but + # this really only has to work with MS MPI on Windows. + # Assume that other MPI's are covered by the compiler wrappers. + if (${lang} STREQUAL CXX) + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB + NAMES mpi++ mpicxx cxx mpi_cxx + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES lib) + if (MPI_LIBRARIES_WORK AND MPI_LIB) + list(APPEND MPI_LIBRARIES_WORK ${MPI_LIB}) + endif() + endif() + + if (${lang} STREQUAL Fortran) + set(MPI_HEADER_PATH "MPI_HEADER_PATH-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_path(MPI_HEADER_PATH mpifptr.h + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES include include/${MS_MPI_ARCH_DIR} include/${MS_MPI_ARCH_DIR2} Inc Inc/${MS_MPI_ARCH_DIR} Inc/${MS_MPI_ARCH_DIR2}) + if (MPI_INCLUDE_PATH_WORK AND MPI_HEADER_PATH) + list(APPEND MPI_INCLUDE_PATH_WORK ${MPI_HEADER_PATH}) + endif() + + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB + NAMES fmpi fmpich fmpich2 fmpich2g msmpifec msmpifmc + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES lib lib/${MS_MPI_ARCH_DIR} Lib Lib/${MS_MPI_ARCH_DIR}) + if (MPI_LIBRARIES_WORK AND MPI_LIB) + list(APPEND MPI_LIBRARIES_WORK ${MPI_LIB}) + endif() + endif() + + if (NOT MPI_LIBRARIES_WORK) + set(MPI_LIBRARIES_WORK "MPI_${lang}_LIBRARIES-NOTFOUND") + endif() + endif() + + # If we found MPI, set up all of the appropriate cache entries + set(MPI_${lang}_COMPILE_FLAGS ${MPI_COMPILE_FLAGS_WORK} CACHE STRING "MPI ${lang} compilation flags" FORCE) + set(MPI_${lang}_INCLUDE_PATH ${MPI_INCLUDE_PATH_WORK} CACHE STRING "MPI ${lang} include path" FORCE) + set(MPI_${lang}_LINK_FLAGS ${MPI_LINK_FLAGS_WORK} CACHE STRING "MPI ${lang} linking flags" FORCE) + set(MPI_${lang}_LIBRARIES ${MPI_LIBRARIES_WORK} CACHE STRING "MPI ${lang} libraries to link against" FORCE) + mark_as_advanced(MPI_${lang}_COMPILE_FLAGS MPI_${lang}_INCLUDE_PATH MPI_${lang}_LINK_FLAGS MPI_${lang}_LIBRARIES) + + # clear out our temporary lib/header detectionv variable here. + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE INTERNAL "Scratch variable for MPI lib detection" FORCE) + set(MPI_HEADER_PATH "MPI_HEADER_PATH-NOTFOUND" CACHE INTERNAL "Scratch variable for MPI header detection" FORCE) + endif() + + # finally set a found variable for each MPI language + if (MPI_${lang}_INCLUDE_PATH AND MPI_${lang}_LIBRARIES) + set(MPI_${lang}_FOUND TRUE PARENT_SCOPE) + else() + set(MPI_${lang}_FOUND FALSE PARENT_SCOPE) + endif() +endfunction() + + +# This function attempts to compile with the regular compiler, to see if MPI programs +# work with it. This is a last ditch attempt after we've tried interrogating mpicc and +# friends, and after we've tried to find generic libraries. Works on machines like +# Cray XE6, where the modules environment changes what MPI version cc, CC, and ftn use. +function(try_regular_compiler lang success) + set(scratch_directory ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) + if (${lang} STREQUAL Fortran) + set(test_file ${scratch_directory}/cmake_mpi_test.f90) + file(WRITE ${test_file} + "program hello\n" + "include 'mpif.h'\n" + "integer ierror\n" + "call MPI_INIT(ierror)\n" + "call MPI_FINALIZE(ierror)\n" + "end\n") + else() + if (${lang} STREQUAL CXX) + set(test_file ${scratch_directory}/cmake_mpi_test.cpp) + else() + set(test_file ${scratch_directory}/cmake_mpi_test.c) + endif() + file(WRITE ${test_file} + "#include \n" + "int main(int argc, char **argv) {\n" + " MPI_Init(&argc, &argv);\n" + " MPI_Finalize();\n" + "}\n") + endif() + try_compile(compiler_has_mpi ${scratch_directory} ${test_file}) + if (compiler_has_mpi) + set(MPI_${lang}_NO_INTERROGATE ${CMAKE_${lang}_COMPILER} CACHE STRING "Whether to interrogate MPI ${lang} compiler" FORCE) + set(MPI_${lang}_COMPILER ${CMAKE_${lang}_COMPILER} CACHE STRING "MPI ${lang} compiler" FORCE) + set(MPI_${lang}_COMPILE_FLAGS "" CACHE STRING "MPI ${lang} compilation flags" FORCE) + set(MPI_${lang}_INCLUDE_PATH "" CACHE STRING "MPI ${lang} include path" FORCE) + set(MPI_${lang}_LINK_FLAGS "" CACHE STRING "MPI ${lang} linking flags" FORCE) + set(MPI_${lang}_LIBRARIES "" CACHE STRING "MPI ${lang} libraries to link against" FORCE) + endif() + set(${success} ${compiler_has_mpi} PARENT_SCOPE) + unset(compiler_has_mpi CACHE) +endfunction() + +# End definitions, commence real work here. + +# Most mpi distros have some form of mpiexec which gives us something we can reliably look for. +find_program(MPIEXEC + NAMES ${_MPI_EXEC_NAMES} + HINTS ${MPI_HOME} $ENV{MPI_HOME} + PATHS ${_MPI_PREFIX_PATH} + PATH_SUFFIXES bin + DOC "Executable for running MPI programs.") + +# call get_filename_component twice to remove mpiexec and the directory it exists in (typically bin). +# This gives us a fairly reliable base directory to search for /bin /lib and /include from. +get_filename_component(_MPI_BASE_DIR "${MPIEXEC}" PATH) +get_filename_component(_MPI_BASE_DIR "${_MPI_BASE_DIR}" PATH) + +set(MPIEXEC_NUMPROC_FLAG "-np" CACHE STRING "Flag used by MPI to specify the number of processes for MPIEXEC; the next option will be the number of processes.") +set(MPIEXEC_PREFLAGS "" CACHE STRING "These flags will be directly before the executable that is being run by MPIEXEC.") +set(MPIEXEC_POSTFLAGS "" CACHE STRING "These flags will come after all flags given to MPIEXEC.") +set(MPIEXEC_MAX_NUMPROCS "2" CACHE STRING "Maximum number of processors available to run MPI applications.") +mark_as_advanced(MPIEXEC MPIEXEC_NUMPROC_FLAG MPIEXEC_PREFLAGS MPIEXEC_POSTFLAGS MPIEXEC_MAX_NUMPROCS) + + +#============================================================================= +# Backward compatibility input hacks. Propagate the FindMPI hints to C and +# CXX if the respective new versions are not defined. Translate the old +# MPI_LIBRARY and MPI_EXTRA_LIBRARY to respective MPI_${lang}_LIBRARIES. +# +# Once we find the new variables, we translate them back into their old +# equivalents below. +foreach (lang C CXX) + # Old input variables. + set(_MPI_OLD_INPUT_VARS COMPILER COMPILE_FLAGS INCLUDE_PATH LINK_FLAGS) + + # Set new vars based on their old equivalents, if the new versions are not already set. + foreach (var ${_MPI_OLD_INPUT_VARS}) + if (NOT MPI_${lang}_${var} AND MPI_${var}) + set(MPI_${lang}_${var} "${MPI_${var}}") + endif() + endforeach() + + # Special handling for MPI_LIBRARY and MPI_EXTRA_LIBRARY, which we nixed in the + # new FindMPI. These need to be merged into MPI__LIBRARIES + if (NOT MPI_${lang}_LIBRARIES AND (MPI_LIBRARY OR MPI_EXTRA_LIBRARY)) + set(MPI_${lang}_LIBRARIES ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARY}) + endif() +endforeach() +#============================================================================= + + +# This loop finds the compilers and sends them off for interrogation. +foreach (lang C CXX Fortran) + if (CMAKE_${lang}_COMPILER_WORKS) + # If the user supplies a compiler *name* instead of an absolute path, assume that we need to find THAT compiler. + if (MPI_${lang}_COMPILER) + is_file_executable(MPI_${lang}_COMPILER MPI_COMPILER_IS_EXECUTABLE) + if (NOT MPI_COMPILER_IS_EXECUTABLE) + # Get rid of our default list of names and just search for the name the user wants. + set(_MPI_${lang}_COMPILER_NAMES ${MPI_${lang}_COMPILER}) + set(MPI_${lang}_COMPILER "MPI_${lang}_COMPILER-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + # If the user specifies a compiler, we don't want to try to search libraries either. + set(try_libs FALSE) + endif() + else() + set(try_libs TRUE) + endif() + + find_program(MPI_${lang}_COMPILER + NAMES ${_MPI_${lang}_COMPILER_NAMES} + HINTS ${_MPI_BASE_DIR}/bin + PATHS ${_MPI_PREFIX_PATH} + ) + interrogate_mpi_compiler(${lang} ${try_libs}) + mark_as_advanced(MPI_${lang}_COMPILER) + + # last ditch try -- if nothing works so far, just try running the regular compiler and + # see if we can create an MPI executable. + set(regular_compiler_worked 0) + if (NOT MPI_${lang}_LIBRARIES OR NOT MPI_${lang}_INCLUDE_PATH) + try_regular_compiler(${lang} regular_compiler_worked) + endif() + + set(MPI_${lang}_FIND_QUIETLY ${MPI_FIND_QUIETLY}) + set(MPI_${lang}_FIND_REQUIRED ${MPI_FIND_REQUIRED}) + set(MPI_${lang}_FIND_VERSION ${MPI_FIND_VERSION}) + set(MPI_${lang}_FIND_VERSION_EXACT ${MPI_FIND_VERSION_EXACT}) + + if (regular_compiler_worked) + find_package_handle_standard_args(MPI_${lang} DEFAULT_MSG MPI_${lang}_COMPILER) + else() + find_package_handle_standard_args(MPI_${lang} DEFAULT_MSG MPI_${lang}_LIBRARIES MPI_${lang}_INCLUDE_PATH) + endif() + endif() +endforeach() + + +#============================================================================= +# More backward compatibility stuff +# +# Bare MPI sans ${lang} vars are set to CXX then C, depending on what was found. +# This mimics the behavior of the old language-oblivious FindMPI. +set(_MPI_OLD_VARS FOUND COMPILER INCLUDE_PATH COMPILE_FLAGS LINK_FLAGS LIBRARIES) +if (MPI_CXX_FOUND) + foreach (var ${_MPI_OLD_VARS}) + set(MPI_${var} ${MPI_CXX_${var}}) + endforeach() +elseif (MPI_C_FOUND) + foreach (var ${_MPI_OLD_VARS}) + set(MPI_${var} ${MPI_C_${var}}) + endforeach() +else() + # Note that we might still have found Fortran, but you'll need to use MPI_Fortran_FOUND + set(MPI_FOUND FALSE) +endif() + +# Chop MPI_LIBRARIES into the old-style MPI_LIBRARY and MPI_EXTRA_LIBRARY, and set them in cache. +if (MPI_LIBRARIES) + list(GET MPI_LIBRARIES 0 MPI_LIBRARY_WORK) + set(MPI_LIBRARY ${MPI_LIBRARY_WORK} CACHE FILEPATH "MPI library to link against" FORCE) +else() + set(MPI_LIBRARY "MPI_LIBRARY-NOTFOUND" CACHE FILEPATH "MPI library to link against" FORCE) +endif() + +list(LENGTH MPI_LIBRARIES MPI_NUMLIBS) +if (MPI_NUMLIBS GREATER 1) + set(MPI_EXTRA_LIBRARY_WORK ${MPI_LIBRARIES}) + list(REMOVE_AT MPI_EXTRA_LIBRARY_WORK 0) + set(MPI_EXTRA_LIBRARY ${MPI_EXTRA_LIBRARY_WORK} CACHE STRING "Extra MPI libraries to link against" FORCE) +else() + set(MPI_EXTRA_LIBRARY "MPI_EXTRA_LIBRARY-NOTFOUND" CACHE STRING "Extra MPI libraries to link against" FORCE) +endif() +#============================================================================= + +# unset these vars to cleanup namespace +unset(_MPI_OLD_VARS) +unset(_MPI_PREFIX_PATH) +unset(_MPI_BASE_DIR) +foreach (lang C CXX Fortran) + unset(_MPI_${lang}_COMPILER_NAMES) +endforeach() diff --git a/config/cmake_ext_mod/FindSZIP.cmake b/config/cmake_ext_mod/FindSZIP.cmake new file mode 100644 index 0000000000..5f0f031c01 --- /dev/null +++ b/config/cmake_ext_mod/FindSZIP.cmake @@ -0,0 +1,172 @@ + +# - Find SZIP library +# - Derived from the FindTiff.cmake that is included with cmake +# Find the native SZIP includes and library +# This module defines +# SZIP_INCLUDE_DIRS, where to find tiff.h, etc. +# SZIP_LIBRARIES, libraries to link against to use SZIP. +# SZIP_FOUND, If false, do not try to use SZIP. +# also defined, but not for general use are +# SZIP_LIBRARY, where to find the SZIP library. +# SZIP_LIBRARY_DEBUG - Debug version of SZIP library +# SZIP_LIBRARY_RELEASE - Release Version of SZIP library + +# message (STATUS "Finding SZIP library and headers..." ) + +############################################ +# +# Check the existence of the libraries. +# +############################################ +# This macro was taken directly from the FindQt4.cmake file that is included +# with the CMake distribution. This is NOT my work. All work was done by the +# original authors of the FindQt4.cmake file. Only minor modifications were +# made to remove references to Qt and make this file more generally applicable +######################################################################### + +MACRO (SZIP_ADJUST_LIB_VARS basename) + if (${basename}_INCLUDE_DIR) + + # if only the release version was found, set the debug variable also to the release version + if (${basename}_LIBRARY_RELEASE AND NOT ${basename}_LIBRARY_DEBUG) + set (${basename}_LIBRARY_DEBUG ${${basename}_LIBRARY_RELEASE}) + set (${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE}) + set (${basename}_LIBRARIES ${${basename}_LIBRARY_RELEASE}) + endif (${basename}_LIBRARY_RELEASE AND NOT ${basename}_LIBRARY_DEBUG) + + # if only the debug version was found, set the release variable also to the debug version + if (${basename}_LIBRARY_DEBUG AND NOT ${basename}_LIBRARY_RELEASE) + set (${basename}_LIBRARY_RELEASE ${${basename}_LIBRARY_DEBUG}) + set (${basename}_LIBRARY ${${basename}_LIBRARY_DEBUG}) + set (${basename}_LIBRARIES ${${basename}_LIBRARY_DEBUG}) + endif (${basename}_LIBRARY_DEBUG AND NOT ${basename}_LIBRARY_RELEASE) + if (${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE) + # if the generator supports configuration types then set + # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value + if (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + set (${basename}_LIBRARY optimized ${${basename}_LIBRARY_RELEASE} debug ${${basename}_LIBRARY_DEBUG}) + else (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + # if there are no configuration types and CMAKE_BUILD_TYPE has no value + # then just use the release libraries + set (${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} ) + endif (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + set (${basename}_LIBRARIES optimized ${${basename}_LIBRARY_RELEASE} debug ${${basename}_LIBRARY_DEBUG}) + endif (${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE) + + set (${basename}_LIBRARY ${${basename}_LIBRARY} CACHE FILEPATH "The ${basename} library") + + if (${basename}_LIBRARY) + set (${basename}_FOUND 1) + endif (${basename}_LIBRARY) + + endif (${basename}_INCLUDE_DIR ) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED (${basename}_LIBRARY ${basename}_LIBRARY_RELEASE ${basename}_LIBRARY_DEBUG ${basename}_INCLUDE_DIR ) +ENDMACRO (SZIP_ADJUST_LIB_VARS) + + +# Look for the header file. +set (SZIP_INCLUDE_SEARCH_DIRS + $ENV{SZIP_INSTALL}/include + $ENV{SZIP_INSTALL}/include/szip + /usr/include + /usr/include/szip +) + +set (SZIP_LIB_SEARCH_DIRS + $ENV{SZIP_INSTALL}/lib + /usr/lib +) + +set (SZIP_BIN_SEARCH_DIRS + $ENV{SZIP_INSTALL}/bin + /usr/bin +) + +FIND_PATH (SZIP_INCLUDE_DIR + NAMES szlib.h + PATHS ${SZIP_INCLUDE_SEARCH_DIRS} + NO_DEFAULT_PATH +) + +if (WIN32) + set (SZIP_SEARCH_DEBUG_NAMES "sz_d;libsz_d") + set (SZIP_SEARCH_RELEASE_NAMES "sz;libsz;libszip") +else (WIN32) + set (SZIP_SEARCH_DEBUG_NAMES "sz_d") + set (SZIP_SEARCH_RELEASE_NAMES "sz;szip") +endif (WIN32) + +# Look for the library. +FIND_LIBRARY (SZIP_LIBRARY_DEBUG + NAMES ${SZIP_SEARCH_DEBUG_NAMES} + PATHS ${SZIP_LIB_SEARCH_DIRS} + NO_DEFAULT_PATH +) + +FIND_LIBRARY (SZIP_LIBRARY_RELEASE + NAMES ${SZIP_SEARCH_RELEASE_NAMES} + PATHS ${SZIP_LIB_SEARCH_DIRS} + NO_DEFAULT_PATH +) + +SZIP_ADJUST_LIB_VARS (SZIP) + +if (SZIP_INCLUDE_DIR AND SZIP_LIBRARY) + set (SZIP_FOUND 1) + set (SZIP_LIBRARIES ${SZIP_LIBRARY}) + set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIR}) + if (SZIP_LIBRARY_DEBUG) + get_filename_component (SZIP_LIBRARY_PATH ${SZIP_LIBRARY_DEBUG} PATH) + set (SZIP_LIB_DIR ${SZIP_LIBRARY_PATH}) + elseif (SZIP_LIBRARY_RELEASE) + get_filename_component (SZIP_LIBRARY_PATH ${SZIP_LIBRARY_RELEASE} PATH) + set (SZIP_LIB_DIR ${SZIP_LIBRARY_PATH}) + endif (SZIP_LIBRARY_DEBUG) + +else (SZIP_INCLUDE_DIR AND SZIP_LIBRARY) + set (SZIP_FOUND 0) + set (SZIP_LIBRARIES) + set (SZIP_INCLUDE_DIRS) +endif (SZIP_INCLUDE_DIR AND SZIP_LIBRARY) + +# Report the results. +if (NOT SZIP_FOUND) + set (SZIP_DIR_MESSAGE + "SZip was not found. Make sure SZIP_LIBRARY and SZIP_INCLUDE_DIR are set or set the SZIP_INSTALL environment variable." + ) + if (NOT SZIP_FIND_QUIETLY) + message (STATUS "${SZIP_DIR_MESSAGE}") + else (NOT SZIP_FIND_QUIETLY) + if (SZIP_FIND_REQUIRED) + message (FATAL_ERROR "SZip was NOT found and is Required by this project") + endif (SZIP_FIND_REQUIRED) + endif (NOT SZIP_FIND_QUIETLY) +endif (NOT SZIP_FOUND) + +if (SZIP_FOUND) + include (CheckSymbolExists) + ############################################# + # Find out if SZIP was build using dll's + ############################################# + # Save required variable + set (CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) + set (CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) + # Add SZIP_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES + set (CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${SZIP_INCLUDE_DIRS}") + + # Restore CMAKE_REQUIRED_INCLUDES and CMAKE_REQUIRED_FLAGS variables + set (CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) + set (CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) + # + ############################################# +endif (SZIP_FOUND) + +if (FIND_SZIP_DEBUG) + message (STATUS "SZIP_INCLUDE_DIR: ${SZIP_INCLUDE_DIR}") + message (STATUS "SZIP_INCLUDE_DIRS: ${SZIP_INCLUDE_DIRS}") + message (STATUS "SZIP_LIBRARY_DEBUG: ${SZIP_LIBRARY_DEBUG}") + message (STATUS "SZIP_LIBRARY_RELEASE: ${SZIP_LIBRARY_RELEASE}") + message (STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") +endif (FIND_SZIP_DEBUG) diff --git a/config/cmake_ext_mod/GetTimeOfDayTest.cpp b/config/cmake_ext_mod/GetTimeOfDayTest.cpp new file mode 100644 index 0000000000..3b5bf6092a --- /dev/null +++ b/config/cmake_ext_mod/GetTimeOfDayTest.cpp @@ -0,0 +1,15 @@ +#if defined (TRY_SYS_TIME_H) +#include +/* #include */ +#endif + + +#if defined (TRY_TIME_H) +#include +#endif + +int main(int argc, char **argv) { + struct timeval t1; + gettimeofday(&t1, 0x00); + return 0; +} diff --git a/config/cmake_ext_mod/HDFCXXTests.cpp b/config/cmake_ext_mod/HDFCXXTests.cpp new file mode 100644 index 0000000000..6b4742191f --- /dev/null +++ b/config/cmake_ext_mod/HDFCXXTests.cpp @@ -0,0 +1,56 @@ + +#ifdef OLD_HEADER_FILENAME + +#include + +int main(void) { return 0; } + +#endif + + +#ifdef HDF_NO_NAMESPACE + +namespace HDF { +int fnord; +} + +int main(void) { + using namespace HDF; + fnord = 37; + return 0; +} + +#endif + +#ifdef HDF_NO_STD + +#include + +using namespace std; + +int main(void) { + string myString("testing namespace std"); + return 0; +} + +#endif + +#ifdef BOOL_NOTDEFINED +int main(void) { + bool flag; + return 0; +} + +#endif + +#ifdef NO_STATIC_CAST + +int main(void) { + float test_float; + int test_int; + test_float = 37.0; + test_int = static_cast (test_float); + return 0; +} + +#endif diff --git a/config/cmake_ext_mod/HDFLibMacros.cmake b/config/cmake_ext_mod/HDFLibMacros.cmake new file mode 100644 index 0000000000..7660a8ad61 --- /dev/null +++ b/config/cmake_ext_mod/HDFLibMacros.cmake @@ -0,0 +1,270 @@ +#------------------------------------------------------------------------------- +MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic) + # May need to build JPEG with PIC on x64 machines with gcc + # Need to use CMAKE_ANSI_CFLAGS define so that compiler test works + + if (${compress_type} MATCHES "SVN") + EXTERNALPROJECT_ADD (JPEG + SVN_REPOSITORY ${JPEG_URL} + # [SVN_REVISION rev] + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic} + ) + elseif (${compress_type} MATCHES "GIT") + EXTERNALPROJECT_ADD (JPEG + GIT_REPOSITORY ${JPEG_URL} + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic} + ) + elseif (${compress_type} MATCHES "TGZ") + EXTERNALPROJECT_ADD (JPEG + URL ${JPEG_URL} + URL_MD5 "" + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic} + ) + endif (${compress_type} MATCHES "SVN") + externalproject_get_property (JPEG BINARY_DIR SOURCE_DIR) + +##include (${BINARY_DIR}/${JPEG_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake) +# Create imported target jpeg-static + add_library(jpeg-static STATIC IMPORTED) +# Create imported target jpeg-shared + add_library(jpeg-shared SHARED IMPORTED) + if (BUILD_SHARED_LIBS) + HDF_IMPORT_SET_LIB_OPTIONS (jpeg-shared "jpeg" SHARED "") + add_dependencies (JPEG jpeg-shared) + set (JPEG_SHARED_LIBRARY "jpeg-shared") + set (JPEG_LIBRARIES ${JPEG_shared_LIBRARY}) + endif (BUILD_SHARED_LIBS) + HDF_IMPORT_SET_LIB_OPTIONS (jpeg-static "jpeg" STATIC "") + add_dependencies (JPEG jpeg-static) + set (JPEG_STATIC_LIBRARY "jpeg-static") + set (JPEG_LIBRARIES ${JPEG_static_LIBRARY}) + + set (JPEG_INCLUDE_DIR_GEN "${BINARY_DIR}") + set (JPEG_INCLUDE_DIR "${SOURCE_DIR}/src") + set (JPEG_FOUND 1) + set (JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIR_GEN} ${JPEG_INCLUDE_DIR}) +ENDMACRO (EXTERNAL_JPEG_LIBRARY) + +#------------------------------------------------------------------------------- +MACRO (PACKAGE_JPEG_LIBRARY compress_type) + add_custom_target (JPEG-GenHeader-Copy ALL + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${JPEG_INCLUDE_DIR_GEN}/jconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ + COMMENT "Copying ${JPEG_INCLUDE_DIR_GEN}/jconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" + ) + set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jconfig.h) + if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ") + add_dependencies (JPEG-GenHeader-Copy JPEG) + endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ") +ENDMACRO (PACKAGE_JPEG_LIBRARY) + +#------------------------------------------------------------------------------- +MACRO (EXTERNAL_SZIP_LIBRARY compress_type encoding) + if (${compress_type} MATCHES "SVN") + EXTERNALPROJECT_ADD (SZIP + SVN_REPOSITORY ${SZIP_URL} + # [SVN_REVISION rev] + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS} + -DSZIP_ENABLE_ENCODING:BOOL=${encoding} + ) + elseif (${compress_type} MATCHES "GIT") + EXTERNALPROJECT_ADD (SZIP + GIT_REPOSITORY ${SZIP_URL} + # [SVN_REVISION rev] + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS} + -DSZIP_ENABLE_ENCODING:BOOL=${encoding} + ) + elseif (${compress_type} MATCHES "TGZ") + EXTERNALPROJECT_ADD (SZIP + URL ${SZIP_URL} + URL_MD5 "" + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS} + -DSZIP_ENABLE_ENCODING:BOOL=${encoding} + ) + endif (${compress_type} MATCHES "SVN") + externalproject_get_property (SZIP BINARY_DIR SOURCE_DIR) + +##include (${BINARY_DIR}/${SZIP_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake) +# Create imported target szip-static + add_library(szip-static STATIC IMPORTED) +# Create imported target szip-shared + add_library(szip-shared SHARED IMPORTED) + if (BUILD_SHARED_LIBS) + HDF_IMPORT_SET_LIB_OPTIONS (szip-shared "szip" SHARED "") + add_dependencies (SZIP szip-shared) + set (SZIP_SHARED_LIBRARY "szip-shared") + set (SZIP_LIBRARIES ${SZIP_shared_LIBRARY}) + endif (BUILD_SHARED_LIBS) + HDF_IMPORT_SET_LIB_OPTIONS (szip-static "szip" STATIC "") + add_dependencies (SZIP szip-static) + set (SZIP_STATIC_LIBRARY "szip-static") + set (SZIP_LIBRARIES ${SZIP_static_LIBRARY}) + + set (SZIP_INCLUDE_DIR_GEN "${BINARY_DIR}") + set (SZIP_INCLUDE_DIR "${SOURCE_DIR}/src") + set (SZIP_FOUND 1) + set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIR_GEN} ${SZIP_INCLUDE_DIR}) +ENDMACRO (EXTERNAL_SZIP_LIBRARY) + +#------------------------------------------------------------------------------- +MACRO (PACKAGE_SZIP_LIBRARY compress_type) + add_custom_target (SZIP-GenHeader-Copy ALL + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ + COMMENT "Copying ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" + ) + set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/SZconfig.h) + if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ") + add_dependencies (SZIP-GenHeader-Copy SZIP) + endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ") +ENDMACRO (PACKAGE_SZIP_LIBRARY) + +#------------------------------------------------------------------------------- +MACRO (EXTERNAL_ZLIB_LIBRARY compress_type) + if (${compress_type} MATCHES "SVN") + EXTERNALPROJECT_ADD (ZLIB + SVN_REPOSITORY ${ZLIB_URL} + # [SVN_REVISION rev] + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS} + ) + elseif (${compress_type} MATCHES "GIT") + EXTERNALPROJECT_ADD (ZLIB + GIT_REPOSITORY ${ZLIB_URL} + # [SVN_REVISION rev] + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS} + ) + elseif (${compress_type} MATCHES "TGZ") + EXTERNALPROJECT_ADD (ZLIB + URL ${ZLIB_URL} + URL_MD5 "" + INSTALL_COMMAND "" + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} + -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} + -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} + -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS} + ) + endif (${compress_type} MATCHES "SVN") + externalproject_get_property (ZLIB BINARY_DIR SOURCE_DIR) + + if (WIN32) + set (ZLIB_LIB_NAME "zlib") + else (WIN32) + set (ZLIB_LIB_NAME "z") + endif (WIN32) +##include (${BINARY_DIR}/${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake) +# Create imported target zlib-static + add_library(zlib-static STATIC IMPORTED) +# Create imported target zlib-shared + add_library(zlib-shared SHARED IMPORTED) + if (BUILD_SHARED_LIBS) + HDF_IMPORT_SET_LIB_OPTIONS (zlib-shared ${ZLIB_LIB_NAME} SHARED "") + add_dependencies (ZLIB zlib-shared) + set (ZLIB_SHARED_LIBRARY "zlib-shared") + set (ZLIB_LIBRARIES ${ZLIB_SHARED_LIBRARY}) + endif (BUILD_SHARED_LIBS) + HDF_IMPORT_SET_LIB_OPTIONS (zlib-static ${ZLIB_LIB_NAME} STATIC "") + add_dependencies (ZLIB zlib-static) + set (ZLIB_STATIC_LIBRARY "zlib-static") + set (ZLIB_LIBRARIES ${ZLIB_static_LIBRARY}) + + set (ZLIB_INCLUDE_DIR_GEN "${BINARY_DIR}") + set (ZLIB_INCLUDE_DIR "${SOURCE_DIR}") + set (ZLIB_FOUND 1) + set (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR_GEN} ${ZLIB_INCLUDE_DIR}) +ENDMACRO (EXTERNAL_ZLIB_LIBRARY) + +#------------------------------------------------------------------------------- +MACRO (PACKAGE_ZLIB_LIBRARY compress_type) + add_custom_target (ZLIB-GenHeader-Copy ALL + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ZLIB_INCLUDE_DIR_GEN}/zconf.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ + COMMENT "Copying ${ZLIB_INCLUDE_DIR_GEN}/zconf.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" + ) + set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/zconf.h) + if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ") + add_dependencies (ZLIB-GenHeader-Copy ZLIB) + endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ") +ENDMACRO (PACKAGE_ZLIB_LIBRARY) diff --git a/config/cmake_ext_mod/HDFMacros.cmake b/config/cmake_ext_mod/HDFMacros.cmake new file mode 100644 index 0000000000..d3ac36b77a --- /dev/null +++ b/config/cmake_ext_mod/HDFMacros.cmake @@ -0,0 +1,277 @@ +#------------------------------------------------------------------------------- +macro (SET_GLOBAL_VARIABLE name value) + set (${name} ${value} CACHE INTERNAL "Used to pass variables between directories" FORCE) +endmacro (SET_GLOBAL_VARIABLE) + +#------------------------------------------------------------------------------- +macro (IDE_GENERATED_PROPERTIES SOURCE_PATH HEADERS SOURCES) + #set(source_group_path "Source/AIM/${NAME}") + string (REPLACE "/" "\\\\" source_group_path ${SOURCE_PATH}) + source_group (${source_group_path} FILES ${HEADERS} ${SOURCES}) + + #-- The following is needed if we ever start to use OS X Frameworks but only + #-- works on CMake 2.6 and greater + #set_property (SOURCE ${HEADERS} + # PROPERTY MACOSX_PACKAGE_LOCATION Headers/${NAME} + #) +endmacro (IDE_GENERATED_PROPERTIES) + +#------------------------------------------------------------------------------- +macro (IDE_SOURCE_PROPERTIES SOURCE_PATH HEADERS SOURCES) + # install (FILES ${HEADERS} + # DESTINATION include/R3D/${NAME} + # COMPONENT Headers + # ) + + string (REPLACE "/" "\\\\" source_group_path ${SOURCE_PATH} ) + source_group (${source_group_path} FILES ${HEADERS} ${SOURCES}) + + #-- The following is needed if we ever start to use OS X Frameworks but only + #-- works on CMake 2.6 and greater + #set_property (SOURCE ${HEADERS} + # PROPERTY MACOSX_PACKAGE_LOCATION Headers/${NAME} + #) +endmacro (IDE_SOURCE_PROPERTIES) + +#------------------------------------------------------------------------------- +macro (TARGET_NAMING libtarget libtype) + if (${libtype} MATCHES "SHARED") + set_target_properties (${libtarget} PROPERTIES OUTPUT_NAME "${libtarget}${ARGN}") + endif (${libtype} MATCHES "SHARED") +endmacro (TARGET_NAMING) + +#------------------------------------------------------------------------------- +macro (INSTALL_TARGET_PDB libtarget targetdestination targetcomponent) + if (WIN32 AND MSVC) + get_target_property (target_name ${libtarget} OUTPUT_NAME_RELWITHDEBINFO) + install ( + FILES + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${target_name}.pdb + DESTINATION + ${targetdestination} + CONFIGURATIONS RelWithDebInfo + COMPONENT ${targetcomponent} + ) + endif (WIN32 AND MSVC) +endmacro (INSTALL_TARGET_PDB) + +#------------------------------------------------------------------------------- +macro (INSTALL_PROGRAM_PDB progtarget targetdestination targetcomponent) + if (WIN32 AND MSVC) + get_target_property (target_name ${progtarget} OUTPUT_NAME_RELWITHDEBINFO) + get_target_property (target_prefix ${progtarget} PREFIX) + install ( + FILES + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${target_prefix}${target_name}.pdb + DESTINATION + ${targetdestination} + CONFIGURATIONS RelWithDebInfo + COMPONENT ${targetcomponent} + ) + endif (WIN32 AND MSVC) +endmacro (INSTALL_PROGRAM_PDB) + +#------------------------------------------------------------------------------- +macro (HDF_SET_LIB_OPTIONS libtarget libname libtype) + if (${libtype} MATCHES "SHARED") + if (WIN32) + set (LIB_RELEASE_NAME "${libname}") + set (LIB_DEBUG_NAME "${libname}_D") + else (WIN32) + set (LIB_RELEASE_NAME "${libname}") + set (LIB_DEBUG_NAME "${libname}_debug") + endif (WIN32) + else (${libtype} MATCHES "SHARED") + if (WIN32) + set (LIB_RELEASE_NAME "lib${libname}") + set (LIB_DEBUG_NAME "lib${libname}_D") + else (WIN32) + set (LIB_RELEASE_NAME "${libname}") + set (LIB_DEBUG_NAME "${libname}_debug") + endif (WIN32) + endif (${libtype} MATCHES "SHARED") + + set_target_properties (${libtarget} + PROPERTIES + OUTPUT_NAME_DEBUG ${LIB_DEBUG_NAME} + OUTPUT_NAME_RELEASE ${LIB_RELEASE_NAME} + OUTPUT_NAME_MINSIZEREL ${LIB_RELEASE_NAME} + OUTPUT_NAME_RELWITHDEBINFO ${LIB_RELEASE_NAME} + ) + + #----- Use MSVC Naming conventions for Shared Libraries + if (MINGW AND ${libtype} MATCHES "SHARED") + set_target_properties (${libtarget} + PROPERTIES + IMPORT_SUFFIX ".lib" + IMPORT_PREFIX "" + PREFIX "" + ) + endif (MINGW AND ${libtype} MATCHES "SHARED") + +endmacro (HDF_SET_LIB_OPTIONS) + +#------------------------------------------------------------------------------- +macro (HDF_IMPORT_SET_LIB_OPTIONS libtarget libname libtype libversion) + HDF_SET_LIB_OPTIONS (${libtarget} ${libname} ${libtype}) + + if (${importtype} MATCHES "IMPORT") + set (importprefix "${CMAKE_STATIC_LIBRARY_PREFIX}") + endif (${importtype} MATCHES "IMPORT") + if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (IMPORT_LIB_NAME ${LIB_DEBUG_NAME}) + else (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (IMPORT_LIB_NAME ${LIB_RELEASE_NAME}) + endif (${CMAKE_BUILD_TYPE} MATCHES "Debug") + + if (${libtype} MATCHES "SHARED") + if (WIN32) + if (MINGW) + set_target_properties (${libtarget} PROPERTIES + IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}.lib" + IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + else (MINGW) + set_target_properties (${libtarget} PROPERTIES + IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}" + IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + endif (MINGW) + else (WIN32) + if (CYGWIN) + set_target_properties (${libtarget} PROPERTIES + IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}" + IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + else (CYGWIN) + set_target_properties (${libtarget} PROPERTIES + IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" + IMPORTED_SONAME "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${libversion}" + SOVERSION "${libversion}" + ) + endif (CYGWIN) + endif (WIN32) + else (${libtype} MATCHES "SHARED") + if (WIN32 AND NOT MINGW) + set_target_properties (${libtarget} PROPERTIES + IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${IMPORT_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + ) + else (WIN32 AND NOT MINGW) + set_target_properties (${libtarget} PROPERTIES + IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_STATIC_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + ) + endif (WIN32 AND NOT MINGW) + endif (${libtype} MATCHES "SHARED") + +endmacro (HDF_IMPORT_SET_LIB_OPTIONS) + +#------------------------------------------------------------------------------- +macro (TARGET_C_PROPERTIES wintarget libtype addcompileflags addlinkflags) + if (MSVC) + TARGET_MSVC_PROPERTIES (${wintarget} ${libtype} "${addcompileflags} ${WIN_COMPILE_FLAGS}" "${addlinkflags} ${WIN_LINK_FLAGS}") + else (MSVC) + set_target_properties (${wintarget} + PROPERTIES + COMPILE_FLAGS "${addcompileflags}" + LINK_FLAGS "${addlinkflags}" + ) + endif (MSVC) +endmacro (TARGET_C_PROPERTIES) + +#------------------------------------------------------------------------------- +macro (TARGET_MSVC_PROPERTIES wintarget libtype addcompileflags addlinkflags) + if (MSVC) + set_target_properties (${wintarget} + PROPERTIES + COMPILE_FLAGS "${addcompileflags}" + LINK_FLAGS "${addlinkflags}" + ) + endif (MSVC) +endmacro (TARGET_MSVC_PROPERTIES) + +#------------------------------------------------------------------------------- +macro (TARGET_FORTRAN_PROPERTIES forttarget libtype addcompileflags addlinkflags) + if (WIN32) + TARGET_FORTRAN_WIN_PROPERTIES (${forttarget} ${libtype} "${addcompileflags} ${WIN_COMPILE_FLAGS}" "${addlinkflags} ${WIN_LINK_FLAGS}") + endif (WIN32) +endmacro (TARGET_FORTRAN_PROPERTIES) + +#------------------------------------------------------------------------------- +macro (TARGET_FORTRAN_WIN_PROPERTIES forttarget libtype addcompileflags addlinkflags) + if (MSVC) + if (${libtype} MATCHES "SHARED") + set_target_properties (${forttarget} + PROPERTIES + COMPILE_FLAGS "/dll ${addcompileflags}" + LINK_FLAGS "/SUBSYSTEM:CONSOLE ${addlinkflags}" + ) + else (${libtype} MATCHES "SHARED") + set_target_properties (${forttarget} + PROPERTIES + COMPILE_FLAGS "${addcompileflags}" + LINK_FLAGS "/SUBSYSTEM:CONSOLE ${addlinkflags}" + ) + endif (${libtype} MATCHES "SHARED") + endif (MSVC) +endmacro (TARGET_FORTRAN_WIN_PROPERTIES) + +#----------------------------------------------------------------------------- +# Configure the README.txt file for the binary package +#----------------------------------------------------------------------------- +macro (HDF_README_PROPERTIES target_fortran) + set (BINARY_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + set (BINARY_PLATFORM "${CMAKE_SYSTEM_NAME}") + if (WIN32) + set (BINARY_EXAMPLE_ENDING "zip") + set (BINARY_INSTALL_ENDING "msi") + if (CMAKE_CL_64) + set (BINARY_SYSTEM_NAME "win64") + else (CMAKE_CL_64) + set (BINARY_SYSTEM_NAME "win32") + endif (CMAKE_CL_64) + if (${CMAKE_SYSTEM_VERSION} MATCHES "6.1") + set (BINARY_PLATFORM "${BINARY_PLATFORM} 7") + elseif (${CMAKE_SYSTEM_VERSION} MATCHES "6.2") + set (BINARY_PLATFORM "${BINARY_PLATFORM} 8") + endif (${CMAKE_SYSTEM_VERSION} MATCHES "6.1") + set (BINARY_PLATFORM "${BINARY_PLATFORM} ${MSVC_C_ARCHITECTURE_ID}") + if (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2010") + elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "15.*") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2008") + elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "17.*") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2012") + elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "18.*") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2013") + else (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO ${CMAKE_C_COMPILER_VERSION}") + endif (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*") + elseif (APPLE) + set (BINARY_EXAMPLE_ENDING "tar.gz") + set (BINARY_INSTALL_ENDING "dmg") + set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}") + else (WIN32) + set (BINARY_EXAMPLE_ENDING "tar.gz") + set (BINARY_INSTALL_ENDING "sh") + set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}") + set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}") + endif (WIN32) + + if (target_fortran) + set (BINARY_PLATFORM "${BINARY_PLATFORM} / ${CMAKE_Fortran_COMPILER_ID} Fortran") + endif (target_fortran) + + if (BUILD_SHARED_LIBS) + set (LIB_TYPE "Static and Shared") + else (BUILD_SHARED_LIBS) + set (LIB_TYPE "Static") + endif (BUILD_SHARED_LIBS) + + configure_file ( + ${HDF_RESOURCES_DIR}/README.txt.cmake.in + ${CMAKE_BINARY_DIR}/README.txt @ONLY + ) +endmacro (HDF_README_PROPERTIES) diff --git a/config/cmake_ext_mod/HDFTests.c b/config/cmake_ext_mod/HDFTests.c new file mode 100644 index 0000000000..1c23ac37b2 --- /dev/null +++ b/config/cmake_ext_mod/HDFTests.c @@ -0,0 +1,466 @@ +#define SIMPLE_TEST(x) int main(){ x; return 0; } + +#ifdef HAVE_C99_DESIGNATED_INITIALIZER + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus +extern "C" +# endif +int FC_DUMMY_MAIN() +{ return 1;} +#endif +#endif +int +main () +{ + + typedef struct + { + int x; + union + { + int i; + double d; + }u; + }di_struct_t; + di_struct_t x = + { 0, + { .d = 0.0}}; + ; + return 0; +} + +#endif + +#ifdef HAVE_C99_FUNC + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + const char *fname = __func__; + ; + return 0; +} + +#endif + +#ifdef VSNPRINTF_WORKS +#include +#include +#include + +int test_vsnprintf(const char *fmt,...) +{ + va_list ap; + char *s = malloc(16); + int ret; + + va_start(ap, fmt); + ret=vsnprintf(s,16,"%s",ap); + va_end(ap); + + return(ret!=42 ? 1 : 0); +} + +int main(void) +{ + return(test_vsnprintf("%s","A string that is longer than 16 characters")); +} +#endif + + +#ifdef TIME_WITH_SYS_TIME +/* Time with sys/time test */ + +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} + +#endif + +#ifdef STDC_HEADERS +#include +#include +#include +#include +int main() { return 0; } +#endif /* STDC_HEADERS */ + + +#ifdef HAVE_ATTRIBUTE + +#if 0 +static void test int __attribute((unused)) var) +{ + int __attribute__((unused)) x = var; +} + +int main(void) +{ + test(19); +} + +#else +int +main () +{ +int __attribute__((unused)) x + ; + return 0; +} +#endif + + +#endif /* HAVE_ATTRIBUTE */ + +#ifdef HAVE_FUNCTION + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ +(void)__FUNCTION__ + ; + return 0; +} + +#endif /* HAVE_FUNCTION */ + +#ifdef HAVE_TM_GMTOFF + +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +SIMPLE_TEST(struct tm tm; tm.tm_gmtoff=0); + +#endif /* HAVE_TM_GMTOFF */ + +#ifdef HAVE___TM_GMTOFF + +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +SIMPLE_TEST(struct tm tm; tm.__tm_gmtoff=0); + +#endif /* HAVE_TM_GMTOFF */ + +#ifdef HAVE_TIMEZONE + +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +SIMPLE_TEST(timezone=0); + +#endif /* HAVE_TIMEZONE */ + +#ifdef HAVE_STRUCT_TIMEZONE + +#include +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +SIMPLE_TEST(struct timezone tz; tz.tz_minuteswest=0); + +#endif /* HAVE_STRUCT_TIMEZONE */ + +#ifdef HAVE_STAT_ST_BLOCKS + +#include +SIMPLE_TEST(struct stat sb; sb.st_blocks=0); + +#endif /* HAVE_STAT_ST_BLOCKS */ + +#ifdef PRINTF_LL_WIDTH + +#ifdef HAVE_LONG_LONG +# define LL_TYPE long long +#else /* HAVE_LONG_LONG */ +# define LL_TYPE __int64 +#endif /* HAVE_LONG_LONG */ + +#include +#include +#include + +int main(void) +{ + char *llwidthArgs[] = { "l64", "l", "L", "q", "ll", NULL }; + char *s = malloc(128); + char **currentArg = NULL; + LL_TYPE x = (LL_TYPE)1048576 * (LL_TYPE)1048576; + for (currentArg = llwidthArgs; *currentArg != NULL; currentArg++) + { + char formatString[64]; + sprintf(formatString, "%%%sd", *currentArg); + sprintf(s, formatString, x); + if (strcmp(s, "1099511627776") == 0) + { + printf("PRINTF_LL_WIDTH=[%s]\n", *currentArg); + return 0; + } + } + return 1; +} + +#endif /* PRINTF_LL_WIDTH */ + +#ifdef SYSTEM_SCOPE_THREADS +#include +#include + +int main(void) +{ + pthread_attr_t attribute; + int ret; + + pthread_attr_init(&attribute); + ret=pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM); + if (ret==0) + return 0; + return 1; +} + +#endif /* SYSTEM_SCOPE_THREADS */ + +#ifdef HAVE_SOCKLEN_T + +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +SIMPLE_TEST(socklen_t foo); + +#endif /* HAVE_SOCKLEN_T */ + +#ifdef DEV_T_IS_SCALAR + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +int main () +{ + dev_t d1, d2; + if(d1==d2) + return 0; + return 1; +} + +#endif /* DEV_T_IS_SCALAR */ + +#ifdef HAVE_OFF64_T +#include +int main() +{ + off64_t n = 0; + return (int)n; +} +#endif + +#ifdef HAVE_STAT64_STRUCT +#include +#include ], +struct stat64 sb; +int main() +{ + return 0; +} +#endif + +#ifdef TEST_DIRECT_VFD_WORKS +#include +#include +#include +int main(void) +{ + int fid; + if((fid=open("tst_file", O_CREAT | O_TRUNC | O_DIRECT, 0755))<0) + return 1; + close(fid); + remove("tst_file"); + return 0; +} +#endif + +#ifdef HAVE_DIRECT + SIMPLE_TEST(posix_memalign()); +#endif + +#ifdef HAVE_DEFAULT_SOURCE +/* check default source */ +#include + +int +main(void) +{ +#ifdef __GLIBC_PREREQ + return __GLIBC_PREREQ(2,19); +#else + return 0; +#endif /* defined(__GLIBC_PREREQ) */ +} +#endif + +#ifdef TEST_LFS_WORKS +/* Return 0 when LFS is available and 1 otherwise. */ +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#define _LARGE_FILES +#define _FILE_OFFSET_BITS 64 +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + /* check that off_t can hold 2^63 - 1 and perform basic operations... */ +#define OFF_T_64 (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + if (OFF_T_64 % 2147483647 != 1) + return 1; + + /* stat breaks on SCO OpenServer */ + struct stat buf; + stat( argv[0], &buf ); + if (!S_ISREG(buf.st_mode)) + return 2; + + FILE *file = fopen( argv[0], "r" ); + off_t offset = ftello( file ); + fseek( file, offset, SEEK_CUR ); + fclose( file ); + return 0; +} +#endif + +#ifdef GETTIMEOFDAY_GIVES_TZ +#include +#ifdef HAVE_SYS_TIME_H +#include +#endif +int main(void) +{ + struct timeval tv; + struct timezone tz; + tz.tz_minuteswest = 7777; /* Initialize to an unreasonable number */ + tz.tz_dsttime = 7; + gettimeofday(&tv, &tz); + /* Check whether the function returned any value at all */ + if(tz.tz_minuteswest == 7777 && tz.tz_dsttime == 7) + return 1; + else return 0; +} +#endif + +#ifdef CXX_HAVE_OFFSETOF + +#include +#include + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus +extern "C" +# endif +int FC_DUMMY_MAIN() +{ return 1;} +#endif +#endif +int +main () +{ + + struct index_st + { + unsigned char type; + unsigned char num; + unsigned int len; + }; + typedef struct index_st index_t; + int x,y; + x = offsetof(struct index_st, len); + y = offsetof(index_t, num) + + ; + return 0; +} + +#endif + +#ifdef HAVE_IOEO + +#include +typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); +int main () +{ + PGNSI pGNSI; + pGNSI = (PGNSI) GetProcAddress( + GetModuleHandle(TEXT("kernel32.dll")), + "InitOnceExecuteOnce"); + if(NULL == pGNSI) + return 1; + else + return 0; +} + +#endif /* HAVE_IOEO */ + +#ifdef HAVE_STRUCT_VIDEOCONFIG + +SIMPLE_TEST(struct videoconfig w; w.numtextcols=0); + +#endif /* HAVE_TM_GMTOFF */ + +#ifdef HAVE_STRUCT_TEXT_INFO + +SIMPLE_TEST(struct text_info w; w.screenwidth=0); + +#endif /* HAVE_TM_GMTOFF */ + + +#if defined( INLINE_TEST_inline ) || defined( INLINE_TEST___inline__ ) || defined( INLINE_TEST___inline ) +#ifndef __cplusplus +typedef int foo_t; +static INLINE_TEST_INLINE foo_t static_foo () { return 0; } +INLINE_TEST_INLINE foo_t foo () {return 0; } +int main() { return 0; } +#endif + +#endif /* INLINE_TEST */ diff --git a/config/cmake_ext_mod/HDFUseFortran.cmake b/config/cmake_ext_mod/HDFUseFortran.cmake new file mode 100644 index 0000000000..c1df8cf9f7 --- /dev/null +++ b/config/cmake_ext_mod/HDFUseFortran.cmake @@ -0,0 +1,180 @@ +# +# This file provides functions for Fortran support. +# +#------------------------------------------------------------------------------- +ENABLE_LANGUAGE (Fortran) + +#----------------------------------------------------------------------------- +# Detect name mangling convention used between Fortran and C +#----------------------------------------------------------------------------- +include (FortranCInterface) +FortranCInterface_HEADER ( + ${CMAKE_BINARY_DIR}/FCMangle.h + MACRO_NAMESPACE "H5_FC_" + SYMBOL_NAMESPACE "H5_FC_" + SYMBOLS mysub mymod:my_sub +) + +file (STRINGS ${CMAKE_BINARY_DIR}/FCMangle.h CONTENTS REGEX "H5_FC_GLOBAL\\(.*,.*\\) +(.*)") +string (REGEX MATCH "H5_FC_GLOBAL\\(.*,.*\\) +(.*)" RESULT ${CONTENTS}) +set (H5_FC_FUNC "H5_FC_FUNC(name,NAME) ${CMAKE_MATCH_1}") + +file (STRINGS ${CMAKE_BINARY_DIR}/FCMangle.h CONTENTS REGEX "H5_FC_GLOBAL_\\(.*,.*\\) +(.*)") +string (REGEX MATCH "H5_FC_GLOBAL_\\(.*,.*\\) +(.*)" RESULT ${CONTENTS}) +set (H5_FC_FUNC_ "H5_FC_FUNC_(name,NAME) ${CMAKE_MATCH_1}") + +#----------------------------------------------------------------------------- +# The provided CMake Fortran macros don't provide a general check function +# so this one is used for a sizeof test. +#----------------------------------------------------------------------------- +MACRO (CHECK_FORTRAN_FEATURE FUNCTION CODE VARIABLE) + message (STATUS "Testing Fortran ${FUNCTION}") + if (CMAKE_REQUIRED_LIBRARIES) + set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + else (CMAKE_REQUIRED_LIBRARIES) + set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) + endif (CMAKE_REQUIRED_LIBRARIES) + file (WRITE + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f90 + "${CODE}" + ) + TRY_COMPILE (RESULT_VAR + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f90 + CMAKE_FLAGS "${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT + ) + +# message ( "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ") +# message ( "Test result ${OUTPUT}") +# message ( "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ") + + if (${RESULT_VAR}) + set (${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}") + message (STATUS "Testing Fortran ${FUNCTION} - OK") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the Fortran ${FUNCTION} exists passed with the following output:\n" + "${OUTPUT}\n\n" + ) + else () + message (STATUS "Testing Fortran ${FUNCTION} - Fail") + set (${VARIABLE} 0 CACHE INTERNAL "Have Fortran function ${FUNCTION}") + file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the Fortran ${FUNCTION} exists failed with the following output:\n" + "${OUTPUT}\n\n") + endif () + +ENDMACRO (CHECK_FORTRAN_FEATURE) + +#----------------------------------------------------------------------------- +# Configure Checks which require Fortran compilation must go in here +# not in the main ConfigureChecks.cmake files, because if the user has +# no Fortran compiler, problems arise. +# +# Be careful with leading spaces here, do not remove them. +#----------------------------------------------------------------------------- + +# Check for Non-standard extension intrinsic function SIZEOF +set(FORTRAN_HAVE_SIZEOF FALSE) +CHECK_FORTRAN_FEATURE(sizeof + " + PROGRAM main + i = sizeof(x) + END PROGRAM + " + FORTRAN_HAVE_SIZEOF +) + +# Check for F2008 standard intrinsic function C_SIZEOF +set(FORTRAN_HAVE_C_SIZEOF FALSE) +CHECK_FORTRAN_FEATURE(c_sizeof + " + PROGRAM main + USE ISO_C_BINDING + INTEGER(C_INT) :: a + INTEGER(C_SIZE_T) :: result + result = c_sizeof(a) + END PROGRAM + " + FORTRAN_HAVE_C_SIZEOF +) + +# Check for F2008 standard intrinsic function STORAGE_SIZE +CHECK_FORTRAN_FEATURE(storage_size + " + PROGRAM main + INTEGER :: a + INTEGER :: result + result = storage_size(a) + END PROGRAM + " + FORTRAN_HAVE_STORAGE_SIZE +) + +# Check for F2008 standard intrinsic module "ISO_FORTRAN_ENV" +set(HAVE_ISO_FORTRAN_ENV FALSE) +CHECK_FORTRAN_FEATURE(ISO_FORTRAN_ENV + " + PROGRAM main + USE, INTRINSIC :: ISO_FORTRAN_ENV + END PROGRAM + " + HAVE_ISO_FORTRAN_ENV +) + +set(FORTRAN_DEFAULT_REAL_NOT_DOUBLE FALSE) +CHECK_FORTRAN_FEATURE(RealIsNotDouble + " + MODULE type_mod + INTERFACE h5t + MODULE PROCEDURE h5t_real + MODULE PROCEDURE h5t_dble + END INTERFACE + CONTAINS + SUBROUTINE h5t_real(r) + REAL :: r + END SUBROUTINE h5t_real + SUBROUTINE h5t_dble(d) + DOUBLE PRECISION :: d + END SUBROUTINE h5t_dble + END MODULE type_mod + PROGRAM main + USE type_mod + REAL :: r + DOUBLE PRECISION :: d + CALL h5t(r) + CALL h5t(d) + END PROGRAM main + " + FORTRAN_DEFAULT_REAL_NOT_DOUBLE +) + +#----------------------------------------------------------------------------- +# Checks if the ISO_C_BINDING module meets all the requirements +#----------------------------------------------------------------------------- +set(FORTRAN_HAVE_ISO_C_BINDING FALSE) +CHECK_FORTRAN_FEATURE(iso_c_binding + " + PROGRAM main + USE iso_c_binding + IMPLICIT NONE + TYPE(C_PTR) :: ptr + TYPE(C_FUNPTR) :: funptr + INTEGER(C_INT64_T) :: c_int64_type + CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr + ptr = C_LOC(ichr(1:1)) + END PROGRAM + " + FORTRAN_HAVE_ISO_C_BINDING +) + +#----------------------------------------------------------------------------- +# Add debug information (intel Fortran : JB) +#----------------------------------------------------------------------------- +if (CMAKE_Fortran_COMPILER MATCHES ifort) + if (WIN32) + set (CMAKE_Fortran_FLAGS_DEBUG "/debug:full /dbglibs " CACHE "flags" STRING FORCE) + set (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE "flags" STRING FORCE) + endif (WIN32) +endif (CMAKE_Fortran_COMPILER MATCHES ifort) diff --git a/config/cmake_ext_mod/NSIS.InstallOptions.ini.in b/config/cmake_ext_mod/NSIS.InstallOptions.ini.in new file mode 100644 index 0000000000..9954f28a5a --- /dev/null +++ b/config/cmake_ext_mod/NSIS.InstallOptions.ini.in @@ -0,0 +1,37 @@ +[Settings] +NumFields=5 + +[Field 1] +Type=label +Text=By default the @CPACK_PACKAGE_NAME@ bin directory is added to the system PATH. This allows shared library (dll) discovery (if installed) and running HDF5 tools from the command line. +Left=0 +Right=-1 +Top=0 +Bottom=20 + +[Field 2] +Type=radiobutton +Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH +Left=0 +Right=-1 +Top=30 +Bottom=40 +State=0 + +[Field 3] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users +Left=0 +Right=-1 +Top=40 +Bottom=50 +State=1 + +[Field 4] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user +Left=0 +Right=-1 +Top=50 +Bottom=60 +State=0 diff --git a/config/cmake_ext_mod/NSIS.template.in b/config/cmake_ext_mod/NSIS.template.in new file mode 100644 index 0000000000..ecced05b28 --- /dev/null +++ b/config/cmake_ext_mod/NSIS.template.in @@ -0,0 +1,974 @@ +; CPack install script designed for a nmake build + +;-------------------------------- +; You must define these values + + !define VERSION "@CPACK_PACKAGE_VERSION@" + !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" + !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + +;-------------------------------- +;Variables + + Var MUI_TEMP + Var STARTMENU_FOLDER + Var SV_ALLUSERS + Var START_MENU + Var DO_NOT_ADD_TO_PATH + Var ADD_TO_PATH_ALL_USERS + Var ADD_TO_PATH_CURRENT_USER + Var INSTALL_DESKTOP + Var IS_DEFAULT_INSTALLDIR +;-------------------------------- +;Include Modern UI + + !include "MUI.nsh" + + ;Default installation folder + InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +;-------------------------------- +;General + + ;Name and file + Name "@CPACK_NSIS_PACKAGE_NAME@" + OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" + + ;Set compression + SetCompressor @CPACK_NSIS_COMPRESSOR@ + +@CPACK_NSIS_DEFINES@ + + !include Sections.nsh + +;--- Component support macros: --- +; The code for the add/remove functionality is from: +; http://nsis.sourceforge.net/Add/Remove_Functionality +; It has been modified slightly and extended to provide +; inter-component dependencies. +Var AR_SecFlags +Var AR_RegFlags +@CPACK_NSIS_SECTION_SELECTED_VARS@ + +; Loads the "selected" flag for the section named SecName into the +; variable VarName. +!macro LoadSectionSelectedIntoVar SecName VarName + SectionGetFlags ${${SecName}} $${VarName} + IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits +!macroend + +; Loads the value of a variable... can we get around this? +!macro LoadVar VarName + IntOp $R0 0 + $${VarName} +!macroend + +; Sets the value of a variable +!macro StoreVar VarName IntValue + IntOp $${VarName} 0 + ${IntValue} +!macroend + +!macro InitSection SecName + ; This macro reads component installed flag from the registry and + ;changes checked state of the section on the components page. + ;Input: section index constant name specified in Section command. + + ClearErrors + ;Reading component status from registry + ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" + IfErrors "default_${SecName}" + ;Status will stay default if registry value not found + ;(component was never installed) + IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags + IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off + IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit + + ; Note whether this component was installed before + !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags + IntOp $R0 $AR_RegFlags & $AR_RegFlags + + ;Writing modified flags + SectionSetFlags ${${SecName}} $AR_SecFlags + + "default_${SecName}:" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +!macroend + +!macro FinishSection SecName + ; This macro reads section flag set by user and removes the section + ;if it is not selected. + ;Then it writes component installed flag to registry + ;Input: section index constant name specified in Section command. + + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags + ;Checking lowest bit: + IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} + IntCmp $AR_SecFlags 1 "leave_${SecName}" + ;Section is not selected: + ;Calling Section uninstall macro and writing zero installed flag + !insertmacro "Remove_${${SecName}}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 0 + Goto "exit_${SecName}" + + "leave_${SecName}:" + ;Section is selected: + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 1 + + "exit_${SecName}:" +!macroend + +!macro RemoveSection_CPack SecName + ; This macro is used to call section's Remove_... macro + ;from the uninstaller. + ;Input: section index constant name specified in Section command. + + !insertmacro "Remove_${${SecName}}" +!macroend + +; Determine whether the selection of SecName changed +!macro MaybeSelectionChanged SecName + !insertmacro LoadVar ${SecName}_selected + SectionGetFlags ${${SecName}} $R1 + IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits + + ; See if the status has changed: + IntCmp $R0 $R1 "${SecName}_unchanged" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected + + IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" + !insertmacro "Deselect_required_by_${SecName}" + goto "${SecName}_unchanged" + + "${SecName}_was_selected:" + !insertmacro "Select_${SecName}_depends" + + "${SecName}_unchanged:" +!macroend +;--- End of Add/Remove macros --- + +;-------------------------------- +;Interface Settings + + !define MUI_HEADERIMAGE + !define MUI_ABORTWARNING + +;-------------------------------- +; path functions + +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 + +;---------------------------------------- +; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" +;---------------------------------------- +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 +;==================================================== +; get_NT_environment +; Returns: the selected environment +; Output : head of the stack +;==================================================== +!macro select_NT_profile UN +Function ${UN}select_NT_profile + StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single + DetailPrint "Selected environment for all users" + Push "all" + Return + environment_single: + DetailPrint "Selected environment for current user only." + Push "current" + Return +FunctionEnd +!macroend +!insertmacro select_NT_profile "" +!insertmacro select_NT_profile "un." +;---------------------------------------------------- +!define NT_current_env 'HKCU "Environment"' +!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + +!ifndef WriteEnvStr_RegKey + !ifdef ALL_USERS + !define WriteEnvStr_RegKey \ + 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + !else + !define WriteEnvStr_RegKey 'HKCU "Environment"' + !endif +!endif + +; AddToPath - Adds the given dir to the search path. +; Input - head of the stack +; Note - Win9x systems requires reboot + +Function AddToPath + Exch $0 + Push $1 + Push $2 + Push $3 + + # don't add if the path doesn't exist + IfFileExists "$0\*.*" "" AddToPath_done + + ReadEnvStr $1 PATH + ; if the path is too long for a NSIS variable NSIS will return a 0 + ; length string. If we find that, then warn and skip any path + ; modification as it will trash the existing path. + StrLen $2 $1 + IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done + CheckPathLength_ShowPathWarning: + Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" + Goto AddToPath_done + CheckPathLength_Done: + Push "$1;" + Push "$0;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$0\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + GetFullPathName /SHORT $3 $0 + Push "$1;" + Push "$3;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$3\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + + Call IsNT + Pop $1 + StrCmp $1 1 AddToPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" a + FileSeek $1 -1 END + FileReadByte $1 $2 + IntCmp $2 26 0 +2 +2 # DOS EOF + FileSeek $1 -1 END # write over EOF + FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" + FileClose $1 + SetRebootFlag true + Goto AddToPath_done + + AddToPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto DoTrim + ReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + DoTrim: + StrCmp $1 "" AddToPath_NTdoIt + Push $1 + Call Trim + Pop $1 + StrCpy $0 "$1;$0" + AddToPath_NTdoIt: + StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $0 + Goto DoSend + WriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $0 + DoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + AddToPath_done: + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + + +; RemoveFromPath - Remove a given dir from the path +; Input: head of the stack + +Function un.RemoveFromPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + + IntFmt $6 "%c" 26 # DOS EOF + + Call un.IsNT + Pop $1 + StrCmp $1 1 unRemoveFromPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" r + GetTempFileName $4 + FileOpen $2 $4 w + GetFullPathName /SHORT $0 $0 + StrCpy $0 "SET PATH=%PATH%;$0" + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoop: + FileRead $1 $3 + StrCpy $5 $3 1 -1 # read last char + StrCmp $5 $6 0 +2 # if DOS EOF + StrCpy $3 $3 -1 # remove DOS EOF so we can compare + StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "" unRemoveFromPath_dosLoopEnd + FileWrite $2 $3 + Goto unRemoveFromPath_dosLoop + unRemoveFromPath_dosLoopRemoveLine: + SetRebootFlag true + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoopEnd: + FileClose $2 + FileClose $1 + StrCpy $1 $WINDIR 2 + Delete "$1\autoexec.bat" + CopyFiles /SILENT $4 "$1\autoexec.bat" + Delete $4 + Goto unRemoveFromPath_done + + unRemoveFromPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto unDoTrim + unReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + unDoTrim: + StrCpy $5 $1 1 -1 # copy last char + StrCmp $5 ";" +2 # if last char != ; + StrCpy $1 "$1;" # append ; + Push $1 + Push "$0;" + Call un.StrStr ; Find `$0;` in $1 + Pop $2 ; pos of our dir + StrCmp $2 "" unRemoveFromPath_done + ; else, it is in path + # $0 - path to add + # $1 - path var + StrLen $3 "$0;" + StrLen $4 $2 + StrCpy $5 $1 -$4 # $5 is now the part before the path to remove + StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove + StrCpy $3 $5$6 + + StrCpy $5 $3 1 -1 # copy last char + StrCmp $5 ";" 0 +2 # if last char == ; + StrCpy $3 $3 -1 # remove last char + + StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $3 + Goto unDoSend + unWriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $3 + unDoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + unRemoveFromPath_done: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Uninstall sutff +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +########################################### +# Utility Functions # +########################################### + +;==================================================== +; IsNT - Returns 1 if the current system is NT, 0 +; otherwise. +; Output: head of the stack +;==================================================== +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +; Call IsNT +; Pop $R0 +; ($R0 at this point is 1 or 0) + +!macro IsNT un +Function ${un}IsNT + Push $0 + ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + StrCmp $0 "" 0 IsNT_yes + ; we are not NT. + Pop $0 + Push 0 + Return + + IsNT_yes: + ; NT!!! + Pop $0 + Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +!insertmacro IsNT "un." + +; StrStr +; input, top of stack = string to search for +; top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +; Push "this is a long ass string" +; Push "ass" +; Call StrStr +; Pop $R0 +; ($R0 at this point is "ass string") + +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle + Exch ; st=old$R1,haystack + Exch $R2 ; st=old$R1,old$R2, $R2=haystack + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=needle + ; $R2=haystack + ; $R3=len(needle) + ; $R4=cnt + ; $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + +Function Trim ; Added by Pelaca + Exch $R1 + Push $R2 +Loop: + StrCpy $R2 "$R1" 1 -1 + StrCmp "$R2" " " RTrim + StrCmp "$R2" "$\n" RTrim + StrCmp "$R2" "$\r" RTrim + StrCmp "$R2" ";" RTrim + GoTo Done +RTrim: + StrCpy $R1 "$R1" -1 + Goto Loop +Done: + Pop $R2 + Exch $R1 +FunctionEnd + +Function ConditionalAddToRegisty + Pop $0 + Pop $1 + StrCmp "$0" "" ConditionalAddToRegisty_EmptyString + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ + "$1" "$0" + ;MessageBox MB_OK "Set Registry: '$1' to '$0'" + DetailPrint "Set install registry entry: '$1' to '$0'" + ConditionalAddToRegisty_EmptyString: +FunctionEnd + +;-------------------------------- + +!ifdef CPACK_USES_DOWNLOAD +Function DownloadFile + IfFileExists $INSTDIR\* +2 + CreateDirectory $INSTDIR + Pop $0 + + ; Skip if already downloaded + IfFileExists $INSTDIR\$0 0 +2 + Return + + StrCpy $1 "@CPACK_DOWNLOAD_SITE@" + + try_again: + NSISdl::download "$1/$0" "$INSTDIR\$0" + + Pop $1 + StrCmp $1 "success" success + StrCmp $1 "Cancelled" cancel + MessageBox MB_OK "Download failed: $1" + cancel: + Return + success: +FunctionEnd +!endif + +;-------------------------------- +; Installation types +@CPACK_NSIS_INSTALLATION_TYPES@ + +;-------------------------------- +; Component sections +@CPACK_NSIS_COMPONENT_SECTIONS@ + +;-------------------------------- +; Define some macro setting for the gui +@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ +@CPACK_NSIS_INSTALLER_ICON_CODE@ +@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ +@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ + +;-------------------------------- +;Pages + !insertmacro MUI_PAGE_WELCOME + + !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" + Page custom InstallOptionsPage + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + @CPACK_NSIS_PAGE_COMPONENTS@ + + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" ;first language is the default language + !insertmacro MUI_LANGUAGE "Albanian" + !insertmacro MUI_LANGUAGE "Arabic" + !insertmacro MUI_LANGUAGE "Basque" + !insertmacro MUI_LANGUAGE "Belarusian" + !insertmacro MUI_LANGUAGE "Bosnian" + !insertmacro MUI_LANGUAGE "Breton" + !insertmacro MUI_LANGUAGE "Bulgarian" + !insertmacro MUI_LANGUAGE "Croatian" + !insertmacro MUI_LANGUAGE "Czech" + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Estonian" + !insertmacro MUI_LANGUAGE "Farsi" + !insertmacro MUI_LANGUAGE "Finnish" + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Greek" + !insertmacro MUI_LANGUAGE "Hebrew" + !insertmacro MUI_LANGUAGE "Hungarian" + !insertmacro MUI_LANGUAGE "Icelandic" + !insertmacro MUI_LANGUAGE "Indonesian" + !insertmacro MUI_LANGUAGE "Irish" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Japanese" + !insertmacro MUI_LANGUAGE "Korean" + !insertmacro MUI_LANGUAGE "Kurdish" + !insertmacro MUI_LANGUAGE "Latvian" + !insertmacro MUI_LANGUAGE "Lithuanian" + !insertmacro MUI_LANGUAGE "Luxembourgish" + !insertmacro MUI_LANGUAGE "Macedonian" + !insertmacro MUI_LANGUAGE "Malay" + !insertmacro MUI_LANGUAGE "Mongolian" + !insertmacro MUI_LANGUAGE "Norwegian" + !insertmacro MUI_LANGUAGE "Polish" + !insertmacro MUI_LANGUAGE "Portuguese" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !insertmacro MUI_LANGUAGE "Romanian" + !insertmacro MUI_LANGUAGE "Russian" + !insertmacro MUI_LANGUAGE "Serbian" + !insertmacro MUI_LANGUAGE "SerbianLatin" + !insertmacro MUI_LANGUAGE "SimpChinese" + !insertmacro MUI_LANGUAGE "Slovak" + !insertmacro MUI_LANGUAGE "Slovenian" + !insertmacro MUI_LANGUAGE "Spanish" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro MUI_LANGUAGE "Thai" + !insertmacro MUI_LANGUAGE "TradChinese" + !insertmacro MUI_LANGUAGE "Turkish" + !insertmacro MUI_LANGUAGE "Ukrainian" + !insertmacro MUI_LANGUAGE "Welsh" + + +;-------------------------------- +;Reserve Files + + ;These files should be inserted before other files in the data block + ;Keep these lines before any File command + ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) + + ReserveFile "NSIS.InstallOptions.ini" + !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Sections + +Section "-Core installation" + ;Use the entire tree produced by the INSTALL target. Keep the + ;list of directories here in sync with the RMDir commands below. + SetOutPath "$INSTDIR" + @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ + @CPACK_NSIS_FULL_INSTALL@ + + ;Store installation folder + WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + Push "DisplayName" + Push "@CPACK_NSIS_DISPLAY_NAME@" + Call ConditionalAddToRegisty + Push "DisplayVersion" + Push "@CPACK_PACKAGE_VERSION@" + Call ConditionalAddToRegisty + Push "Publisher" + Push "@CPACK_PACKAGE_VENDOR@" + Call ConditionalAddToRegisty + Push "UninstallString" + Push "$INSTDIR\Uninstall.exe" + Call ConditionalAddToRegisty + Push "NoRepair" + Push "1" + Call ConditionalAddToRegisty + + !ifdef CPACK_NSIS_ADD_REMOVE + ;Create add/remove functionality + Push "ModifyPath" + Push "$INSTDIR\AddRemove.exe" + Call ConditionalAddToRegisty + !else + Push "NoModify" + Push "1" + Call ConditionalAddToRegisty + !endif + + ; Optional registration + Push "DisplayIcon" + Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" + Call ConditionalAddToRegisty + Push "HelpLink" + Push "@CPACK_NSIS_HELP_LINK@" + Call ConditionalAddToRegisty + Push "URLInfoAbout" + Push "@CPACK_NSIS_URL_INFO_ABOUT@" + Call ConditionalAddToRegisty + Push "Contact" + Push "@CPACK_NSIS_CONTACT@" + Call ConditionalAddToRegisty + !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" +@CPACK_NSIS_CREATE_ICONS@ +@CPACK_NSIS_CREATE_ICONS_EXTRA@ + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + ;Read a value from an InstallOptions INI file + !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" + + ; Write special uninstall registry entries + Push "StartMenu" + Push "$STARTMENU_FOLDER" + Call ConditionalAddToRegisty + Push "DoNotAddToPath" + Push "$DO_NOT_ADD_TO_PATH" + Call ConditionalAddToRegisty + Push "AddToPathAllUsers" + Push "$ADD_TO_PATH_ALL_USERS" + Call ConditionalAddToRegisty + Push "AddToPathCurrentUser" + Push "$ADD_TO_PATH_CURRENT_USER" + Call ConditionalAddToRegisty + Push "InstallToDesktop" + Push "$INSTALL_DESKTOP" + Call ConditionalAddToRegisty + + !insertmacro MUI_STARTMENU_WRITE_END + +@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + +SectionEnd + +Section "-Add to path" + Push $INSTDIR\bin + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath + StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 + Call AddToPath + doNotAddToPath: +SectionEnd + +;-------------------------------- +; Create custom pages +Function InstallOptionsPage + !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" + +FunctionEnd + +;-------------------------------- +; determine admin versus local install +Function un.onInit + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + Goto done + StrCmp $1 "Power" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + Goto done + + noLM: + ;Get installation folder from registry if available + + done: + +FunctionEnd + +;--- Add/Remove callback functions: --- +!macro SectionList MacroName + ;This macro used to perform operation on multiple sections. + ;List all of your components in following manner here. +@CPACK_NSIS_COMPONENT_SECTION_LIST@ +!macroend + +Section -FinishComponents + ;Removes unselected components and writes component status to registry + !insertmacro SectionList "FinishSection" + +!ifdef CPACK_NSIS_ADD_REMOVE + ; Get the name of the installer executable + System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' + StrCpy $R3 $R0 + + ; Strip off the last 13 characters, to see if we have AddRemove.exe + StrLen $R1 $R0 + IntOp $R1 $R0 - 13 + StrCpy $R2 $R0 13 $R1 + StrCmp $R2 "AddRemove.exe" addremove_installed + + ; We're not running AddRemove.exe, so install it + CopyFiles $R3 $INSTDIR\AddRemove.exe + + addremove_installed: +!endif +SectionEnd +;--- End of Add/Remove callback functions --- + +;-------------------------------- +; Component dependencies +Function .onSelChange + !insertmacro SectionList MaybeSelectionChanged +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + ReadRegStr $START_MENU SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" + ;MessageBox MB_OK "Start menu is in: $START_MENU" + ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" + ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" + ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" + ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" + ReadRegStr $INSTALL_DESKTOP SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" + ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " + +@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ + + ;Remove files we installed. + ;Keep the list of directories here in sync with the File commands above. +@CPACK_NSIS_DELETE_FILES@ +@CPACK_NSIS_DELETE_DIRECTORIES@ + +!ifdef CPACK_NSIS_ADD_REMOVE + ;Remove the add/remove program + Delete "$INSTDIR\AddRemove.exe" +!endif + + ;Remove the uninstaller itself. + Delete "$INSTDIR\Uninstall.exe" + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ;Remove the installation directory if it is empty. + RMDir "$INSTDIR" + + ; Remove the registry entries. + DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ; Removes all optional components + !insertmacro SectionList "RemoveSection_CPack" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS@ +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + startMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors startMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + ; If the user changed the shortcut, then untinstall may not work. This should + ; try to fix it. + StrCpy $MUI_TEMP "$START_MENU" + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + secondStartMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors secondStartMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop + secondStartMenuDeleteLoopDone: + + DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + Push $INSTDIR\bin + StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 + Call un.RemoveFromPath + doNotRemoveFromPath: +SectionEnd + +;-------------------------------- +; determine admin versus local install +; Is install for "AllUsers" or "JustMe"? +; Default to "JustMe" - set to "AllUsers" if admin or on Win9x +; This function is used for the very first "custom page" of the installer. +; This custom page does not show up visibly, but it executes prior to the +; first visible page and sets up $INSTDIR properly... +; Choose different default installation folder based on SV_ALLUSERS... +; "Program Files" for AllUsers, "My Documents" for JustMe... + +Function .onInit + StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst + + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" + StrCmp $0 "" inst + + MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ + "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ + IDYES uninst IDNO inst + Abort + +;Run the uninstaller +uninst: + ClearErrors + StrLen $2 "\Uninstall.exe" + StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path + ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file + + IfErrors uninst_failed inst +uninst_failed: + MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." + Abort + + +inst: + ; Reads components status for registry + !insertmacro SectionList "InitSection" + + ; check to see if /D has been used to change + ; the install directory by comparing it to the + ; install directory that is expected to be the + ; default + StrCpy $IS_DEFAULT_INSTALLDIR 0 + StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 + StrCpy $IS_DEFAULT_INSTALLDIR 1 + + StrCpy $SV_ALLUSERS "JustMe" + ; if default install dir then change the default + ; if it is installed for JustMe + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + StrCmp $1 "Power" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + + noLM: + StrCpy $SV_ALLUSERS "AllUsers" + ;Get installation folder from registry if available + + done: + StrCmp $SV_ALLUSERS "AllUsers" 0 +3 + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" + + noOptionsPage: +FunctionEnd diff --git a/config/cmake_ext_mod/grepTest.cmake b/config/cmake_ext_mod/grepTest.cmake new file mode 100644 index 0000000000..5f071344d1 --- /dev/null +++ b/config/cmake_ext_mod/grepTest.cmake @@ -0,0 +1,64 @@ +# grepTest.cmake executes a command and captures the output in a file. File is then compared +# against a reference file. Exit status of command can also be compared. + +# arguments checking +if (NOT TEST_PROGRAM) + message (FATAL_ERROR "Require TEST_PROGRAM to be defined") +endif (NOT TEST_PROGRAM) +#if (NOT TEST_ARGS) +# message (STATUS "Require TEST_ARGS to be defined") +#endif (NOT TEST_ARGS) +if (NOT TEST_FOLDER) + message ( FATAL_ERROR "Require TEST_FOLDER to be defined") +endif (NOT TEST_FOLDER) +if (NOT TEST_OUTPUT) + message (FATAL_ERROR "Require TEST_OUTPUT to be defined") +endif (NOT TEST_OUTPUT) +#if (NOT TEST_EXPECT) +# message (STATUS "Require TEST_EXPECT to be defined") +#endif (NOT TEST_EXPECT) +if (NOT TEST_FILTER) + message (STATUS "Require TEST_FILTER to be defined") +endif (NOT TEST_FILTER) +if (NOT TEST_REFERENCE) + message (FATAL_ERROR "Require TEST_REFERENCE to be defined") +endif (NOT TEST_REFERENCE) + +message (STATUS "COMMAND: ${TEST_PROGRAM} ${TEST_ARGS}") + +# run the test program, capture the stdout/stderr and the result var +execute_process ( + COMMAND ${TEST_PROGRAM} ${TEST_ARGS} + WORKING_DIRECTORY ${TEST_FOLDER} + RESULT_VARIABLE TEST_RESULT + OUTPUT_FILE ${TEST_OUTPUT} + ERROR_FILE ${TEST_OUTPUT}.err + OUTPUT_VARIABLE TEST_ERROR + ERROR_VARIABLE TEST_ERROR +) + +message (STATUS "COMMAND Result: ${TEST_RESULT}") +message (STATUS "COMMAND Error: ${TEST_ERROR}") + +# now grep the output with the reference +file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + +# TEST_REFERENCE should always be matched +string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) +string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_RESULT) +if (${TEST_RESULT} STREQUAL "0") + message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") +endif (${TEST_RESULT} STREQUAL "0") + +string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) +if (${TEST_EXPECT} STREQUAL "1") + # TEST_EXPECT (1) interperts TEST_FILTER as NOT to match + string (LENGTH "${TEST_MATCH}" TEST_RESULT) + if (NOT ${TEST_RESULT} STREQUAL "0") + message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}") + endif (NOT ${TEST_RESULT} STREQUAL "0") +endif (${TEST_EXPECT} STREQUAL "1") + +# everything went fine... +message ("Passed: The output of ${TEST_PROGRAM} matched") + diff --git a/config/cmake_ext_mod/hdf.bmp b/config/cmake_ext_mod/hdf.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9e9e4aa4b420d2536d640909be9fc0e6207d4d02 GIT binary patch literal 1254 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 BJ-& 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

S2@9nY_38?HUdIEA2H5 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%0AoO$zi}jk6xl;xZ#wn* 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[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

^hAg( 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 F{{jdk9{K

#DZu{W^Cf(qEXg5W_#MT+Hs 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 literal 0 HcmV?d00001 diff --git a/config/cmake_ext_mod/prunTest.cmake b/config/cmake_ext_mod/prunTest.cmake new file mode 100644 index 0000000000..3d5ec31c50 --- /dev/null +++ b/config/cmake_ext_mod/prunTest.cmake @@ -0,0 +1,145 @@ +# runTest.cmake executes a command and captures the output in a file. File is then compared +# against a reference file. Exit status of command can also be compared. +cmake_policy(SET CMP0007 NEW) + +# arguments checking +if (NOT TEST_PROGRAM) + message (FATAL_ERROR "Require TEST_PROGRAM to be defined") +endif (NOT TEST_PROGRAM) +#if (NOT TEST_ARGS) +# message (STATUS "Require TEST_ARGS to be defined") +#endif (NOT TEST_ARGS) +if (NOT TEST_FOLDER) + message ( FATAL_ERROR "Require TEST_FOLDER to be defined") +endif (NOT TEST_FOLDER) +if (NOT TEST_OUTPUT) + message (FATAL_ERROR "Require TEST_OUTPUT to be defined") +endif (NOT TEST_OUTPUT) +#if (NOT TEST_EXPECT) +# message (STATUS "Require TEST_EXPECT to be defined") +#endif (NOT TEST_EXPECT) +#if (NOT TEST_FILTER) +# message (STATUS "Require TEST_FILTER to be defined") +#endif (NOT TEST_FILTER) +if (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE) + message (FATAL_ERROR "Require TEST_REFERENCE to be defined") +endif (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE) + +set (ERROR_APPEND 1) + +message (STATUS "COMMAND: ${TEST_PROGRAM} ${TEST_ARGS}") + +if (TEST_ENV_VAR) + set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") +endif (TEST_ENV_VAR) + +# run the test program, capture the stdout/stderr and the result var +EXECUTE_PROCESS ( + COMMAND ${TEST_PROGRAM} ${TEST_ARGS} + WORKING_DIRECTORY ${TEST_FOLDER} + RESULT_VARIABLE TEST_RESULT + OUTPUT_FILE ${TEST_OUTPUT} + ERROR_FILE ${TEST_OUTPUT}.err + OUTPUT_VARIABLE TEST_ERROR + ERROR_VARIABLE TEST_ERROR +) + +message (STATUS "COMMAND Result: ${TEST_RESULT}") + +file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) +file (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}") + +if (ERROR_APPEND) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) + file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (ERROR_APPEND) + +if (TEST_APPEND) + file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_ERROR}\n") +endif (TEST_APPEND) + +message (STATUS "COMMAND Error: ${TEST_ERROR}") + +if (TEST_MASK) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "Storage:[^\n]+\n" "Storage:

\n" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_MASK) + +if (TEST_MASK_MOD) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "Modified:[^\n]+\n" "Modified: XXXX-XX-XX XX:XX:XX XXX\n" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_MASK_MOD) + +if (TEST_MASK_ERROR) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "H5Eget_auto[1-2]*" "H5Eget_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "H5Eset_auto[1-2]*" "H5Eset_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_MASK_ERROR) + +if (TEST_FILTER) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "${TEST_FILTER}" "" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_FILTER) + +#if (TEST_REF_FILTER) +# message (STATUS "TEST_REF_FILTER: ${TEST_APPEND}${TEST_REF_FILTER}") +# file (READ ${TEST_FOLDER}/P_${TEST_REFERENCE} TEST_STREAM) +# STRING(REGEX REPLACE "${TEST_APPEND}" "${TEST_REF_FILTER}" TEST_STREAM "${TEST_STREAM}") +# file (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}") +#endif (TEST_REF_FILTER) + +if (NOT TEST_SKIP_COMPARE) + if (WIN32 AND NOT MINGW) + file (READ ${TEST_FOLDER}/P_${TEST_REFERENCE} TEST_STREAM) + file (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}") + endif (WIN32 AND NOT MINGW) + + # now compare the output with the reference + EXECUTE_PROCESS ( + COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/P_${TEST_REFERENCE} + RESULT_VARIABLE TEST_RESULT + ) + if (NOT ${TEST_RESULT} STREQUAL 0) + set (TEST_RESULT 0) + file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) + LIST (LENGTH test_act len_act) + file (STRINGS ${TEST_FOLDER}/P_${TEST_REFERENCE} test_ref) + LIST (LENGTH test_ref len_ref) + if (NOT ${len_act} STREQUAL "0") + MATH (EXPR _FP_LEN "${len_ref} - 1") + foreach (line RANGE 0 ${_FP_LEN}) + LIST (GET test_act ${line} str_act) + LIST (GET test_ref ${line} str_ref) + if (NOT "${str_act}" STREQUAL "${str_ref}") + if (NOT "${str_act}" STREQUAL "") + set (TEST_RESULT 1) + message ("line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") + endif (NOT "${str_act}" STREQUAL "") + endif (NOT "${str_act}" STREQUAL "${str_ref}") + endforeach (line RANGE 0 ${_FP_LEN}) + endif (NOT ${len_act} STREQUAL "0") + if (NOT ${len_act} STREQUAL ${len_ref}) + set (TEST_RESULT 1) + endif (NOT ${len_act} STREQUAL ${len_ref}) + endif (NOT ${TEST_RESULT} STREQUAL 0) + + message (STATUS "COMPARE Result: ${TEST_RESULT}") + + # again, if return value is !=0 scream and shout + if (NOT ${TEST_RESULT} STREQUAL 0) + message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match P_${TEST_REFERENCE}") + endif (NOT ${TEST_RESULT} STREQUAL 0) +endif (NOT TEST_SKIP_COMPARE) + +# everything went fine... +message ("Passed: The output of ${TEST_PROGRAM} matches P_${TEST_REFERENCE}") + diff --git a/config/cmake_ext_mod/runTest.cmake b/config/cmake_ext_mod/runTest.cmake new file mode 100644 index 0000000000..bfaae2bb51 --- /dev/null +++ b/config/cmake_ext_mod/runTest.cmake @@ -0,0 +1,207 @@ +# runTest.cmake executes a command and captures the output in a file. File is then compared +# against a reference file. Exit status of command can also be compared. +cmake_policy(SET CMP0007 NEW) + +# arguments checking +if (NOT TEST_PROGRAM) + message (FATAL_ERROR "Require TEST_PROGRAM to be defined") +endif (NOT TEST_PROGRAM) +#if (NOT TEST_ARGS) +# message (STATUS "Require TEST_ARGS to be defined") +#endif (NOT TEST_ARGS) +if (NOT TEST_FOLDER) + message ( FATAL_ERROR "Require TEST_FOLDER to be defined") +endif (NOT TEST_FOLDER) +if (NOT TEST_OUTPUT) + message (FATAL_ERROR "Require TEST_OUTPUT to be defined") +endif (NOT TEST_OUTPUT) +if (NOT TEST_EXPECT) + message (STATUS "Require TEST_EXPECT to be defined") +endif (NOT TEST_EXPECT) +#if (NOT TEST_FILTER) +# message (STATUS "Require TEST_FILTER to be defined") +#endif (NOT TEST_FILTER) +if (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE) + message (FATAL_ERROR "Require TEST_REFERENCE to be defined") +endif (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE) + +if (NOT TEST_ERRREF) + set (ERROR_APPEND 1) +endif (NOT TEST_ERRREF) + +message (STATUS "COMMAND: ${TEST_PROGRAM} ${TEST_ARGS}") + +if (TEST_ENV_VAR) + set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") +endif (TEST_ENV_VAR) + +if (NOT TEST_INPUT) + # run the test program, capture the stdout/stderr and the result var + EXECUTE_PROCESS ( + COMMAND ${TEST_PROGRAM} ${TEST_ARGS} + WORKING_DIRECTORY ${TEST_FOLDER} + RESULT_VARIABLE TEST_RESULT + OUTPUT_FILE ${TEST_OUTPUT} + ERROR_FILE ${TEST_OUTPUT}.err + OUTPUT_VARIABLE TEST_ERROR + ERROR_VARIABLE TEST_ERROR + ) +else (NOT TEST_INPUT) + # run the test program with stdin, capture the stdout/stderr and the result var + EXECUTE_PROCESS ( + COMMAND ${TEST_PROGRAM} ${TEST_ARGS} + WORKING_DIRECTORY ${TEST_FOLDER} + RESULT_VARIABLE TEST_RESULT + INPUT_FILE ${TEST_INPUT} + OUTPUT_FILE ${TEST_OUTPUT} + ERROR_FILE ${TEST_OUTPUT}.err + OUTPUT_VARIABLE TEST_ERROR + ERROR_VARIABLE TEST_ERROR + ) +endif (NOT TEST_INPUT) + +message (STATUS "COMMAND Result: ${TEST_RESULT}") + +if (ERROR_APPEND) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) + file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (ERROR_APPEND) + +if (TEST_APPEND) + file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_RESULT}\n") +endif (TEST_APPEND) + +# if the return value is !=${TEST_EXPECT} bail out +if (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT}) + message ( FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != ${TEST_EXPECT}.\n${TEST_ERROR}") +endif (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT}) + +message (STATUS "COMMAND Error: ${TEST_ERROR}") + +if (TEST_MASK) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "Storage:[^\n]+\n" "Storage:
\n" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_MASK) + +if (TEST_MASK_MOD) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "Modified:[^\n]+\n" "Modified: XXXX-XX-XX XX:XX:XX XXX\n" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_MASK_MOD) + +if (TEST_MASK_ERROR) + if (NOT TEST_ERRREF) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + else (NOT TEST_ERRREF) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) + endif (NOT TEST_ERRREF) + STRING(REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "H5Eget_auto[1-2]*" "H5Eget_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") + STRING(REGEX REPLACE "H5Eset_auto[1-2]*" "H5Eset_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") + if (NOT TEST_ERRREF) + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") + else (NOT TEST_ERRREF) + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err "${TEST_STREAM}") + endif (NOT TEST_ERRREF) +endif (TEST_MASK_ERROR) + +if (TEST_FILTER) + file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) + STRING(REGEX REPLACE "${TEST_FILTER}" "" TEST_STREAM "${TEST_STREAM}") + file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") +endif (TEST_FILTER) + +if (NOT TEST_SKIP_COMPARE) + if (WIN32 AND NOT MINGW) + file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM) + file (WRITE ${TEST_FOLDER}/${TEST_REFERENCE} "${TEST_STREAM}") + endif (WIN32 AND NOT MINGW) + + # now compare the output with the reference + EXECUTE_PROCESS ( + COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/${TEST_REFERENCE} + RESULT_VARIABLE TEST_RESULT + ) + if (NOT ${TEST_RESULT} STREQUAL 0) + set (TEST_RESULT 0) + file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act) + LIST (LENGTH test_act len_act) + file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref) + LIST (LENGTH test_ref len_ref) + if (NOT ${len_act} STREQUAL "0") + MATH (EXPR _FP_LEN "${len_ref} - 1") + foreach (line RANGE 0 ${_FP_LEN}) + LIST (GET test_act ${line} str_act) + LIST (GET test_ref ${line} str_ref) + if (NOT "${str_act}" STREQUAL "${str_ref}") + if (NOT "${str_act}" STREQUAL "") + set (TEST_RESULT 1) + message ("line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") + endif (NOT "${str_act}" STREQUAL "") + endif (NOT "${str_act}" STREQUAL "${str_ref}") + endforeach (line RANGE 0 ${_FP_LEN}) + endif (NOT ${len_act} STREQUAL "0") + if (NOT ${len_act} STREQUAL ${len_ref}) + set (TEST_RESULT 1) + endif (NOT ${len_act} STREQUAL ${len_ref}) + endif (NOT ${TEST_RESULT} STREQUAL 0) + + message (STATUS "COMPARE Result: ${TEST_RESULT}") + + # again, if return value is !=0 scream and shout + if (NOT ${TEST_RESULT} STREQUAL 0) + message (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}") + endif (NOT ${TEST_RESULT} STREQUAL 0) + + if (TEST_ERRREF) + if (WIN32 AND NOT MINGW) + file (READ ${TEST_FOLDER}/${TEST_ERRREF} TEST_STREAM) + file (WRITE ${TEST_FOLDER}/${TEST_ERRREF} "${TEST_STREAM}") + endif (WIN32 AND NOT MINGW) + + # now compare the error output with the error reference + EXECUTE_PROCESS ( + COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_FOLDER}/${TEST_ERRREF} + RESULT_VARIABLE TEST_RESULT + ) + if (NOT ${TEST_RESULT} STREQUAL 0) + set (TEST_RESULT 0) + file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT}.err test_act) + LIST (LENGTH test_act len_act) + file (STRINGS ${TEST_FOLDER}/${TEST_ERRREF} test_ref) + LIST (LENGTH test_ref len_ref) + MATH (EXPR _FP_LEN "${len_ref} - 1") + if (NOT ${len_act} STREQUAL "0") + MATH (EXPR _FP_LEN "${len_ref} - 1") + foreach (line RANGE 0 ${_FP_LEN}) + LIST (GET test_act ${line} str_act) + LIST (GET test_ref ${line} str_ref) + if (NOT "${str_act}" STREQUAL "${str_ref}") + if (NOT "${str_act}" STREQUAL "") + set (TEST_RESULT 1) + message ("line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n") + endif (NOT "${str_act}" STREQUAL "") + endif (NOT "${str_act}" STREQUAL "${str_ref}") + endforeach (line RANGE 0 ${_FP_LEN}) + endif (NOT ${len_act} STREQUAL "0") + if (NOT ${len_act} STREQUAL ${len_ref}) + set (TEST_RESULT 1) + endif (NOT ${len_act} STREQUAL ${len_ref}) + endif (NOT ${TEST_RESULT} STREQUAL 0) + + message (STATUS "COMPARE Result: ${TEST_RESULT}") + + # again, if return value is !=0 scream and shout + if (NOT ${TEST_RESULT} STREQUAL 0) + message (FATAL_ERROR "Failed: The error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}") + endif (NOT ${TEST_RESULT} STREQUAL 0) + endif (TEST_ERRREF) +endif (NOT TEST_SKIP_COMPARE) + +# everything went fine... +message ("Passed: The output of ${TEST_PROGRAM} matches ${TEST_REFERENCE}") diff --git a/config/cmake_ext_mod/version.plist.in b/config/cmake_ext_mod/version.plist.in new file mode 100644 index 0000000000..817d89e42e --- /dev/null +++ b/config/cmake_ext_mod/version.plist.in @@ -0,0 +1,17 @@ + + + + + + BuildVersion + @CPACK_PACKAGE_VERSION_MAJOR@ + CFBundleShortVersionString + @CPACK_APPLE_GUI_SHORT_VERSION_STRING@ + CFBundleVersion + @CPACK_APPLE_GUI_SHORT_VERSION_STRING@ + ProjectName + @CPACK_APPLE_GUI_BUNDLE_NAME@ + SourceVersion + @CPACK_PACKAGE_VERSION_MINOR@ + +