blob: 85c94e1b94a9f6137419b8123888c74f011390f3 [file] [log] [blame]
# CMake build for xerces-c
#
# Written by Roger Leigh <rleigh@codelibre.net>
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Integer type checks.
include(CheckCXXSourceCompiles)
include(CheckIncludeFileCXX)
include(CheckTypeSize)
check_include_file_cxx(cstdint HAVE_CSTDINT)
check_cxx_source_compiles("
#include <cstdint>
int main() {
uint32_t v1 = 342;
int64_t v2 = -23;
return 0;
}" CSTDINT_FUNCTIONAL)
check_include_file_cxx(stdint.h HAVE_STDINT_H)
check_include_file_cxx(inttypes.h HAVE_INTTYPES_H)
if(HAVE_CSTDINT AND CSTDINT_FUNCTIONAL)
set(XERCES_HAVE_CSTDINT TRUE)
else()
set(XERCES_HAVE_CSTDINT FALSE)
endif()
set(XERCES_HAVE_STDINT_H ${HAVE_STDINT_H})
set(XERCES_HAVE_INTTYPES_H ${HAVE_INTTYPES_H})
# Standard typedefs
set(CMAKE_EXTRA_INCLUDE_FILES_SAVE ${CMAKE_EXTRA_INCLUDE_FILES})
set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} "stddef.h")
check_type_size("off_t" SIZEOF_OFF_T)
check_type_size("size_t" SIZEOF_SIZE_T)
check_type_size("ssize_t" SIZEOF_SSIZE_T)
check_type_size("wchar_t" SIZEOF_WCHAR_T)
set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES_SAVE})
set(HAVE_OFF_T ${SIZEOF_OFF_T})
set(HAVE_SIZE_T ${SIZEOF_SIZE_T})
set(HAVE_SSIZE_T ${SSIZEOF_SSIZE_T})
set(HAVE_WCHAR_T ${WCHAROF_WCHAR_T})
if(HAVE_SIZEOF_SIZE_T)
set(XERCES_SIZE_T size_t)
set(XERCES_SIZE_MAX SIZE_MAX)
else()
set(XERCES_SIZE_T "unsigned long")
set(XERCES_SIZE_MAX ULONG_MAX)
endif()
if(HAVE_SIZEOF_SSIZE_T)
set(XERCES_SSIZE_T ssize_t)
set(XERCES_SSIZE_MAX SSIZE_MAX)
else()
set(XERCES_SSIZE_T long)
set(XERCES_SSIZE_MAX LONG_MAX)
endif()
# Check type sizes
check_type_size("signed short" SIZEOF_SHORT)
check_type_size("unsigned short" SIZEOF_UNSIGNED_SHORT)
check_type_size("signed int" SIZEOF_INT)
check_type_size("unsigned int" SIZEOF_UNSIGNED_INT)
check_type_size("signed long" SIZEOF_LONG)
check_type_size("unsigned long" SIZEOF_UNSIGNED_LONG)
check_type_size("signed long long" SIZEOF_LONG_LONG)
check_type_size("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG)
check_type_size("__int64" SIZEOF___INT64)
check_type_size("unsigned __int64" SIZEOF_UNSIGNED__INT64)
check_type_size("unsigned char *" SIZEOF_UNSIGNED_CHAR_P)
# If this failed, set size to zero to match autoconf
if(NOT SIZEOF___INT64)
set(SIZEOF___INT64 0)
endif()
if(NOT SIZEOF_UNSIGNED__INT64)
set(SIZEOF_UNSIGNED__INT64 0)
endif()
if(HAVE_CSTDINT OR HAVE_STDINT_H OR HAVE_INTTYPES_H)
# Use standard sized types if possible
set(XERCES_S16BIT_INT "int16_t")
set(XERCES_U16BIT_INT "uint16_t")
set(XERCES_S32BIT_INT "int32_t")
set(XERCES_U32BIT_INT "uint32_t")
set(XERCES_S64BIT_INT "int64_t")
set(XERCES_U64BIT_INT "uint64_t")
else()
# Fallback to basic language types
if(SIZEOF_SHORT EQUAL 2)
set(XERCES_S16BIT_INT "signed short")
elseif(SIZEOF_INT EQUAL 2)
set(XERCES_S16BIT_INT "int")
else()
message(FATAL_ERROR "Couldn't find a signed 16-bit type")
endif()
if(SIZEOF_UNSIGNED_SHORT EQUAL 2)
set(XERCES_U16BIT_INT "unsigned short")
elseif(SIZEOF_UNSIGNED_INT EQUAL 2)
set(XERCES_U16BIT_INT "unsigned int")
else()
message(FATAL_ERROR "Couldn't find an unsigned 16-bit type")
endif()
if(SIZEOF_INT EQUAL 4)
set(XERCES_S32BIT_INT "signed int")
elseif(SIZEOF_LONG EQUAL 4)
set(XERCES_S32BIT_INT "signed long")
else()
message(FATAL_ERROR "Couldn't find a signed 32-bit type")
endif()
if(SIZEOF_UNSIGNED_INT EQUAL 4)
set(XERCES_U32BIT_INT "unsigned int")
elseif(SIZEOF_UNSIGNED_LONG EQUAL 4)
set(XERCES_U32BIT_INT "unsigned long")
else()
message(FATAL_ERROR "Couldn't find an unsigned 32-bit type")
endif()
if(SIZEOF_INT EQUAL 8)
set(XERCES_S64BIT_INT "signed int")
elseif(SIZEOF_LONG EQUAL 8)
set(XERCES_S64BIT_INT "signed long")
elseif(SIZEOF_LONG_LONG EQUAL 8)
set(XERCES_S64BIT_INT "signed long long")
elseif(SIZEOF___INT64 EQUAL 8)
set(XERCES_S64BIT_INT "__int64")
else()
message(FATAL_ERROR "Couldn't find a signed 64-bit type")
endif()
if(SIZEOF_UNSIGNED_INT EQUAL 8)
set(XERCES_U64BIT_INT "unsigned int")
elseif(SIZEOF_UNSIGNED_LONG EQUAL 8)
set(XERCES_U64BIT_INT "unsigned long")
elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL 8)
set(XERCES_U64BIT_INT "unsigned long long")
elseif(SIZEOF_UNSIGNED__INT64 EQUAL 8)
set(XERCES_U64BIT_INT "unsigned __int64")
else()
message(FATAL_ERROR "Couldn't find an unsigned 64-bit type")
endif()
endif()