diff options
-rw-r--r-- | Source/kwsys/CMakeLists.txt | 84 |
1 files changed, 34 insertions, 50 deletions
diff --git a/Source/kwsys/CMakeLists.txt b/Source/kwsys/CMakeLists.txt index d6bc472..77c7030 100644 --- a/Source/kwsys/CMakeLists.txt +++ b/Source/kwsys/CMakeLists.txt @@ -254,56 +254,20 @@ IF(UNIX) ENDIF(UNIX) IF(KWSYS_USE_FundamentalType) - # Load fundamental type information generated by the below try-run. - IF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - # The file already exists. Load it now. - INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - ELSE(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - # The file does not exist. Try to generate it. All the type - # information can be detected by a single try-run because the - # available types can be determined at compile time. This - # significantly reduces the number of try-compiles and try-runs needed - # to collect this information. - MESSAGE(STATUS "Checking C++ fundamental types") - - # Pass the output directory in KWSYS_CXX_TYPE_INFO_DIR as a cache - # entry to work-around some CMake parsing problems when there are - # spaces in the path (for CMake 2.2.1 and lower). Do not quote - # the definition for VS 7 or 8 to work-around a CMake 2.2.1 and - # lower generator bug. - SET(DOLLAR "$") - IF(CMAKE_GENERATOR MATCHES "Visual Studio [78]") - SET(QUOTE "") - ELSE(CMAKE_GENERATOR MATCHES "Visual Studio [78]") - SET(QUOTE "\"") - ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio [78]") - TRY_RUN(KWSYS_CXX_TYPE_INFO KWSYS_CXX_TYPE_INFO_COMPILED - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/kwsysPlatformCxxTests.cxx - CMAKE_FLAGS - "-DKWSYS_CXX_TYPE_INFO_DIR:STRING=${CMAKE_CURRENT_BINARY_DIR}" - COMPILE_DEFINITIONS - -DTEST_KWSYS_CXX_TYPE_INFO - "-DKWSYS_CXX_TYPE_INFO_FILE=${QUOTE}${DOLLAR}{KWSYS_CXX_TYPE_INFO_DIR}/FundamentalTypeInfo.cmake${QUOTE}" - OUTPUT_VARIABLE OUTPUT - ) - - # Check if the file now exists. - IF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - # The file exists. Report success and load it. - MESSAGE(STATUS "Checking C++ fundamental types -- success") - FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeOutput.log - "Checking C++ fundamental types compiled with the following output:\n${OUTPUT}\n\n") - INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - ELSE(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - # The file does not exist. Report failure. - MESSAGE(STATUS "Checking C++ fundamental types -- failure") - FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeError.log - "Checking C++ fundamental types failed to compile with the following output:\n${OUTPUT}\n\n") - MESSAGE(FATAL_ERROR "Checking C++ fundamental type information failed. " - "Check \"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeError.log\" for more information.") - ENDIF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) - ENDIF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/FundamentalTypeInfo.cmake) + # Determine type sizes. + INCLUDE(CheckTypeSize) + CHECK_TYPE_SIZE("char" KWSYS_SIZEOF_CHAR) + CHECK_TYPE_SIZE("short" KWSYS_SIZEOF_SHORT) + CHECK_TYPE_SIZE("int" KWSYS_SIZEOF_INT) + CHECK_TYPE_SIZE("long" KWSYS_SIZEOF_LONG) + CHECK_TYPE_SIZE("long long" KWSYS_SIZEOF_LONG_LONG) + CHECK_TYPE_SIZE("__int64" KWSYS_SIZEOF___INT64) + IF(NOT KWSYS_SIZEOF_LONG_LONG) + SET(KWSYS_SIZEOF_LONG_LONG 0) + ENDIF(NOT KWSYS_SIZEOF_LONG_LONG) + IF(NOT KWSYS_SIZEOF___INT64) + SET(KWSYS_SIZEOF___INT64 0) + ENDIF(NOT KWSYS_SIZEOF___INT64) # Check uniqueness of types. IF(KWSYS_SIZEOF___INT64) @@ -339,6 +303,26 @@ IF(KWSYS_USE_FundamentalType) ELSE(KWSYS_USE___INT64) SET(KWSYS_CAN_CONVERT_UI64_TO_DOUBLE 1) ENDIF(KWSYS_USE___INT64) + + # Check signedness of "char" type. + IF("KWSYS_CHAR_IS_SIGNED" MATCHES "^KWSYS_CHAR_IS_SIGNED$") + MESSAGE(STATUS "Checking signedness of char") + TRY_RUN(KWSYS_CHAR_IS_SIGNED KWSYS_CHAR_IS_SIGNED_COMPILED + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/kwsysPlatformCxxTests.cxx + COMPILE_DEFINITIONS -DTEST_KWSYS_CHAR_IS_SIGNED) + IF(KWSYS_CHAR_IS_SIGNED_COMPILED) + IF(KWSYS_CHAR_IS_SIGNED) + MESSAGE(STATUS "Checking signedness of char -- signed") + SET(KWSYS_CHAR_IS_SIGNED 1 CACHE INTERNAL "Whether char is signed.") + ELSE(KWSYS_CHAR_IS_SIGNED) + MESSAGE(STATUS "Checking signedness of char -- unsigned") + SET(KWSYS_CHAR_IS_SIGNED 0 CACHE INTERNAL "Whether char is signed.") + ENDIF(KWSYS_CHAR_IS_SIGNED) + ELSE(KWSYS_CHAR_IS_SIGNED_COMPILED) + MESSAGE(FATAL_ERROR "Checking signedness of char -- failed") + ENDIF(KWSYS_CHAR_IS_SIGNED_COMPILED) + ENDIF("KWSYS_CHAR_IS_SIGNED" MATCHES "^KWSYS_CHAR_IS_SIGNED$") ENDIF(KWSYS_USE_FundamentalType) IF(KWSYS_NAMESPACE MATCHES "^kwsys$") |