| include(CheckIncludeFiles) |
| include(CheckIncludeFile) |
| include(CheckSymbolExists) |
| include(CheckTypeSize) |
| include(CheckFunctionKeywords) |
| include(CheckLFS) |
| |
| ## Checks for header files ## |
| check_include_file("inttypes.h" HAVE_INTTYPES_H) |
| check_include_file("memory.h" HAVE_MEMORY_H) |
| check_include_file("stddef.h" HAVE_STDDEF_H) |
| check_include_file("stdint.h" HAVE_STDINT_H) |
| check_include_file("stdlib.h" HAVE_STDLIB_H) |
| check_include_file("string.h" HAVE_STRING_H) |
| check_include_file("strings.h" HAVE_STRINGS_H) |
| check_include_file("sys/types.h" HAVE_SYS_TYPES_H) |
| if(HAVE_INTTYPES_H) |
| set(INCFILE "#include <inttypes.h>") |
| elseif(HAVE_STDINT_H) |
| set(INCFILE "#include <stdint.h>") |
| else(HAVE_INTTYPES_H) |
| set(INCFILE "") |
| endif(HAVE_INTTYPES_H) |
| |
| ## create configuration files from .cmake file ## |
| if(BUILD_EXAMPLES) |
| ## Checks for WinIO ## |
| if(WIN32) |
| check_include_file("io.h" HAVE_IO_H) |
| check_include_file("fcntl.h" HAVE_FCNTL_H) |
| check_symbol_exists("_setmode" "io.h;fcntl.h" HAVE__SETMODE) |
| if(NOT HAVE__SETMODE) |
| check_symbol_exists("setmode" "io.h;fcntl.h" HAVE_SETMODE) |
| endif(NOT HAVE__SETMODE) |
| check_symbol_exists("_fileno" "stdio.h" HAVE__FILENO) |
| check_symbol_exists("fopen_s" "stdio.h" HAVE_FOPEN_S) |
| check_symbol_exists("_O_BINARY" "fcntl.h" HAVE__O_BINARY) |
| endif(WIN32) |
| |
| ## Checks for large file support ## |
| check_lfs(WITH_LFS) |
| configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lfs.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/lfs.h" @ONLY) |
| endif(BUILD_EXAMPLES) |
| |
| ## generate config.h ## |
| check_function_keywords("inline;__inline;__inline__;__declspec(dllexport);__declspec(dllimport)") |
| if(HAVE_INLINE) |
| set(INLINE "inline") |
| elseif(HAVE___INLINE) |
| set(INLINE "__inline") |
| elseif(HAVE___INLINE__) |
| set(INLINE "__inline__") |
| else(HAVE_INLINE) |
| set(INLINE "") |
| endif(HAVE_INLINE) |
| configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h") |
| |
| ## Checks for types ## |
| # sauchar_t (8bit) |
| check_type_size("uint8_t" UINT8_T) |
| if(HAVE_UINT8_T) |
| set(SAUCHAR_TYPE "uint8_t") |
| else(HAVE_UINT8_T) |
| check_type_size("unsigned char" SIZEOF_UNSIGNED_CHAR) |
| if("${SIZEOF_UNSIGNED_CHAR}" STREQUAL "1") |
| set(SAUCHAR_TYPE "unsigned char") |
| else("${SIZEOF_UNSIGNED_CHAR}" STREQUAL "1") |
| message(FATAL_ERROR "Cannot find unsigned 8-bit integer type") |
| endif("${SIZEOF_UNSIGNED_CHAR}" STREQUAL "1") |
| endif(HAVE_UINT8_T) |
| # saint_t (32bit) |
| check_type_size("int32_t" INT32_T) |
| if(HAVE_INT32_T) |
| set(SAINT32_TYPE "int32_t") |
| check_symbol_exists("PRId32" "inttypes.h" HAVE_PRID32) |
| if(HAVE_PRID32) |
| set(SAINT32_PRId "PRId32") |
| else(HAVE_PRID32) |
| set(SAINT32_PRId "\"d\"") |
| endif(HAVE_PRID32) |
| else(HAVE_INT32_T) |
| check_type_size("int" SIZEOF_INT) |
| check_type_size("long" SIZEOF_LONG) |
| check_type_size("short" SIZEOF_SHORT) |
| check_type_size("__int32" SIZEOF___INT32) |
| if("${SIZEOF_INT}" STREQUAL "4") |
| set(SAINT32_TYPE "int") |
| set(SAINT32_PRId "\"d\"") |
| elseif("${SIZEOF_LONG}" STREQUAL "4") |
| set(SAINT32_TYPE "long") |
| set(SAINT32_PRId "\"ld\"") |
| elseif("${SIZEOF_SHORT}" STREQUAL "4") |
| set(SAINT32_TYPE "short") |
| set(SAINT32_PRId "\"d\"") |
| elseif("${SIZEOF___INT32}" STREQUAL "4") |
| set(SAINT32_TYPE "__int32") |
| set(SAINT32_PRId "\"d\"") |
| else("${SIZEOF_INT}" STREQUAL "4") |
| message(FATAL_ERROR "Cannot find 32-bit integer type") |
| endif("${SIZEOF_INT}" STREQUAL "4") |
| endif(HAVE_INT32_T) |
| # saint64_t (64bit) |
| if(BUILD_DIVSUFSORT64) |
| check_type_size("int64_t" INT64_T) |
| if(HAVE_INT64_T) |
| set(SAINT64_TYPE "int64_t") |
| check_symbol_exists("PRId64" "inttypes.h" HAVE_PRID64) |
| if(HAVE_PRID64) |
| set(SAINT64_PRId "PRId64") |
| else(HAVE_PRID64) |
| set(SAINT64_PRId "\"lld\"") |
| endif(HAVE_PRID64) |
| else(HAVE_INT64_T) |
| check_type_size("int" SIZEOF_INT) |
| check_type_size("long" SIZEOF_LONG) |
| check_type_size("long long" SIZEOF_LONG_LONG) |
| check_type_size("__int64" SIZEOF___INT64) |
| if("${SIZEOF_INT}" STREQUAL "8") |
| set(SAINT64_TYPE "int") |
| set(SAINT64_PRId "\"d\"") |
| elseif("${SIZEOF_LONG}" STREQUAL "8") |
| set(SAINT64_TYPE "long") |
| set(SAINT64_PRId "\"ld\"") |
| elseif("${SIZEOF_LONG_LONG}" STREQUAL "8") |
| set(SAINT64_TYPE "long long") |
| set(SAINT64_PRId "\"lld\"") |
| elseif("${SIZEOF___INT64}" STREQUAL "8") |
| set(SAINT64_TYPE "__int64") |
| set(SAINT64_PRId "\"I64d\"") |
| else("${SIZEOF_INT}" STREQUAL "8") |
| message(SEND_ERROR "Cannot find 64-bit integer type") |
| set(BUILD_DIVSUFSORT64 OFF) |
| endif("${SIZEOF_INT}" STREQUAL "8") |
| endif(HAVE_INT64_T) |
| endif(BUILD_DIVSUFSORT64) |
| |
| ## generate divsufsort.h ## |
| set(DIVSUFSORT_IMPORT "") |
| set(DIVSUFSORT_EXPORT "") |
| if(BUILD_SHARED_LIBS) |
| if(HAVE___DECLSPEC_DLLIMPORT_) |
| set(DIVSUFSORT_IMPORT "__declspec(dllimport)") |
| endif(HAVE___DECLSPEC_DLLIMPORT_) |
| if(HAVE___DECLSPEC_DLLEXPORT_) |
| set(DIVSUFSORT_EXPORT "__declspec(dllexport)") |
| endif(HAVE___DECLSPEC_DLLEXPORT_) |
| endif(BUILD_SHARED_LIBS) |
| set(W64BIT "") |
| set(SAINDEX_TYPE "${SAINT32_TYPE}") |
| set(SAINDEX_PRId "${SAINT32_PRId}") |
| set(SAINT_PRId "${SAINT32_PRId}") |
| configure_file("${CMAKE_CURRENT_SOURCE_DIR}/divsufsort.h.cmake" |
| "${CMAKE_CURRENT_BINARY_DIR}/divsufsort.h" @ONLY) |
| install(FILES "${CMAKE_CURRENT_BINARY_DIR}/divsufsort.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| if(BUILD_DIVSUFSORT64) |
| set(W64BIT "64") |
| set(SAINDEX_TYPE "${SAINT64_TYPE}") |
| set(SAINDEX_PRId "${SAINT64_PRId}") |
| configure_file("${CMAKE_CURRENT_SOURCE_DIR}/divsufsort.h.cmake" |
| "${CMAKE_CURRENT_BINARY_DIR}/divsufsort64.h" @ONLY) |
| install(FILES "${CMAKE_CURRENT_BINARY_DIR}/divsufsort64.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| endif(BUILD_DIVSUFSORT64) |