Merge topic 'import-kwiml'

a5dd0c9d Add option to use a system-installed KWIML
036b6ef7 Port CMake from cmIML to KWIML
12293371 Merge branch 'upstream-KWIML' into import-kwiml
3fdbb0a8 KWIML 2015-12-09 (43f9f8d0)
55b21d07 Add script to update KWIML from upstream
c7d9a249 Utilities/KWIML: Drop sources to make room for fresh import
This commit is contained in:
Brad King 2015-12-21 09:41:09 -05:00 committed by CMake Topic Stage
commit a53e0168c3
45 changed files with 2132 additions and 1789 deletions

View File

@ -138,8 +138,13 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES)
option(CMAKE_USE_SYSTEM_FORM "Use system-installed libform" "${CMAKE_USE_SYSTEM_LIBRARY_FORM}")
option(CMAKE_USE_SYSTEM_JSONCPP "Use system-installed jsoncpp" "${CMAKE_USE_SYSTEM_LIBRARY_JSONCPP}")
# For now use system KWIML only if explicitly requested rather
# than activating via the general system libs options.
option(CMAKE_USE_SYSTEM_KWIML "Use system-installed KWIML" OFF)
mark_as_advanced(CMAKE_USE_SYSTEM_KWIML)
# Mention to the user what system libraries are being used.
foreach(util ${UTILITIES})
foreach(util ${UTILITIES} KWIML)
if(CMAKE_USE_SYSTEM_${util})
message(STATUS "Using system-installed ${util}")
endif()
@ -270,6 +275,20 @@ macro (CMAKE_BUILD_UTILITIES)
# (a macro defined in this file)
CMAKE_HANDLE_SYSTEM_LIBRARIES()
if(CMAKE_USE_SYSTEM_KWIML)
find_package(KWIML 1.0)
if(NOT KWIML_FOUND)
message(FATAL_ERROR "CMAKE_USE_SYSTEM_KWIML is ON but KWIML is not found!")
endif()
set(CMake_KWIML_LIBRARIES kwiml::kwiml)
else()
set(CMake_KWIML_LIBRARIES "")
if(BUILD_TESTING)
set(KWIML_TEST_ENABLE 1)
endif()
add_subdirectory(Utilities/KWIML)
endif()
#---------------------------------------------------------------------
# Build zlib library for Curl, CMake, and CTest.
set(CMAKE_ZLIB_HEADER "cm_zlib.h")
@ -538,10 +557,10 @@ if("x${CMAKE_TESTS_CDASH_SERVER}" STREQUAL "x")
set(CMAKE_TESTS_CDASH_SERVER "http://open.cdash.org")
endif()
# Create the KWIML library for CMake.
set(KWIML cmIML)
set(KWIML_HEADER_ROOT ${CMake_BINARY_DIR}/Utilities)
add_subdirectory(Utilities/KWIML)
if(CMake_TEST_EXTERNAL_CMAKE)
set(KWIML_TEST_ENABLE 1)
add_subdirectory(Utilities/KWIML)
endif()
if(NOT CMake_TEST_EXTERNAL_CMAKE)
# build the utilities (a macro defined in this file)

View File

@ -36,7 +36,7 @@ list(APPEND CTEST_CUSTOM_WARNING_EXCEPTION
"LINK : warning LNK4089: all references to.*SHELL32.dll.*discarded by /OPT:REF"
"LINK : warning LNK4089: all references to.*USER32.dll.*discarded by /OPT:REF"
"LINK : warning LNK4089: all references to.*ole32.dll.*discarded by /OPT:REF"
"Warning.*: .*/Utilities/KWIML/test/test_INT_format.h.* # Redundant preprocessing concatenation"
"Warning.*: .*/Utilities/KWIML/test/test_int_format.h.* # Redundant preprocessing concatenation"
"Warning: library was too large for page size.*"
"Warning: public.*_archive_.*in module.*archive_*clashes with prior module.*archive_.*"
"Warning: public.*BZ2_bz.*in module.*bzlib.*clashes with prior module.*bzlib.*"

View File

@ -566,6 +566,7 @@ target_link_libraries(CMakeLib cmsys
${CMAKE_TAR_LIBRARIES} ${CMAKE_COMPRESS_LIBRARIES}
${CMAKE_CURL_LIBRARIES}
${CMAKE_JSONCPP_LIBRARIES}
${CMake_KWIML_LIBRARIES}
)
# On Apple we need CoreFoundation

View File

@ -162,13 +162,13 @@ struct cmRange
const_iterator end() const { return End; }
bool empty() const { return std::distance(Begin, End) == 0; }
difference_type size() const { return std::distance(Begin, End); }
cmRange& advance(cmIML_INT_intptr_t amount)
cmRange& advance(KWIML_INT_intptr_t amount)
{
std::advance(Begin, amount);
return *this;
}
cmRange& retreat(cmIML_INT_intptr_t amount)
cmRange& retreat(KWIML_INT_intptr_t amount)
{
std::advance(End, -amount);
return *this;

View File

@ -15,9 +15,6 @@
#include <cmsys/auto_ptr.hxx>
#include <cmsys/FStream.hxx>
// Need the native byte order of the running CPU.
#include <cmIML/ABI.h>
// Include the ELF format information system header.
#if defined(__OpenBSD__)
# include <stdint.h>
@ -101,9 +98,9 @@ public:
// In most cases the processor-specific byte order will match that
// of the target execution environment. If we choose wrong here
// it is fixed when the header is read.
#if cmIML_ABI_ENDIAN_ID == cmIML_ABI_ENDIAN_ID_LITTLE
#if KWIML_ABI_ENDIAN_ID == KWIML_ABI_ENDIAN_ID_LITTLE
this->NeedSwap = (this->ByteOrder == ByteOrderMSB);
#elif cmIML_ABI_ENDIAN_ID == cmIML_ABI_ENDIAN_ID_BIG
#elif KWIML_ABI_ENDIAN_ID == KWIML_ABI_ENDIAN_ID_BIG
this->NeedSwap = (this->ByteOrder == ByteOrderLSB);
#else
this->NeedSwap = false; // Final decision is at runtime anyway.
@ -197,7 +194,7 @@ struct cmELFTypes32
typedef Elf32_Shdr ELF_Shdr;
typedef Elf32_Dyn ELF_Dyn;
typedef Elf32_Half ELF_Half;
typedef cmIML_INT_uint32_t tagtype;
typedef KWIML_INT_uint32_t tagtype;
static const char* GetName() { return "32-bit"; }
};
@ -208,7 +205,7 @@ struct cmELFTypes64
typedef Elf64_Shdr ELF_Shdr;
typedef Elf64_Dyn ELF_Dyn;
typedef Elf64_Half ELF_Half;
typedef cmIML_INT_uint64_t tagtype;
typedef KWIML_INT_uint64_t tagtype;
static const char* GetName() { return "64-bit"; }
};

View File

@ -2811,8 +2811,8 @@ namespace {
case CURLINFO_SSL_DATA_OUT:
{
char buf[128];
int n = sprintf(buf, "[%" cmIML_INT_PRIu64 " bytes data]\n",
static_cast<cmIML_INT_uint64_t>(size));
int n = sprintf(buf, "[%" KWIML_INT_PRIu64 " bytes data]\n",
static_cast<KWIML_INT_uint64_t>(size));
if (n > 0)
{
vec->insert(vec->end(), buf, buf + n);

View File

@ -130,7 +130,7 @@ private:
unsigned int VersionFoundPatch;
unsigned int VersionFoundTweak;
unsigned int VersionFoundCount;
cmIML_INT_uint64_t RequiredCMakeVersion;
KWIML_INT_uint64_t RequiredCMakeVersion;
bool Quiet;
bool Required;
bool UseConfigFiles;

View File

@ -2980,7 +2980,7 @@ cmLocalGenerator::GetTargetDirectory(const cmGeneratorTarget*) const
}
//----------------------------------------------------------------------------
cmIML_INT_uint64_t cmLocalGenerator::GetBackwardsCompatibility()
KWIML_INT_uint64_t cmLocalGenerator::GetBackwardsCompatibility()
{
// The computed version may change until the project is fully
// configured.
@ -3033,7 +3033,7 @@ bool cmLocalGenerator::NeedBackwardsCompatibility_2_4()
// Compatibility is needed if CMAKE_BACKWARDS_COMPATIBILITY is set
// equal to or lower than the given version.
cmIML_INT_uint64_t actual_compat = this->GetBackwardsCompatibility();
KWIML_INT_uint64_t actual_compat = this->GetBackwardsCompatibility();
return (actual_compat &&
actual_compat <= CMake_VERSION_ENCODE(2, 4, 255));
}

View File

@ -267,7 +267,7 @@ public:
*
* and is monotonically increasing with the CMake version.
*/
cmIML_INT_uint64_t GetBackwardsCompatibility();
KWIML_INT_uint64_t GetBackwardsCompatibility();
/**
* Test whether compatibility is set to a given version or lower.
@ -390,7 +390,7 @@ protected:
// committed.
std::string TargetImplib;
cmIML_INT_uint64_t BackwardsCompatibility;
KWIML_INT_uint64_t BackwardsCompatibility;
bool BackwardsCompatibilityFinal;
private:
void AddSharedFlags(std::string& flags, const std::string& lang,

View File

@ -31,7 +31,7 @@
#endif
// Provide fixed-size integer types.
#include <cmIML/INT.h>
#include <cm_kwiml.h>
#include <fstream>
#include <iostream>

View File

@ -34,7 +34,7 @@ public:
/* Encode with room for up to 1000 minor releases between major releases
and to encode dates until the year 10000 in the patch level. */
#define CMake_VERSION_ENCODE__BASE cmIML_INT_UINT64_C(100000000)
#define CMake_VERSION_ENCODE__BASE KWIML_INT_UINT64_C(100000000)
#define CMake_VERSION_ENCODE(major, minor, patch) \
((((major) * 1000u) * CMake_VERSION_ENCODE__BASE) + \
(((minor) % 1000u) * CMake_VERSION_ENCODE__BASE) + \

View File

@ -87,22 +87,21 @@
* made).
*/
#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
/* CMake modification: use byte order from cmIML. */
# include "cmIML/ABI.h"
/* CMake modification: use byte order from KWIML. */
# undef BYTE_ORDER
# undef BIG_ENDIAN
# undef LITTLE_ENDIAN
# define BYTE_ORDER cmIML_ABI_ENDIAN_ID
# define BIG_ENDIAN cmIML_ABI_ENDIAN_ID_BIG
# define LITTLE_ENDIAN cmIML_ABI_ENDIAN_ID_LITTLE
# define BYTE_ORDER KWIML_ABI_ENDIAN_ID
# define BIG_ENDIAN KWIML_ABI_ENDIAN_ID_BIG
# define LITTLE_ENDIAN KWIML_ABI_ENDIAN_ID_LITTLE
#endif
/* CMake modification: use types computed in header. */
typedef cm_sha2_uint8_t sha_byte; /* Exactly 1 byte */
typedef cm_sha2_uint32_t sha_word32; /* Exactly 4 bytes */
typedef cm_sha2_uint64_t sha_word64; /* Exactly 8 bytes */
#define SHA_UINT32_C(x) cmIML_INT_UINT32_C(x)
#define SHA_UINT64_C(x) cmIML_INT_UINT64_C(x)
#define SHA_UINT32_C(x) KWIML_INT_UINT32_C(x)
#define SHA_UINT64_C(x) KWIML_INT_UINT64_C(x)
#if defined(__clang__)
# pragma clang diagnostic ignored "-Wcast-align"
#endif

View File

@ -38,11 +38,11 @@
#include "cm_sha2_mangle.h"
/* CMake modification: use integer types from cmIML. */
#include "cmIML/INT.h"
typedef cmIML_INT_uint8_t cm_sha2_uint8_t;
typedef cmIML_INT_uint32_t cm_sha2_uint32_t;
typedef cmIML_INT_uint64_t cm_sha2_uint64_t;
/* CMake modification: use integer types from KWIML. */
#include <cm_kwiml.h>
typedef KWIML_INT_uint8_t cm_sha2_uint8_t;
typedef KWIML_INT_uint32_t cm_sha2_uint32_t;
typedef KWIML_INT_uint64_t cm_sha2_uint64_t;
#ifdef __cplusplus
extern "C" {

1
Utilities/KWIML/.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.md conflict-marker-size=78

View File

@ -1,506 +0,0 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Kitware, Inc. nor the names of its contributors
may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================================*/
#ifndef @KWIML@_ABI_H
#define @KWIML@_ABI_H
/*
This header defines macros with information about the C ABI.
Only information that can be determined using the preprocessor at
compilation time is available. No try-compile results may be added
here. Instead we memorize results on platforms of interest.
An includer may optionally define the following macros to suppress errors:
@KWIML@_ABI_NO_VERIFY = skip verification declarations
@KWIML@_ABI_NO_ERROR_CHAR_SIGN = signedness of 'char' may be unknown
@KWIML@_ABI_NO_ERROR_LONG_LONG = existence of 'long long' may be unknown
@KWIML@_ABI_NO_ERROR_ENDIAN = byte order of CPU may be unknown
An includer may test the following macros after inclusion:
@KWIML@_ABI_SIZEOF_DATA_PTR = sizeof(void*)
@KWIML@_ABI_SIZEOF_CODE_PTR = sizeof(void(*)(void))
@KWIML@_ABI_SIZEOF_FLOAT = sizeof(float)
@KWIML@_ABI_SIZEOF_DOUBLE = sizeof(double)
@KWIML@_ABI_SIZEOF_CHAR = sizeof(char)
@KWIML@_ABI_SIZEOF_SHORT = sizeof(short)
@KWIML@_ABI_SIZEOF_INT = sizeof(int)
@KWIML@_ABI_SIZEOF_LONG = sizeof(long)
@KWIML@_ABI_SIZEOF_LONG_LONG = sizeof(long long) or 0 if not a type
Undefined if existence is unknown and error suppression macro
@KWIML@_ABI_NO_ERROR_LONG_LONG was defined.
@KWIML@_ABI_SIZEOF___INT64 = 8 if '__int64' exists or 0 if not
Undefined if existence is unknown.
@KWIML@_ABI___INT64_IS_LONG = 1 if '__int64' is 'long' (same type)
Undefined otherwise.
@KWIML@_ABI___INT64_IS_LONG_LONG = 1 if '__int64' is 'long long' (same type)
Undefined otherwise.
@KWIML@_ABI___INT64_IS_UNIQUE = 1 if '__int64' is a distinct type
Undefined otherwise.
@KWIML@_ABI_CHAR_IS_UNSIGNED = 1 if 'char' is unsigned, else undefined
@KWIML@_ABI_CHAR_IS_SIGNED = 1 if 'char' is signed, else undefined
One of these is defined unless signedness of 'char' is unknown and
error suppression macro @KWIML@_ABI_NO_ERROR_CHAR_SIGN was defined.
@KWIML@_ABI_ENDIAN_ID_BIG = id for big-endian (always defined)
@KWIML@_ABI_ENDIAN_ID_LITTLE = id for little-endian (always defined)
@KWIML@_ABI_ENDIAN_ID = id of byte order of target CPU
Defined to @KWIML@_ABI_ENDIAN_ID_BIG or @KWIML@_ABI_ENDIAN_ID_LITTLE
unless byte order is unknown and error suppression macro
@KWIML@_ABI_NO_ERROR_ENDIAN was defined.
We verify most results using dummy "extern" declarations that are
invalid if the macros are wrong. Verification is disabled if
suppression macro @KWIML@_ABI_NO_VERIFY was defined.
*/
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_DATA_PTR)
# if defined(__SIZEOF_POINTER__)
# define @KWIML@_ABI_SIZEOF_DATA_PTR __SIZEOF_POINTER__
# elif defined(_SIZE_PTR)
# define @KWIML@_ABI_SIZEOF_DATA_PTR (_SIZE_PTR >> 3)
# elif defined(_LP64) || defined(__LP64__)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(_ILP32)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 4
# elif defined(__64BIT__) /* IBM XL */
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(_M_X64)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(__ia64)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(__sparcv9)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(__x86_64) || defined(__x86_64__)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(__amd64) || defined(__amd64__)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 8
# elif defined(__i386) || defined(__i386__)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 4
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_DATA_PTR)
# define @KWIML@_ABI_SIZEOF_DATA_PTR 4
#endif
#if !defined(@KWIML@_ABI_SIZEOF_CODE_PTR)
# define @KWIML@_ABI_SIZEOF_CODE_PTR @KWIML@_ABI_SIZEOF_DATA_PTR
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_CHAR)
# define @KWIML@_ABI_SIZEOF_CHAR 1
#endif
#if !defined(@KWIML@_ABI_CHAR_IS_UNSIGNED) && !defined(@KWIML@_ABI_CHAR_IS_SIGNED)
# if defined(__CHAR_UNSIGNED__) /* GNU, some IBM XL, others? */
# define @KWIML@_ABI_CHAR_IS_UNSIGNED 1
# elif defined(_CHAR_UNSIGNED) /* Intel, IBM XL, MSVC, Borland, others? */
# define @KWIML@_ABI_CHAR_IS_UNSIGNED 1
# elif defined(_CHAR_SIGNED) /* IBM XL, others? */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(__CHAR_SIGNED__) /* IBM XL, Watcom, others? */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(__SIGNED_CHARS__) /* EDG, Intel, SGI MIPSpro */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(_CHAR_IS_SIGNED) /* Some SunPro, others? */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(_CHAR_IS_UNSIGNED) /* SunPro, others? */
# define @KWIML@_ABI_CHAR_IS_UNSIGNED 1
# elif defined(__GNUC__) /* GNU default */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* SunPro default */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(__HP_cc) || defined(__HP_aCC) /* HP default (unless +uc) */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(_SGI_COMPILER_VERSION) /* SGI MIPSpro default */
# define @KWIML@_ABI_CHAR_IS_UNSIGNED 1
# elif defined(__PGIC__) /* PGI default */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(_MSC_VER) /* MSVC default */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(__WATCOMC__) /* Watcom default */
# define @KWIML@_ABI_CHAR_IS_UNSIGNED 1
# elif defined(__BORLANDC__) /* Borland default */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1
# elif defined(__hpux) /* Old HP: no __HP_cc/__HP_aCC/__GNUC__ above */
# define @KWIML@_ABI_CHAR_IS_SIGNED 1 /* (unless +uc) */
# endif
#endif
#if !defined(@KWIML@_ABI_CHAR_IS_UNSIGNED) && !defined(@KWIML@_ABI_CHAR_IS_SIGNED) \
&& !defined(@KWIML@_ABI_NO_ERROR_CHAR_SIGN)
# error "Signedness of 'char' unknown."
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_SHORT)
# if defined(__SIZEOF_SHORT__)
# define @KWIML@_ABI_SIZEOF_SHORT __SIZEOF_SHORT__
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_SHORT)
# define @KWIML@_ABI_SIZEOF_SHORT 2
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_INT)
# if defined(__SIZEOF_INT__)
# define @KWIML@_ABI_SIZEOF_INT __SIZEOF_INT__
# elif defined(_SIZE_INT)
# define @KWIML@_ABI_SIZEOF_INT (_SIZE_INT >> 3)
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_INT)
# define @KWIML@_ABI_SIZEOF_INT 4
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_LONG)
# if defined(__SIZEOF_LONG__)
# define @KWIML@_ABI_SIZEOF_LONG __SIZEOF_LONG__
# elif defined(_SIZE_LONG)
# define @KWIML@_ABI_SIZEOF_LONG (_SIZE_LONG >> 3)
# elif defined(__LONG_MAX__)
# if __LONG_MAX__ == 0x7fffffff
# define @KWIML@_ABI_SIZEOF_LONG 4
# elif __LONG_MAX__>>32 == 0x7fffffff
# define @KWIML@_ABI_SIZEOF_LONG 8
# endif
# elif defined(_MSC_VER) /* MSVC and Intel on Windows */
# define @KWIML@_ABI_SIZEOF_LONG 4
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_LONG)
# define @KWIML@_ABI_SIZEOF_LONG @KWIML@_ABI_SIZEOF_DATA_PTR
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_LONG_LONG)
# if defined(__SIZEOF_LONG_LONG__)
# define @KWIML@_ABI_SIZEOF_LONG_LONG __SIZEOF_LONG_LONG__
# elif defined(__LONG_LONG_MAX__)
# if __LONG_LONG_MAX__ == 0x7fffffff
# define @KWIML@_ABI_SIZEOF_LONG_LONG 4
# elif __LONG_LONG_MAX__>>32 == 0x7fffffff
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# endif
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_LONG_LONG)
# if defined(_LONGLONG) /* SGI, some GNU, perhaps others. */ \
&& !defined(_MSC_VER)
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(_LONG_LONG) /* IBM XL, perhaps others. */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__NO_LONG_LONG) /* EDG */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 0
# elif defined(__cplusplus) && __cplusplus > 199711L /* C++0x */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* SunPro */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__HP_cc) || defined(__HP_aCC) /* HP */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__PGIC__) /* PGI */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__WATCOMC__) /* Watcom */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__INTEL_COMPILER) /* Intel */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__BORLANDC__) /* Borland */
# if __BORLANDC__ >= 0x0560
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# else
# define @KWIML@_ABI_SIZEOF_LONG_LONG 0
# endif
# elif defined(_MSC_VER) /* Microsoft */
# if _MSC_VER >= 1310
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# else
# define @KWIML@_ABI_SIZEOF_LONG_LONG 0
# endif
# elif defined(__GNUC__) /* GNU */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# elif defined(__hpux) /* Old HP: no __HP_cc/__HP_aCC/__GNUC__ above */
# define @KWIML@_ABI_SIZEOF_LONG_LONG 8
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && !defined(@KWIML@_ABI_NO_ERROR_LONG_LONG)
# error "Existence of 'long long' unknown."
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF___INT64)
# if defined(__INTEL_COMPILER)
# define @KWIML@_ABI_SIZEOF___INT64 8
# elif defined(_MSC_VER)
# define @KWIML@_ABI_SIZEOF___INT64 8
# elif defined(__BORLANDC__)
# define @KWIML@_ABI_SIZEOF___INT64 8
# else
# define @KWIML@_ABI_SIZEOF___INT64 0
# endif
#endif
#if defined(@KWIML@_ABI_SIZEOF___INT64) && @KWIML@_ABI_SIZEOF___INT64 > 0
# if @KWIML@_ABI_SIZEOF_LONG == 8
# define @KWIML@_ABI___INT64_IS_LONG 1
# elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
# define @KWIML@_ABI___INT64_IS_LONG_LONG 1
# else
# define @KWIML@_ABI___INT64_IS_UNIQUE 1
# endif
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_FLOAT)
# if defined(__SIZEOF_FLOAT__)
# define @KWIML@_ABI_SIZEOF_FLOAT __SIZEOF_FLOAT__
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_FLOAT)
# define @KWIML@_ABI_SIZEOF_FLOAT 4
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_SIZEOF_DOUBLE)
# if defined(__SIZEOF_DOUBLE__)
# define @KWIML@_ABI_SIZEOF_DOUBLE __SIZEOF_DOUBLE__
# endif
#endif
#if !defined(@KWIML@_ABI_SIZEOF_DOUBLE)
# define @KWIML@_ABI_SIZEOF_DOUBLE 8
#endif
/*--------------------------------------------------------------------------*/
/* Identify possible endian cases. The macro @KWIML@_ABI_ENDIAN_ID will be
defined to one of these, or undefined if unknown. */
#if !defined(@KWIML@_ABI_ENDIAN_ID_BIG)
# define @KWIML@_ABI_ENDIAN_ID_BIG 4321
#endif
#if !defined(@KWIML@_ABI_ENDIAN_ID_LITTLE)
# define @KWIML@_ABI_ENDIAN_ID_LITTLE 1234
#endif
#if @KWIML@_ABI_ENDIAN_ID_BIG == @KWIML@_ABI_ENDIAN_ID_LITTLE
# error "@KWIML@_ABI_ENDIAN_ID_BIG == @KWIML@_ABI_ENDIAN_ID_LITTLE"
#endif
#if defined(@KWIML@_ABI_ENDIAN_ID) /* Skip #elif cases if already defined. */
/* Use dedicated symbols if the compiler defines them. Do this first
because some architectures allow runtime byte order selection by
the operating system (values for such architectures below are
guesses for compilers that do not define a dedicated symbol).
Ensure that only one is defined in case the platform or a header
defines both as possible values for some third symbol. */
#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
#elif defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
#elif defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* Alpha */
#elif defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* Arm */
#elif defined(__arm__)
# if !defined(__ARMEB__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
# else
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
# endif
/* Intel x86 */
#elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
#elif defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
#elif defined(__MWERKS__) && defined(__INTEL__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* Intel x86-64 */
#elif defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
#elif defined(__amd64) || defined(__amd64__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* Intel Architecture-64 (Itanium) */
#elif defined(__ia64) || defined(__ia64__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
#elif defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* PowerPC */
#elif defined(__powerpc) || defined(__powerpc__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
#elif defined(__ppc) || defined(__ppc__) || defined(__POWERPC__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* SPARC */
#elif defined(__sparc) || defined(__sparc__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* HP/PA RISC */
#elif defined(__hppa) || defined(__hppa__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* Motorola 68k */
#elif defined(__m68k__) || defined(M68000)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* MIPSel (MIPS little endian) */
#elif defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* MIPSeb (MIPS big endian) */
#elif defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* MIPS (fallback, big endian) */
#elif defined(__mips) || defined(__mips__) || defined(__MIPS__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* NIOS2 */
#elif defined(__NIOS2__) || defined(__NIOS2) || defined(__nios2__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* OpenRISC 1000 */
#elif defined(__or1k__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* RS/6000 */
#elif defined(__THW_RS600) || defined(_IBMR2) || defined(_POWER)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
#elif defined(_ARCH_PWR) || defined(_ARCH_PWR2)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* System/370 */
#elif defined(__370__) || defined(__THW_370__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* System/390 */
#elif defined(__s390__) || defined(__s390x__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* z/Architecture */
#elif defined(__SYSC_ZARCH__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* VAX */
#elif defined(__vax__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
/* Aarch64 */
#elif defined(__aarch64__)
# if !defined(__AARCH64EB__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
# else
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
# endif
/* Xtensa */
#elif defined(__XTENSA_EB__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_BIG
#elif defined(__XTENSA_EL__)
# define @KWIML@_ABI_ENDIAN_ID @KWIML@_ABI_ENDIAN_ID_LITTLE
/* Unknown CPU */
#elif !defined(@KWIML@_ABI_NO_ERROR_ENDIAN)
# error "Byte order of target CPU unknown."
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_ABI_NO_VERIFY)
#define @KWIML@_ABI__VERIFY(n, x, y) extern int (*n)[x]; extern int (*n)[y]
#define @KWIML@_ABI__VERIFY2(n, x, y) extern int (*n)(x*); extern int (*n)(y*)
#if defined(__cplusplus)
# define @KWIML@_ABI__VERIFY3(n, x, y) extern int* n(x*); extern char* n(y*)
#else
# define @KWIML@_ABI__VERIFY3(n, x, y) extern int* n(x*) /* TODO: possible? */
#endif
#define @KWIML@_ABI__VERIFY_BOOL(m, b) @KWIML@_ABI__VERIFY(m##__VERIFY__, 2, (b)?2:3)
#define @KWIML@_ABI__VERIFY_SIZE(m, t) @KWIML@_ABI__VERIFY(m##__VERIFY__, m, sizeof(t))
#define @KWIML@_ABI__VERIFY_SAME(m, x, y) @KWIML@_ABI__VERIFY2(m##__VERIFY__, x, y)
#define @KWIML@_ABI__VERIFY_DIFF(m, x, y) @KWIML@_ABI__VERIFY3(m##__VERIFY__, x, y)
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_DATA_PTR, int*);
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_CODE_PTR, int(*)(int));
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_CHAR, char);
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_SHORT, short);
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_INT, int);
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_LONG, long);
#if defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG > 0
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_LONG_LONG, long long);
#endif
#if defined(@KWIML@_ABI_SIZEOF___INT64) && @KWIML@_ABI_SIZEOF___INT64 > 0
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF___INT64, __int64);
#endif
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_FLOAT, float);
@KWIML@_ABI__VERIFY_SIZE(@KWIML@_ABI_SIZEOF_DOUBLE, double);
#if defined(@KWIML@_ABI___INT64_IS_LONG)
@KWIML@_ABI__VERIFY_SAME(@KWIML@_ABI___INT64_IS_LONG, __int64, long);
#elif defined(@KWIML@_ABI___INT64_IS_LONG_LONG)
@KWIML@_ABI__VERIFY_SAME(@KWIML@_ABI___INT64_IS_LONG_LONG, __int64, long long);
#elif defined(@KWIML@_ABI_SIZEOF___INT64) && @KWIML@_ABI_SIZEOF___INT64 > 0
@KWIML@_ABI__VERIFY_DIFF(@KWIML@_ABI___INT64_NOT_LONG, __int64, long);
# if defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG > 0
@KWIML@_ABI__VERIFY_DIFF(@KWIML@_ABI___INT64_NOT_LONG_LONG, __int64, long long);
# endif
#endif
#if defined(@KWIML@_ABI_CHAR_IS_UNSIGNED)
@KWIML@_ABI__VERIFY_BOOL(@KWIML@_ABI_CHAR_IS_UNSIGNED, (char)0x80 > 0);
#elif defined(@KWIML@_ABI_CHAR_IS_SIGNED)
@KWIML@_ABI__VERIFY_BOOL(@KWIML@_ABI_CHAR_IS_SIGNED, (char)0x80 < 0);
#endif
#undef @KWIML@_ABI__VERIFY_DIFF
#undef @KWIML@_ABI__VERIFY_SAME
#undef @KWIML@_ABI__VERIFY_SIZE
#undef @KWIML@_ABI__VERIFY_BOOL
#undef @KWIML@_ABI__VERIFY3
#undef @KWIML@_ABI__VERIFY2
#undef @KWIML@_ABI__VERIFY
#endif
#endif

View File

@ -1,52 +1,29 @@
#=============================================================================
# Kitware Information Macro Library
# Copyright 2010-2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
# Copyright Kitware, Inc.
# Distributed under the OSI-approved BSD 3-Clause 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.
#=============================================================================
# Import the KWIML directory tree into a subdirectory under a parent
# project and configure the library as follows:
#
# set(KWIML myIML)
# subdirs(KWIML)
#
# Optional settings are as follows:
#
# KWIML_HEADER_ROOT = build tree directory to hold KWIML headers.
# Headers will go in a directory called "${KWIML}" under this root.
# For example:
#
# set(KWIML_HEADER_ROOT ${PROJECT_BINARY_DIR})
# include_directories(${PROJECT_BINARY_DIR})
#
# KWIML_INSTALL_INCLUDE_DIR = install KWIML with "make install"
# Specify a value relative to the install prefix and do NOT start with '/'.
# KWIML_INSTALL_INCLUDE_OPTIONS = extra header installation options
# Specify options for the install(FILES) command.
#
# KWIML_LABELS_TEST = list of labels for KWIML tests
cmake_minimum_required(VERSION 2.6.3 FATAL_ERROR)
#-----------------------------------------------------------------------------
if(NOT DEFINED KWIML)
if(NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
message(FATAL_ERROR "Set KWIML namespace in parent directory!")
endif()
set(KWIML KWIML)
set(KWIML_STANDALONE 1)
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
set(kwiml_standalone 1)
project(KWIML)
include(CTest)
mark_as_advanced(BUILD_TESTING)
if(BUILD_TESTING)
set(KWIML_TEST_ENABLE 1)
endif()
if(NOT DEFINED KWIML_INSTALL_INCLUDE_DIR)
set(KWIML_INSTALL_INCLUDE_DIR include)
endif()
set(KWIML_INCLUDE_PREFIX kwiml)
else()
cmake_minimum_required(VERSION 2.8.2 FATAL_ERROR)
set(kwiml_standalone 0)
if(KWIML_INSTALL_INCLUDE_DIR AND NOT DEFINED KWIML_INCLUDE_PREFIX)
message(FATAL_ERROR "Host project must set KWIML_INCLUDE_PREFIX")
endif()
endif()
#-----------------------------------------------------------------------------
get_property(KWIML_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
foreach(lang ${KWIML_LANGUAGES})
set(KWIML_LANGUAGE_${lang} 1)
@ -55,25 +32,73 @@ if(NOT KWIML_LANGUAGE_C AND NOT KWIML_LANGUAGE_CXX)
set(BUILD_TESTING OFF)
endif()
#-----------------------------------------------------------------------------
if(NOT KWIML_HEADER_ROOT)
set(KWIML_HEADER_ROOT "${PROJECT_BINARY_DIR}")
if(KWIML_INSTALL_INCLUDE_DIR)
install(FILES
include/kwiml/abi.h
include/kwiml/int.h
DESTINATION ${KWIML_INSTALL_INCLUDE_DIR}/${KWIML_INCLUDE_PREFIX}
${KWIML_INSTALL_INCLUDE_OPTIONS}
)
endif()
set(KWIML_HEADER_DIR "${KWIML_HEADER_ROOT}/${KWIML}")
include_directories(${KWIML_HEADER_ROOT})
#-----------------------------------------------------------------------------
foreach(h ABI INT)
set(header ${KWIML_HEADER_DIR}/${h}.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${h}.h.in ${header} @ONLY)
if(KWIML_INSTALL_INCLUDE_DIR)
install(FILES ${header}
DESTINATION ${KWIML_INSTALL_INCLUDE_DIR}/${KWIML}
${KWIML_INSTALL_INCLUDE_OPTIONS})
endif()
endforeach()
#-----------------------------------------------------------------------------
if(BUILD_TESTING)
if(KWIML_TEST_ENABLE)
add_subdirectory(test)
endif()
if(NOT kwiml_standalone)
return()
endif()
#----------------------------------------------------------------------------
set(KWIML_VERSION 1.0.0)
if(KWIML_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)")
set(KWIML_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(KWIML_VERSION_MINOR "${CMAKE_MATCH_2}")
set(KWIML_VERSION_PATCH "${CMAKE_MATCH_3}")
math(EXPR KWIML_VERSION_DECIMAL
"${KWIML_VERSION_MAJOR}*1000000 + ${KWIML_VERSION_MINOR}*1000 + ${KWIML_VERSION_PATCH}")
else()
message(FATAL_ERROR "Failed to parse KWIML_VERSION='${KWIML_VERSION}'")
endif()
configure_file(src/version.h.in include/kwiml/version.h @ONLY)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/include/kwiml/version.h
DESTINATION ${KWIML_INSTALL_INCLUDE_DIR}/kwiml
)
if(NOT KWIML_INSTALL_PACKAGE_DIR)
set(KWIML_INSTALL_PACKAGE_DIR share/cmake/kwiml-${KWIML_VERSION_MAJOR}.${KWIML_VERSION_MINOR})
endif()
add_library(kwiml INTERFACE)
target_include_directories(kwiml INTERFACE
$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${KWIML_INSTALL_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
export(TARGETS kwiml
NAMESPACE kwiml::
FILE kwiml-targets.cmake
)
install(TARGETS kwiml
DESTINATION lib
EXPORT kwiml-targets
)
install(EXPORT kwiml-targets
NAMESPACE kwiml::
DESTINATION ${KWIML_INSTALL_PACKAGE_DIR}
)
configure_file(src/kwiml-config.cmake.in kwiml-config.cmake @ONLY)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/kwiml-config-version.cmake"
VERSION ${KWIML_VERSION}
COMPATIBILITY AnyNewerVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/kwiml-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/kwiml-config-version.cmake
DESTINATION ${KWIML_INSTALL_PACKAGE_DIR}
)

View File

@ -1,5 +1,5 @@
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
Copyright 2010-2015 Kitware, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without

View File

@ -1,861 +0,0 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Kitware, Inc. nor the names of its contributors
may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================================*/
#ifndef @KWIML@_INT_H
#define @KWIML@_INT_H
/*
This header defines macros with information about sized integer types.
Only information that can be determined using the preprocessor at
compilation time is available. No try-compile results may be added
here. Instead we memorize results on platforms of interest.
An includer may optionally define the following macros to suppress errors:
Input:
@KWIML@_INT_NO_VERIFY = skip verification declarations
@KWIML@_INT_NO_ERROR_INT64_T = type '@KWIML@_INT_int64_t' is optional (*)
@KWIML@_INT_NO_ERROR_UINT64_T = type '@KWIML@_INT_uint64_t' is optional (*)
@KWIML@_INT_NO_ERROR_INTPTR_T = type '@KWIML@_INT_intptr_t' is optional (*)
@KWIML@_INT_NO_ERROR_UINTPTR_T = type '@KWIML@_INT_uintptr_t' is optional (*)
An includer may optionally define the following macros to override defaults.
Either way, an includer may test these macros after inclusion:
@KWIML@_INT_HAVE_STDINT_H = include <stdint.h>
@KWIML@_INT_NO_STDINT_H = do not include <stdint.h>
@KWIML@_INT_HAVE_INTTYPES_H = include <inttypes.h>
@KWIML@_INT_NO_INTTYPES_H = do not include <inttypes.h>
An includer may test the following macros after inclusion:
@KWIML@_INT_HAVE_INT#_T = type 'int#_t' is available
@KWIML@_INT_HAVE_UINT#_T = type 'uint#_t' is available
# = 8, 16, 32, 64, PTR
@KWIML@_INT_int#_t = signed integer type exactly # bits wide
@KWIML@_INT_uint#_t = unsigned integer type exactly # bits wide
# = 8, 16, 32, 64 (*), ptr (*)
@KWIML@_INT_NO_INT64_T = type '@KWIML@_INT_int64_t' not available
@KWIML@_INT_NO_UINT64_T = type '@KWIML@_INT_uint64_t' not available
@KWIML@_INT_NO_INTPTR_T = type '@KWIML@_INT_intptr_t' not available
@KWIML@_INT_NO_UINTPTR_T = type '@KWIML@_INT_uintptr_t' not available
@KWIML@_INT_INT#_C(c) = signed integer constant at least # bits wide
@KWIML@_INT_UINT#_C(c) = unsigned integer constant at least # bits wide
# = 8, 16, 32, 64 (*)
@KWIML@_INT_<fmt># = print or scan format, <fmt> in table below
# = 8, 16, 32, 64, PTR (*)
signed unsigned
----------- ------------------------------
| decimal | decimal octal hexadecimal |
print | PRId PRIi | PRIu PRIo PRIx PRIX |
scan | SCNd SCNi | SCNu SCNo SCNx |
----------- ------------------------------
The SCN*8 and SCN*64 format macros will not be defined on systems
with scanf implementations known not to support them.
@KWIML@_INT_BROKEN_<fmt># = macro <fmt># is incorrect if defined
Some compilers define integer format macros incorrectly for their
own formatted print/scan implementations.
@KWIML@_INT_BROKEN_INT#_C = macro INT#_C is incorrect if defined
@KWIML@_INT_BROKEN_UINT#_C = macro UINT#_C is incorrect if defined
Some compilers define integer constant macros incorrectly and
cannot handle literals as large as the integer type or even
produce bad preprocessor syntax.
@KWIML@_INT_BROKEN_INT8_T = type 'int8_t' is available but incorrect
Some compilers have a flag to make 'char' (un)signed but do not account
for it while defining int8_t in the non-default case.
The broken cases do not affect correctness of the macros documented above.
*/
#include "ABI.h"
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_STDINT_H) /* Already defined. */
#elif defined(@KWIML@_INT_NO_STDINT_H) /* Already defined. */
#elif defined(HAVE_STDINT_H) /* Optionally provided by includer. */
# define @KWIML@_INT_HAVE_STDINT_H 1
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
# define @KWIML@_INT_HAVE_STDINT_H 1
#elif defined(_MSC_VER) /* MSVC */
# if _MSC_VER >= 1600
# define @KWIML@_INT_HAVE_STDINT_H 1
# else
# define @KWIML@_INT_NO_STDINT_H 1
# endif
#elif defined(__BORLANDC__) /* Borland */
# if __BORLANDC__ >= 0x560
# define @KWIML@_INT_HAVE_STDINT_H 1
# else
# define @KWIML@_INT_NO_STDINT_H 1
# endif
#elif defined(__WATCOMC__) /* Watcom */
# define @KWIML@_INT_NO_STDINT_H 1
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_INTTYPES_H) /* Already defined. */
#elif defined(@KWIML@_INT_NO_INTTYPES_H) /* Already defined. */
#elif defined(HAVE_INTTYPES_H) /* Optionally provided by includer. */
# define @KWIML@_INT_HAVE_INTTYPES_H 1
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
# define @KWIML@_INT_HAVE_INTTYPES_H 1
#elif defined(_MSC_VER) /* MSVC */
# define @KWIML@_INT_NO_INTTYPES_H 1
#elif defined(__BORLANDC__) /* Borland */
# define @KWIML@_INT_NO_INTTYPES_H 1
#elif defined(__WATCOMC__) /* Watcom */
# define @KWIML@_INT_NO_INTTYPES_H 1
#else /* Assume it exists. */
# define @KWIML@_INT_HAVE_INTTYPES_H 1
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_STDINT_H) && defined(@KWIML@_INT_NO_STDINT_H)
# error "Both @KWIML@_INT_HAVE_STDINT_H and @KWIML@_INT_NO_STDINT_H defined!"
#endif
#if defined(@KWIML@_INT_HAVE_INTTYPES_H) && defined(@KWIML@_INT_NO_INTTYPES_H)
# error "Both @KWIML@_INT_HAVE_INTTYPES_H and @KWIML@_INT_NO_INTTYPES_H defined!"
#endif
#if defined(@KWIML@_INT_HAVE_STDINT_H)
# include <stdint.h>
#endif
#if defined(@KWIML@_INT_HAVE_INTTYPES_H)
# if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS)
# define __STDC_FORMAT_MACROS
# endif
# include <inttypes.h>
#endif
#if defined(@KWIML@_INT_HAVE_STDINT_H) || defined(@KWIML@_INT_HAVE_INTTYPES_H)
#define @KWIML@_INT_HAVE_INT8_T 1
#define @KWIML@_INT_HAVE_UINT8_T 1
#define @KWIML@_INT_HAVE_INT16_T 1
#define @KWIML@_INT_HAVE_UINT16_T 1
#define @KWIML@_INT_HAVE_INT32_T 1
#define @KWIML@_INT_HAVE_UINT32_T 1
#define @KWIML@_INT_HAVE_INT64_T 1
#define @KWIML@_INT_HAVE_UINT64_T 1
#define @KWIML@_INT_HAVE_INTPTR_T 1
#define @KWIML@_INT_HAVE_UINTPTR_T 1
#endif
#if defined(_AIX43) && !defined(_AIX50) && !defined(_AIX51)
/* AIX 4.3 defines these incorrectly with % and no quotes. */
# define @KWIML@_INT_BROKEN_PRId8
# define @KWIML@_INT_BROKEN_SCNd8
# define @KWIML@_INT_BROKEN_PRIi8
# define @KWIML@_INT_BROKEN_SCNi8
# define @KWIML@_INT_BROKEN_PRIo8
# define @KWIML@_INT_BROKEN_SCNo8
# define @KWIML@_INT_BROKEN_PRIu8
# define @KWIML@_INT_BROKEN_SCNu8
# define @KWIML@_INT_BROKEN_PRIx8
# define @KWIML@_INT_BROKEN_SCNx8
# define @KWIML@_INT_BROKEN_PRIX8
# define @KWIML@_INT_BROKEN_PRId16
# define @KWIML@_INT_BROKEN_SCNd16
# define @KWIML@_INT_BROKEN_PRIi16
# define @KWIML@_INT_BROKEN_SCNi16
# define @KWIML@_INT_BROKEN_PRIo16
# define @KWIML@_INT_BROKEN_SCNo16
# define @KWIML@_INT_BROKEN_PRIu16
# define @KWIML@_INT_BROKEN_SCNu16
# define @KWIML@_INT_BROKEN_PRIx16
# define @KWIML@_INT_BROKEN_SCNx16
# define @KWIML@_INT_BROKEN_PRIX16
# define @KWIML@_INT_BROKEN_PRId32
# define @KWIML@_INT_BROKEN_SCNd32
# define @KWIML@_INT_BROKEN_PRIi32
# define @KWIML@_INT_BROKEN_SCNi32
# define @KWIML@_INT_BROKEN_PRIo32
# define @KWIML@_INT_BROKEN_SCNo32
# define @KWIML@_INT_BROKEN_PRIu32
# define @KWIML@_INT_BROKEN_SCNu32
# define @KWIML@_INT_BROKEN_PRIx32
# define @KWIML@_INT_BROKEN_SCNx32
# define @KWIML@_INT_BROKEN_PRIX32
# define @KWIML@_INT_BROKEN_PRId64
# define @KWIML@_INT_BROKEN_SCNd64
# define @KWIML@_INT_BROKEN_PRIi64
# define @KWIML@_INT_BROKEN_SCNi64
# define @KWIML@_INT_BROKEN_PRIo64
# define @KWIML@_INT_BROKEN_SCNo64
# define @KWIML@_INT_BROKEN_PRIu64
# define @KWIML@_INT_BROKEN_SCNu64
# define @KWIML@_INT_BROKEN_PRIx64
# define @KWIML@_INT_BROKEN_SCNx64
# define @KWIML@_INT_BROKEN_PRIX64
# define @KWIML@_INT_BROKEN_PRIdPTR
# define @KWIML@_INT_BROKEN_SCNdPTR
# define @KWIML@_INT_BROKEN_PRIiPTR
# define @KWIML@_INT_BROKEN_SCNiPTR
# define @KWIML@_INT_BROKEN_PRIoPTR
# define @KWIML@_INT_BROKEN_SCNoPTR
# define @KWIML@_INT_BROKEN_PRIuPTR
# define @KWIML@_INT_BROKEN_SCNuPTR
# define @KWIML@_INT_BROKEN_PRIxPTR
# define @KWIML@_INT_BROKEN_SCNxPTR
# define @KWIML@_INT_BROKEN_PRIXPTR
#endif
#if (defined(__SUNPRO_C)||defined(__SUNPRO_CC)) && defined(_CHAR_IS_UNSIGNED)
# define @KWIML@_INT_BROKEN_INT8_T /* system type defined incorrectly */
#elif defined(__BORLANDC__) && defined(_CHAR_UNSIGNED)
# define @KWIML@_INT_BROKEN_INT8_T /* system type defined incorrectly */
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_INT8_T) && !defined(@KWIML@_INT_BROKEN_INT8_T)
# define @KWIML@_INT_int8_t int8_t
#else
# define @KWIML@_INT_int8_t signed char
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T)
# define @KWIML@_INT_uint8_t uint8_t
#else
# define @KWIML@_INT_uint8_t unsigned char
#endif
#if defined(__INTEL_COMPILER)
# if defined(_WIN32)
# define @KWIML@_INT__NO_SCN8
# endif
#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# define @KWIML@_INT__NO_SCN8
#elif defined(__BORLANDC__)
# define @KWIML@_INT__NO_SCN8
# define @KWIML@_INT__NO_SCN64
#elif defined(_MSC_VER)
# define @KWIML@_INT__NO_SCN8
#elif defined(__WATCOMC__)
# define @KWIML@_INT__NO_SCN8
# elif defined(__hpux) /* HP runtime lacks support (any compiler) */
# define @KWIML@_INT__NO_SCN8
#endif
/* 8-bit d, i */
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(PRId8) \
&& !defined(@KWIML@_INT_BROKEN_PRId8)
# define @KWIML@_INT_PRId8 PRId8
#else
# define @KWIML@_INT_PRId8 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(SCNd8) \
&& !defined(@KWIML@_INT_BROKEN_SCNd8)
# define @KWIML@_INT_SCNd8 SCNd8
#elif !defined(@KWIML@_INT__NO_SCN8)
# define @KWIML@_INT_SCNd8 "hhd"
#endif
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(PRIi8) \
&& !defined(@KWIML@_INT_BROKEN_PRIi8)
# define @KWIML@_INT_PRIi8 PRIi8
#else
# define @KWIML@_INT_PRIi8 "i"
#endif
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(SCNi8) \
&& !defined(@KWIML@_INT_BROKEN_SCNi8)
# define @KWIML@_INT_SCNi8 SCNi8
#elif !defined(@KWIML@_INT__NO_SCN8)
# define @KWIML@_INT_SCNi8 "hhi"
#endif
/* 8-bit o, u, x, X */
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIo8) \
&& !defined(@KWIML@_INT_BROKEN_PRIo8)
# define @KWIML@_INT_PRIo8 PRIo8
#else
# define @KWIML@_INT_PRIo8 "o"
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(SCNo8) \
&& !defined(@KWIML@_INT_BROKEN_SCNo8)
# define @KWIML@_INT_SCNo8 SCNo8
#elif !defined(@KWIML@_INT__NO_SCN8)
# define @KWIML@_INT_SCNo8 "hho"
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIu8) \
&& !defined(@KWIML@_INT_BROKEN_PRIu8)
# define @KWIML@_INT_PRIu8 PRIu8
#else
# define @KWIML@_INT_PRIu8 "u"
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(SCNu8) \
&& !defined(@KWIML@_INT_BROKEN_SCNu8)
# define @KWIML@_INT_SCNu8 SCNu8
#elif !defined(@KWIML@_INT__NO_SCN8)
# define @KWIML@_INT_SCNu8 "hhu"
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIx8) \
&& !defined(@KWIML@_INT_BROKEN_PRIx8)
# define @KWIML@_INT_PRIx8 PRIx8
#else
# define @KWIML@_INT_PRIx8 "x"
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(SCNx8) \
&& !defined(@KWIML@_INT_BROKEN_SCNx8)
# define @KWIML@_INT_SCNx8 SCNx8
#elif !defined(@KWIML@_INT__NO_SCN8)
# define @KWIML@_INT_SCNx8 "hhx"
#endif
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIX8) \
&& !defined(@KWIML@_INT_BROKEN_PRIX8)
# define @KWIML@_INT_PRIX8 PRIX8
#else
# define @KWIML@_INT_PRIX8 "X"
#endif
/* 8-bit constants */
#if defined(INT8_C) && !defined(@KWIML@_INT_BROKEN_INT8_C)
# define @KWIML@_INT_INT8_C(c) INT8_C(c)
#else
# define @KWIML@_INT_INT8_C(c) c
#endif
#if defined(UINT8_C) && !defined(@KWIML@_INT_BROKEN_UINT8_C)
# define @KWIML@_INT_UINT8_C(c) UINT8_C(c)
#else
# define @KWIML@_INT_UINT8_C(c) c ## u
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_INT16_T)
# define @KWIML@_INT_int16_t int16_t
#else
# define @KWIML@_INT_int16_t signed short
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T)
# define @KWIML@_INT_uint16_t uint16_t
#else
# define @KWIML@_INT_uint16_t unsigned short
#endif
/* 16-bit d, i */
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(PRId16) \
&& !defined(@KWIML@_INT_BROKEN_PRId16)
# define @KWIML@_INT_PRId16 PRId16
#else
# define @KWIML@_INT_PRId16 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(SCNd16) \
&& !defined(@KWIML@_INT_BROKEN_SCNd16)
# define @KWIML@_INT_SCNd16 SCNd16
#else
# define @KWIML@_INT_SCNd16 "hd"
#endif
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(PRIi16) \
&& !defined(@KWIML@_INT_BROKEN_PRIi16)
# define @KWIML@_INT_PRIi16 PRIi16
#else
# define @KWIML@_INT_PRIi16 "i"
#endif
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(SCNi16) \
&& !defined(@KWIML@_INT_BROKEN_SCNi16)
# define @KWIML@_INT_SCNi16 SCNi16
#else
# define @KWIML@_INT_SCNi16 "hi"
#endif
/* 16-bit o, u, x, X */
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIo16) \
&& !defined(@KWIML@_INT_BROKEN_PRIo16)
# define @KWIML@_INT_PRIo16 PRIo16
#else
# define @KWIML@_INT_PRIo16 "o"
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(SCNo16) \
&& !defined(@KWIML@_INT_BROKEN_SCNo16)
# define @KWIML@_INT_SCNo16 SCNo16
#else
# define @KWIML@_INT_SCNo16 "ho"
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIu16) \
&& !defined(@KWIML@_INT_BROKEN_PRIu16)
# define @KWIML@_INT_PRIu16 PRIu16
#else
# define @KWIML@_INT_PRIu16 "u"
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(SCNu16) \
&& !defined(@KWIML@_INT_BROKEN_SCNu16)
# define @KWIML@_INT_SCNu16 SCNu16
#else
# define @KWIML@_INT_SCNu16 "hu"
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIx16) \
&& !defined(@KWIML@_INT_BROKEN_PRIx16)
# define @KWIML@_INT_PRIx16 PRIx16
#else
# define @KWIML@_INT_PRIx16 "x"
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(SCNx16) \
&& !defined(@KWIML@_INT_BROKEN_SCNx16)
# define @KWIML@_INT_SCNx16 SCNx16
#else
# define @KWIML@_INT_SCNx16 "hx"
#endif
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIX16) \
&& !defined(@KWIML@_INT_BROKEN_PRIX16)
# define @KWIML@_INT_PRIX16 PRIX16
#else
# define @KWIML@_INT_PRIX16 "X"
#endif
/* 16-bit constants */
#if defined(INT16_C) && !defined(@KWIML@_INT_BROKEN_INT16_C)
# define @KWIML@_INT_INT16_C(c) INT16_C(c)
#else
# define @KWIML@_INT_INT16_C(c) c
#endif
#if defined(UINT16_C) && !defined(@KWIML@_INT_BROKEN_UINT16_C)
# define @KWIML@_INT_UINT16_C(c) UINT16_C(c)
#else
# define @KWIML@_INT_UINT16_C(c) c ## u
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_INT32_T)
# define @KWIML@_INT_int32_t int32_t
#else
# define @KWIML@_INT_int32_t signed int
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T)
# define @KWIML@_INT_uint32_t uint32_t
#else
# define @KWIML@_INT_uint32_t unsigned int
#endif
/* 32-bit d, i */
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(PRId32) \
&& !defined(@KWIML@_INT_BROKEN_PRId32)
# define @KWIML@_INT_PRId32 PRId32
#else
# define @KWIML@_INT_PRId32 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(SCNd32) \
&& !defined(@KWIML@_INT_BROKEN_SCNd32)
# define @KWIML@_INT_SCNd32 SCNd32
#else
# define @KWIML@_INT_SCNd32 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(PRIi32) \
&& !defined(@KWIML@_INT_BROKEN_PRIi32)
# define @KWIML@_INT_PRIi32 PRIi32
#else
# define @KWIML@_INT_PRIi32 "i"
#endif
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(SCNi32) \
&& !defined(@KWIML@_INT_BROKEN_SCNi32)
# define @KWIML@_INT_SCNi32 SCNi32
#else
# define @KWIML@_INT_SCNi32 "i"
#endif
/* 32-bit o, u, x, X */
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIo32) \
&& !defined(@KWIML@_INT_BROKEN_PRIo32)
# define @KWIML@_INT_PRIo32 PRIo32
#else
# define @KWIML@_INT_PRIo32 "o"
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(SCNo32) \
&& !defined(@KWIML@_INT_BROKEN_SCNo32)
# define @KWIML@_INT_SCNo32 SCNo32
#else
# define @KWIML@_INT_SCNo32 "o"
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIu32) \
&& !defined(@KWIML@_INT_BROKEN_PRIu32)
# define @KWIML@_INT_PRIu32 PRIu32
#else
# define @KWIML@_INT_PRIu32 "u"
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(SCNu32) \
&& !defined(@KWIML@_INT_BROKEN_SCNu32)
# define @KWIML@_INT_SCNu32 SCNu32
#else
# define @KWIML@_INT_SCNu32 "u"
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIx32) \
&& !defined(@KWIML@_INT_BROKEN_PRIx32)
# define @KWIML@_INT_PRIx32 PRIx32
#else
# define @KWIML@_INT_PRIx32 "x"
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(SCNx32) \
&& !defined(@KWIML@_INT_BROKEN_SCNx32)
# define @KWIML@_INT_SCNx32 SCNx32
#else
# define @KWIML@_INT_SCNx32 "x"
#endif
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIX32) \
&& !defined(@KWIML@_INT_BROKEN_PRIX32)
# define @KWIML@_INT_PRIX32 PRIX32
#else
# define @KWIML@_INT_PRIX32 "X"
#endif
#if defined(__hpux) && defined(__GNUC__) && !defined(__LP64__) \
&& defined(__CONCAT__) && defined(__CONCAT_U__)
/* Some HPs define UINT32_C incorrectly and break GNU. */
# define @KWIML@_INT_BROKEN_UINT32_C
#endif
/* 32-bit constants */
#if defined(INT32_C) && !defined(@KWIML@_INT_BROKEN_INT32_C)
# define @KWIML@_INT_INT32_C(c) INT32_C(c)
#else
# define @KWIML@_INT_INT32_C(c) c
#endif
#if defined(UINT32_C) && !defined(@KWIML@_INT_BROKEN_UINT32_C)
# define @KWIML@_INT_UINT32_C(c) UINT32_C(c)
#else
# define @KWIML@_INT_UINT32_C(c) c ## u
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_INT64_T)
# define @KWIML@_INT_int64_t int64_t
#elif @KWIML@_ABI_SIZEOF_LONG == 8
# define @KWIML@_INT_int64_t signed long
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
# define @KWIML@_INT_int64_t signed long long
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
# define @KWIML@_INT_int64_t signed __int64
#elif defined(@KWIML@_INT_NO_ERROR_INT64_T)
# define @KWIML@_INT_NO_INT64_T
#else
# error "No type known for 'int64_t'."
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T)
# define @KWIML@_INT_uint64_t uint64_t
#elif @KWIML@_ABI_SIZEOF_LONG == 8
# define @KWIML@_INT_uint64_t unsigned long
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
# define @KWIML@_INT_uint64_t unsigned long long
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
# define @KWIML@_INT_uint64_t unsigned __int64
#elif defined(@KWIML@_INT_NO_ERROR_UINT64_T)
# define @KWIML@_INT_NO_UINT64_T
#else
# error "No type known for 'uint64_t'."
#endif
#if defined(__INTEL_COMPILER)
#elif defined(__BORLANDC__)
# define @KWIML@_INT__NO_FMTLL /* type 'long long' but not 'll' format */
# define @KWIML@_INT_BROKEN_INT64_C /* system macro defined incorrectly */
# define @KWIML@_INT_BROKEN_UINT64_C /* system macro defined incorrectly */
#elif defined(_MSC_VER) && _MSC_VER < 1400
# define @KWIML@_INT__NO_FMTLL /* type 'long long' but not 'll' format */
#endif
#if @KWIML@_ABI_SIZEOF_LONG == 8
# define @KWIML@_INT__FMT64 "l"
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
# if !defined(@KWIML@_INT__NO_FMTLL)
# define @KWIML@_INT__FMT64 "ll"
# else
# define @KWIML@_INT__FMT64 "I64"
# endif
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
# if defined(__BORLANDC__)
# define @KWIML@_INT__FMT64 "L"
# else
# define @KWIML@_INT__FMT64 "I64"
# endif
#endif
/* 64-bit d, i */
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(PRId64) \
&& !defined(@KWIML@_INT_BROKEN_PRId64)
# define @KWIML@_INT_PRId64 PRId64
#elif defined(@KWIML@_INT__FMT64)
# define @KWIML@_INT_PRId64 @KWIML@_INT__FMT64 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(SCNd64) \
&& !defined(@KWIML@_INT_BROKEN_SCNd64)
# define @KWIML@_INT_SCNd64 SCNd64
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
# define @KWIML@_INT_SCNd64 @KWIML@_INT__FMT64 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(PRIi64) \
&& !defined(@KWIML@_INT_BROKEN_PRIi64)
# define @KWIML@_INT_PRIi64 PRIi64
#elif defined(@KWIML@_INT__FMT64)
# define @KWIML@_INT_PRIi64 @KWIML@_INT__FMT64 "d"
#endif
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(SCNi64) \
&& !defined(@KWIML@_INT_BROKEN_SCNi64)
# define @KWIML@_INT_SCNi64 SCNi64
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
# define @KWIML@_INT_SCNi64 @KWIML@_INT__FMT64 "d"
#endif
/* 64-bit o, u, x, X */
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIo64) \
&& !defined(@KWIML@_INT_BROKEN_PRIo64)
# define @KWIML@_INT_PRIo64 PRIo64
#elif defined(@KWIML@_INT__FMT64)
# define @KWIML@_INT_PRIo64 @KWIML@_INT__FMT64 "o"
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(SCNo64) \
&& !defined(@KWIML@_INT_BROKEN_SCNo64)
# define @KWIML@_INT_SCNo64 SCNo64
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
# define @KWIML@_INT_SCNo64 @KWIML@_INT__FMT64 "o"
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIu64) \
&& !defined(@KWIML@_INT_BROKEN_PRIu64)
# define @KWIML@_INT_PRIu64 PRIu64
#elif defined(@KWIML@_INT__FMT64)
# define @KWIML@_INT_PRIu64 @KWIML@_INT__FMT64 "u"
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(SCNu64) \
&& !defined(@KWIML@_INT_BROKEN_SCNu64)
# define @KWIML@_INT_SCNu64 SCNu64
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
# define @KWIML@_INT_SCNu64 @KWIML@_INT__FMT64 "u"
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIx64) \
&& !defined(@KWIML@_INT_BROKEN_PRIx64)
# define @KWIML@_INT_PRIx64 PRIx64
#elif defined(@KWIML@_INT__FMT64)
# define @KWIML@_INT_PRIx64 @KWIML@_INT__FMT64 "x"
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(SCNx64) \
&& !defined(@KWIML@_INT_BROKEN_SCNx64)
# define @KWIML@_INT_SCNx64 SCNx64
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
# define @KWIML@_INT_SCNx64 @KWIML@_INT__FMT64 "x"
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIX64) \
&& !defined(@KWIML@_INT_BROKEN_PRIX64)
# define @KWIML@_INT_PRIX64 PRIX64
#elif defined(@KWIML@_INT__FMT64)
# define @KWIML@_INT_PRIX64 @KWIML@_INT__FMT64 "X"
#endif
/* 64-bit constants */
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(INT64_C) \
&& !defined(@KWIML@_INT_BROKEN_INT64_C)
# define @KWIML@_INT_INT64_C(c) INT64_C(c)
#elif @KWIML@_ABI_SIZEOF_LONG == 8
# define @KWIML@_INT_INT64_C(c) c ## l
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
# define @KWIML@_INT_INT64_C(c) c ## ll
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
# define @KWIML@_INT_INT64_C(c) c ## i64
#endif
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(UINT64_C) \
&& !defined(@KWIML@_INT_BROKEN_UINT64_C)
# define @KWIML@_INT_UINT64_C(c) UINT64_C(c)
#elif @KWIML@_ABI_SIZEOF_LONG == 8
# define @KWIML@_INT_UINT64_C(c) c ## ul
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
# define @KWIML@_INT_UINT64_C(c) c ## ull
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
# define @KWIML@_INT_UINT64_C(c) c ## ui64
#endif
/*--------------------------------------------------------------------------*/
#if defined(@KWIML@_INT_HAVE_INTPTR_T)
# define @KWIML@_INT_intptr_t intptr_t
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_intptr_t @KWIML@_INT_int32_t
#elif !defined(@KWIML@_INT_NO_INT64_T)
# define @KWIML@_INT_intptr_t @KWIML@_INT_int64_t
#elif defined(@KWIML@_INT_NO_ERROR_INTPTR_T)
# define @KWIML@_INT_NO_INTPTR_T
#else
# error "No type known for 'intptr_t'."
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T)
# define @KWIML@_INT_uintptr_t uintptr_t
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_uintptr_t @KWIML@_INT_uint32_t
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_uintptr_t @KWIML@_INT_uint64_t
#elif defined(@KWIML@_INT_NO_ERROR_UINTPTR_T)
# define @KWIML@_INT_NO_UINTPTR_T
#else
# error "No type known for 'uintptr_t'."
#endif
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(PRIdPTR) \
&& !defined(@KWIML@_INT_BROKEN_PRIdPTR)
# define @KWIML@_INT_PRIdPTR PRIdPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_PRIdPTR @KWIML@_INT_PRId32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_PRIdPTR @KWIML@_INT_PRId64
#endif
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(SCNdPTR) \
&& !defined(@KWIML@_INT_BROKEN_SCNdPTR)
# define @KWIML@_INT_SCNdPTR SCNdPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_SCNdPTR @KWIML@_INT_SCNd32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_SCNdPTR @KWIML@_INT_SCNd64
#endif
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(PRIiPTR) \
&& !defined(@KWIML@_INT_BROKEN_PRIiPTR)
# define @KWIML@_INT_PRIiPTR PRIiPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_PRIiPTR @KWIML@_INT_PRIi32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_PRIiPTR @KWIML@_INT_PRIi64
#endif
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(SCNiPTR) \
&& !defined(@KWIML@_INT_BROKEN_SCNiPTR)
# define @KWIML@_INT_SCNiPTR SCNiPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_SCNiPTR @KWIML@_INT_SCNi32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_SCNiPTR @KWIML@_INT_SCNi64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIoPTR) \
&& !defined(@KWIML@_INT_BROKEN_PRIoPTR)
# define @KWIML@_INT_PRIoPTR PRIoPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_PRIoPTR @KWIML@_INT_PRIo32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_PRIoPTR @KWIML@_INT_PRIo64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(SCNoPTR) \
&& !defined(@KWIML@_INT_BROKEN_SCNoPTR)
# define @KWIML@_INT_SCNoPTR SCNoPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_SCNoPTR @KWIML@_INT_SCNo32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_SCNoPTR @KWIML@_INT_SCNo64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIuPTR) \
&& !defined(@KWIML@_INT_BROKEN_PRIuPTR)
# define @KWIML@_INT_PRIuPTR PRIuPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_PRIuPTR @KWIML@_INT_PRIu32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_PRIuPTR @KWIML@_INT_PRIu64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(SCNuPTR) \
&& !defined(@KWIML@_INT_BROKEN_SCNuPTR)
# define @KWIML@_INT_SCNuPTR SCNuPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_SCNuPTR @KWIML@_INT_SCNu32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_SCNuPTR @KWIML@_INT_SCNu64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIxPTR) \
&& !defined(@KWIML@_INT_BROKEN_PRIxPTR)
# define @KWIML@_INT_PRIxPTR PRIxPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_PRIxPTR @KWIML@_INT_PRIx32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_PRIxPTR @KWIML@_INT_PRIx64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(SCNxPTR) \
&& !defined(@KWIML@_INT_BROKEN_SCNxPTR)
# define @KWIML@_INT_SCNxPTR SCNxPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_SCNxPTR @KWIML@_INT_SCNx32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_SCNxPTR @KWIML@_INT_SCNx64
#endif
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIXPTR) \
&& !defined(@KWIML@_INT_BROKEN_PRIXPTR)
# define @KWIML@_INT_PRIXPTR PRIXPTR
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
# define @KWIML@_INT_PRIXPTR @KWIML@_INT_PRIX32
#elif !defined(@KWIML@_INT_NO_UINT64_T)
# define @KWIML@_INT_PRIXPTR @KWIML@_INT_PRIX64
#endif
/*--------------------------------------------------------------------------*/
#if !defined(@KWIML@_INT_NO_VERIFY)
#define @KWIML@_INT__VERIFY(n, x, y) extern int (*n)[x]; extern int (*n)[y]
#define @KWIML@_INT__VERIFY_BOOL(m, b) @KWIML@_INT__VERIFY(m##__VERIFY__, 2, (b)?2:3)
#define @KWIML@_INT__VERIFY_TYPE(t, s) @KWIML@_INT__VERIFY(t##__VERIFY__, s, sizeof(t))
#define @KWIML@_INT__VERIFY_SIGN(t, u, o) @KWIML@_INT__VERIFY_BOOL(t##__SIGN, (t)((u)1 << ((sizeof(t)<<3)-1)) o 0)
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int8_t, 1);
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint8_t, 1);
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int16_t, 2);
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint16_t, 2);
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int32_t, 4);
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint32_t, 4);
#if !defined(@KWIML@_INT_NO_INT64_T)
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int64_t, 8);
#endif
#if !defined(@KWIML@_INT_NO_UINT64_T)
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint64_t, 8);
#endif
#if !defined(@KWIML@_INT_NO_INTPTR_T)
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_intptr_t, sizeof(void*));
#endif
#if !defined(@KWIML@_INT_NO_UINTPTR_T)
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uintptr_t, sizeof(void*));
#endif
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int8_t, @KWIML@_INT_uint8_t, <);
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint8_t, @KWIML@_INT_uint8_t, >);
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int16_t, @KWIML@_INT_uint16_t, <);
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint16_t, @KWIML@_INT_uint16_t, >);
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int32_t, @KWIML@_INT_uint32_t, <);
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint32_t, @KWIML@_INT_uint32_t, >);
#if !defined(@KWIML@_INT_NO_INT64_T)
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int64_t, @KWIML@_INT_uint64_t, <);
#endif
#if !defined(@KWIML@_INT_NO_UINT64_T)
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint64_t, @KWIML@_INT_uint64_t, >);
#endif
#if !defined(@KWIML@_INT_NO_INTPTR_T)
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_intptr_t, @KWIML@_INT_uintptr_t, <);
#endif
#if !defined(@KWIML@_INT_NO_UINTPTR_T)
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uintptr_t, @KWIML@_INT_uintptr_t, >);
#endif
#undef @KWIML@_INT__VERIFY_SIGN
#undef @KWIML@_INT__VERIFY_TYPE
#undef @KWIML@_INT__VERIFY_BOOL
#undef @KWIML@_INT__VERIFY
#endif
#endif

36
Utilities/KWIML/README.md Normal file
View File

@ -0,0 +1,36 @@
Kitware Information Macro Library (KWIML)
=========================================
KWIML provides header files that use preprocessor tests to detect and
provide information about the compiler and its target architecture.
The headers contain no configuration-time test results and thus may
be installed into an architecture-independent include directory.
This makes them suitable for use in the public interface of any package.
The following headers are provided. See header comments for details:
* [kwiml/abi.h][]: Fundamental type size and representation.
* [kwiml/int.h][]: Fixed-size integer types and format specifiers.
* [kwiml/version.h][]: Information about this version of KWIML.
The [test][] subdirectory builds tests that verify correctness of the
information provided by each header.
License
=======
KWIML is distributed under the OSI-approved 3-clause BSD License.
Files used only for build and test purposes contain a copyright notice and
reference [Copyright.txt][] for details. Headers meant for installation and
distribution outside the source tree come with full inlined copies of the
copyright notice and license text. This makes them suitable for distribution
with any package under compatible license terms.
[Copyright.txt]: Copyright.txt
[kwiml/abi.h]: include/kwiml/abi.h
[kwiml/int.h]: include/kwiml/int.h
[kwiml/version.h]: src/version.h.in
[test]: test/

View File

@ -1,29 +0,0 @@
KWIML - The Kitware Information Macro Library
KWIML provides header files that use preprocessor tests to detect and
provide information about the compiler and its target architecture. The
headers contain no configuration-time test results and thus may be
installed into an architecture-independent include directory. This
makes them suitable for use in the public interface of any package.
This source tree is intended for distribution inside the source trees of
other packages. In order to avoid name collisions among multiple
packages the KWIML headers are configured with a per-package prefix on
both the header locations and the macros they define. See comments in
CMakeLists.txt for instructions to include KWIML inside another project.
The entire KWIML source tree is distributed under the OSI-approved
3-clause BSD License. Files used only for build and test purposes
contain a copyright notice and reference Copyright.txt for details.
Headers meant for installation and distribution outside the source tree
come with full inlined copies of the copyright notice and license text.
This makes them suitable for distribution with any package under
compatible license terms.
The following components are provided. See header comments for details:
ABI.h = Fundamental type size and representation
INT.h = Fixed-size integer types and format specifiers
The "test" subdirectory builds tests that verify correctness of the
information provided by each header.

View File

@ -0,0 +1,562 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2015 Kitware, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Kitware, Inc. nor the names of its contributors
may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================================*/
/*
This header defines macros with information about the C ABI.
Only information that can be determined using the preprocessor at
compilation time is available. No try-compile results may be added
here. Instead we memorize results on platforms of interest.
An includer may optionally define the following macros to suppress errors:
KWIML_ABI_NO_VERIFY = skip verification declarations
KWIML_ABI_NO_ERROR_CHAR_SIGN = signedness of 'char' may be unknown
KWIML_ABI_NO_ERROR_LONG_LONG = existence of 'long long' may be unknown
KWIML_ABI_NO_ERROR_ENDIAN = byte order of CPU may be unknown
An includer may test the following macros after inclusion:
KWIML_ABI_VERSION = interface version number # of this header
KWIML_ABI_SIZEOF_DATA_PTR = sizeof(void*)
KWIML_ABI_SIZEOF_CODE_PTR = sizeof(void(*)(void))
KWIML_ABI_SIZEOF_FLOAT = sizeof(float)
KWIML_ABI_SIZEOF_DOUBLE = sizeof(double)
KWIML_ABI_SIZEOF_CHAR = sizeof(char)
KWIML_ABI_SIZEOF_SHORT = sizeof(short)
KWIML_ABI_SIZEOF_INT = sizeof(int)
KWIML_ABI_SIZEOF_LONG = sizeof(long)
KWIML_ABI_SIZEOF_LONG_LONG = sizeof(long long) or 0 if not a type
Undefined if existence is unknown and error suppression macro
KWIML_ABI_NO_ERROR_LONG_LONG was defined.
KWIML_ABI_SIZEOF___INT64 = 8 if '__int64' exists or 0 if not
Undefined if existence is unknown.
KWIML_ABI___INT64_IS_LONG = 1 if '__int64' is 'long' (same type)
Undefined otherwise.
KWIML_ABI___INT64_IS_LONG_LONG = 1 if '__int64' is 'long long' (same type)
Undefined otherwise.
KWIML_ABI___INT64_IS_UNIQUE = 1 if '__int64' is a distinct type
Undefined otherwise.
KWIML_ABI_CHAR_IS_UNSIGNED = 1 if 'char' is unsigned, else undefined
KWIML_ABI_CHAR_IS_SIGNED = 1 if 'char' is signed, else undefined
One of these is defined unless signedness of 'char' is unknown and
error suppression macro KWIML_ABI_NO_ERROR_CHAR_SIGN was defined.
KWIML_ABI_ENDIAN_ID_BIG = id for big-endian (always defined)
KWIML_ABI_ENDIAN_ID_LITTLE = id for little-endian (always defined)
KWIML_ABI_ENDIAN_ID = id of byte order of target CPU
Defined to KWIML_ABI_ENDIAN_ID_BIG or KWIML_ABI_ENDIAN_ID_LITTLE
unless byte order is unknown and error suppression macro
KWIML_ABI_NO_ERROR_ENDIAN was defined.
We verify most results using dummy "extern" declarations that are
invalid if the macros are wrong. Verification is disabled if
suppression macro KWIML_ABI_NO_VERIFY was defined.
*/
#define KWIML_ABI_private_VERSION 1
/* Guard definition of this version. */
#ifndef KWIML_ABI_detail_DEFINED_VERSION_1
# define KWIML_ABI_detail_DEFINED_VERSION_1 1
# define KWIML_ABI_private_DO_DEFINE
#endif
/* Guard verification of this version. */
#if !defined(KWIML_ABI_NO_VERIFY)
# ifndef KWIML_ABI_detail_VERIFIED_VERSION_1
# define KWIML_ABI_detail_VERIFIED_VERSION_1
# define KWIML_ABI_private_DO_VERIFY
# endif
#endif
#ifdef KWIML_ABI_private_DO_DEFINE
#undef KWIML_ABI_private_DO_DEFINE
/* Define version as most recent of those included. */
#if !defined(KWIML_ABI_VERSION) || KWIML_ABI_VERSION < KWIML_ABI_private_VERSION
# undef KWIML_ABI_VERSION
# define KWIML_ABI_VERSION 1
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_DATA_PTR)
# if defined(__SIZEOF_POINTER__)
# define KWIML_ABI_SIZEOF_DATA_PTR __SIZEOF_POINTER__
# elif defined(_SIZE_PTR)
# define KWIML_ABI_SIZEOF_DATA_PTR (_SIZE_PTR >> 3)
# elif defined(_LP64) || defined(__LP64__)
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(_ILP32)
# define KWIML_ABI_SIZEOF_DATA_PTR 4
# elif defined(__64BIT__) /* IBM XL */
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(_M_X64)
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(__ia64)
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(__sparcv9)
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(__x86_64) || defined(__x86_64__)
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(__amd64) || defined(__amd64__)
# define KWIML_ABI_SIZEOF_DATA_PTR 8
# elif defined(__i386) || defined(__i386__)
# define KWIML_ABI_SIZEOF_DATA_PTR 4
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_DATA_PTR)
# define KWIML_ABI_SIZEOF_DATA_PTR 4
#endif
#if !defined(KWIML_ABI_SIZEOF_CODE_PTR)
# define KWIML_ABI_SIZEOF_CODE_PTR KWIML_ABI_SIZEOF_DATA_PTR
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_CHAR)
# define KWIML_ABI_SIZEOF_CHAR 1
#endif
#if !defined(KWIML_ABI_CHAR_IS_UNSIGNED) && !defined(KWIML_ABI_CHAR_IS_SIGNED)
# if defined(__CHAR_UNSIGNED__) /* GNU, some IBM XL, others? */
# define KWIML_ABI_CHAR_IS_UNSIGNED 1
# elif defined(_CHAR_UNSIGNED) /* Intel, IBM XL, MSVC, Borland, others? */
# define KWIML_ABI_CHAR_IS_UNSIGNED 1
# elif defined(_CHAR_SIGNED) /* IBM XL, others? */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(__CHAR_SIGNED__) /* IBM XL, Watcom, others? */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(__SIGNED_CHARS__) /* EDG, Intel, SGI MIPSpro */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(_CHAR_IS_SIGNED) /* Some SunPro, others? */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(_CHAR_IS_UNSIGNED) /* SunPro, others? */
# define KWIML_ABI_CHAR_IS_UNSIGNED 1
# elif defined(__GNUC__) /* GNU default */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* SunPro default */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(__HP_cc) || defined(__HP_aCC) /* HP default (unless +uc) */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(_SGI_COMPILER_VERSION) /* SGI MIPSpro default */
# define KWIML_ABI_CHAR_IS_UNSIGNED 1
# elif defined(__PGIC__) /* PGI default */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(_MSC_VER) /* MSVC default */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(__WATCOMC__) /* Watcom default */
# define KWIML_ABI_CHAR_IS_UNSIGNED 1
# elif defined(__BORLANDC__) /* Borland default */
# define KWIML_ABI_CHAR_IS_SIGNED 1
# elif defined(__hpux) /* Old HP: no __HP_cc/__HP_aCC/__GNUC__ above */
# define KWIML_ABI_CHAR_IS_SIGNED 1 /* (unless +uc) */
# endif
#endif
#if !defined(KWIML_ABI_CHAR_IS_UNSIGNED) && !defined(KWIML_ABI_CHAR_IS_SIGNED) \
&& !defined(KWIML_ABI_NO_ERROR_CHAR_SIGN)
# error "Signedness of 'char' unknown."
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_SHORT)
# if defined(__SIZEOF_SHORT__)
# define KWIML_ABI_SIZEOF_SHORT __SIZEOF_SHORT__
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_SHORT)
# define KWIML_ABI_SIZEOF_SHORT 2
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_INT)
# if defined(__SIZEOF_INT__)
# define KWIML_ABI_SIZEOF_INT __SIZEOF_INT__
# elif defined(_SIZE_INT)
# define KWIML_ABI_SIZEOF_INT (_SIZE_INT >> 3)
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_INT)
# define KWIML_ABI_SIZEOF_INT 4
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_LONG)
# if defined(__SIZEOF_LONG__)
# define KWIML_ABI_SIZEOF_LONG __SIZEOF_LONG__
# elif defined(_SIZE_LONG)
# define KWIML_ABI_SIZEOF_LONG (_SIZE_LONG >> 3)
# elif defined(__LONG_MAX__)
# if __LONG_MAX__ == 0x7fffffff
# define KWIML_ABI_SIZEOF_LONG 4
# elif __LONG_MAX__>>32 == 0x7fffffff
# define KWIML_ABI_SIZEOF_LONG 8
# endif
# elif defined(_MSC_VER) /* MSVC and Intel on Windows */
# define KWIML_ABI_SIZEOF_LONG 4
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_LONG)
# define KWIML_ABI_SIZEOF_LONG KWIML_ABI_SIZEOF_DATA_PTR
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_LONG_LONG)
# if defined(__SIZEOF_LONG_LONG__)
# define KWIML_ABI_SIZEOF_LONG_LONG __SIZEOF_LONG_LONG__
# elif defined(__LONG_LONG_MAX__)
# if __LONG_LONG_MAX__ == 0x7fffffff
# define KWIML_ABI_SIZEOF_LONG_LONG 4
# elif __LONG_LONG_MAX__>>32 == 0x7fffffff
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# endif
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_LONG_LONG)
# if defined(_LONGLONG) /* SGI, some GNU, perhaps others. */ \
&& !defined(_MSC_VER)
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(_LONG_LONG) /* IBM XL, perhaps others. */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__NO_LONG_LONG) /* EDG */
# define KWIML_ABI_SIZEOF_LONG_LONG 0
# elif defined(__cplusplus) && __cplusplus > 199711L /* C++0x */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* SunPro */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__HP_cc) || defined(__HP_aCC) /* HP */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__PGIC__) /* PGI */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__WATCOMC__) /* Watcom */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__INTEL_COMPILER) /* Intel */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__BORLANDC__) /* Borland */
# if __BORLANDC__ >= 0x0560
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# else
# define KWIML_ABI_SIZEOF_LONG_LONG 0
# endif
# elif defined(_MSC_VER) /* Microsoft */
# if _MSC_VER >= 1310
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# else
# define KWIML_ABI_SIZEOF_LONG_LONG 0
# endif
# elif defined(__GNUC__) /* GNU */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# elif defined(__hpux) /* Old HP: no __HP_cc/__HP_aCC/__GNUC__ above */
# define KWIML_ABI_SIZEOF_LONG_LONG 8
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_LONG_LONG) && !defined(KWIML_ABI_NO_ERROR_LONG_LONG)
# error "Existence of 'long long' unknown."
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF___INT64)
# if defined(__INTEL_COMPILER)
# define KWIML_ABI_SIZEOF___INT64 8
# elif defined(_MSC_VER)
# define KWIML_ABI_SIZEOF___INT64 8
# elif defined(__BORLANDC__)
# define KWIML_ABI_SIZEOF___INT64 8
# else
# define KWIML_ABI_SIZEOF___INT64 0
# endif
#endif
#if defined(KWIML_ABI_SIZEOF___INT64) && KWIML_ABI_SIZEOF___INT64 > 0
# if KWIML_ABI_SIZEOF_LONG == 8
# define KWIML_ABI___INT64_IS_LONG 1
# elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
# define KWIML_ABI___INT64_IS_LONG_LONG 1
# else
# define KWIML_ABI___INT64_IS_UNIQUE 1
# endif
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_FLOAT)
# if defined(__SIZEOF_FLOAT__)
# define KWIML_ABI_SIZEOF_FLOAT __SIZEOF_FLOAT__
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_FLOAT)
# define KWIML_ABI_SIZEOF_FLOAT 4
#endif
/*--------------------------------------------------------------------------*/
#if !defined(KWIML_ABI_SIZEOF_DOUBLE)
# if defined(__SIZEOF_DOUBLE__)
# define KWIML_ABI_SIZEOF_DOUBLE __SIZEOF_DOUBLE__
# endif
#endif
#if !defined(KWIML_ABI_SIZEOF_DOUBLE)
# define KWIML_ABI_SIZEOF_DOUBLE 8
#endif
/*--------------------------------------------------------------------------*/
/* Identify possible endian cases. The macro KWIML_ABI_ENDIAN_ID will be
defined to one of these, or undefined if unknown. */
#if !defined(KWIML_ABI_ENDIAN_ID_BIG)
# define KWIML_ABI_ENDIAN_ID_BIG 4321
#endif
#if !defined(KWIML_ABI_ENDIAN_ID_LITTLE)
# define KWIML_ABI_ENDIAN_ID_LITTLE 1234
#endif
#if KWIML_ABI_ENDIAN_ID_BIG == KWIML_ABI_ENDIAN_ID_LITTLE
# error "KWIML_ABI_ENDIAN_ID_BIG == KWIML_ABI_ENDIAN_ID_LITTLE"
#endif
#if defined(KWIML_ABI_ENDIAN_ID) /* Skip #elif cases if already defined. */
/* Use dedicated symbols if the compiler defines them. Do this first
because some architectures allow runtime byte order selection by
the operating system (values for such architectures below are
guesses for compilers that do not define a dedicated symbol).
Ensure that only one is defined in case the platform or a header
defines both as possible values for some third symbol. */
#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
#elif defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
#elif defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* Alpha */
#elif defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* Arm */
#elif defined(__arm__)
# if !defined(__ARMEB__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
# else
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
# endif
/* Intel x86 */
#elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
#elif defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
#elif defined(__MWERKS__) && defined(__INTEL__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* Intel x86-64 */
#elif defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
#elif defined(__amd64) || defined(__amd64__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* Intel Architecture-64 (Itanium) */
#elif defined(__ia64) || defined(__ia64__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
#elif defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* PowerPC */
#elif defined(__powerpc) || defined(__powerpc__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
#elif defined(__ppc) || defined(__ppc__) || defined(__POWERPC__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* SPARC */
#elif defined(__sparc) || defined(__sparc__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* HP/PA RISC */
#elif defined(__hppa) || defined(__hppa__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* Motorola 68k */
#elif defined(__m68k__) || defined(M68000)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* MIPSel (MIPS little endian) */
#elif defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* MIPSeb (MIPS big endian) */
#elif defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* MIPS (fallback, big endian) */
#elif defined(__mips) || defined(__mips__) || defined(__MIPS__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* NIOS2 */
#elif defined(__NIOS2__) || defined(__NIOS2) || defined(__nios2__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* OpenRISC 1000 */
#elif defined(__or1k__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* RS/6000 */
#elif defined(__THW_RS600) || defined(_IBMR2) || defined(_POWER)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
#elif defined(_ARCH_PWR) || defined(_ARCH_PWR2)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* System/370 */
#elif defined(__370__) || defined(__THW_370__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* System/390 */
#elif defined(__s390__) || defined(__s390x__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* z/Architecture */
#elif defined(__SYSC_ZARCH__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* VAX */
#elif defined(__vax__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
/* Aarch64 */
#elif defined(__aarch64__)
# if !defined(__AARCH64EB__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
# else
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
# endif
/* Xtensa */
#elif defined(__XTENSA_EB__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
#elif defined(__XTENSA_EL__)
# define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
/* Unknown CPU */
#elif !defined(KWIML_ABI_NO_ERROR_ENDIAN)
# error "Byte order of target CPU unknown."
#endif
#endif /* KWIML_ABI_private_DO_DEFINE */
/*--------------------------------------------------------------------------*/
#ifdef KWIML_ABI_private_DO_VERIFY
#undef KWIML_ABI_private_DO_VERIFY
#if defined(_MSC_VER)
# pragma warning (push)
# pragma warning (disable:4310) /* cast truncates constant value */
#endif
#define KWIML_ABI_private_VERIFY(n, x, y) KWIML_ABI_private_VERIFY_0(KWIML_ABI_private_VERSION, n, x, y)
#define KWIML_ABI_private_VERIFY_0(V, n, x, y) KWIML_ABI_private_VERIFY_1(V, n, x, y)
#define KWIML_ABI_private_VERIFY_1(V, n, x, y) extern int (*n##_v##V)[x]; extern int (*n##_v##V)[y]
#define KWIML_ABI_private_VERIFY_SAME_IMPL(n, x, y) KWIML_ABI_private_VERIFY_SAME_IMPL_0(KWIML_ABI_private_VERSION, n, x, y)
#define KWIML_ABI_private_VERIFY_SAME_IMPL_0(V, n, x, y) KWIML_ABI_private_VERIFY_SAME_IMPL_1(V, n, x, y)
#define KWIML_ABI_private_VERIFY_SAME_IMPL_1(V, n, x, y) extern int (*n##_v##V)(x*); extern int (*n##_v##V)(y*)
#define KWIML_ABI_private_VERIFY_DIFF_IMPL(n, x, y) KWIML_ABI_private_VERIFY_DIFF_IMPL_0(KWIML_ABI_private_VERSION, n, x, y)
#define KWIML_ABI_private_VERIFY_DIFF_IMPL_0(V, n, x, y) KWIML_ABI_private_VERIFY_DIFF_IMPL_1(V, n, x, y)
#if defined(__cplusplus)
# define KWIML_ABI_private_VERIFY_DIFF_IMPL_1(V, n, x, y) extern int* n##_v##V(x*); extern char* n##_v##V(y*)
#else
# define KWIML_ABI_private_VERIFY_DIFF_IMPL_1(V, n, x, y) extern int* n##_v##V(x*) /* TODO: possible? */
#endif
#define KWIML_ABI_private_VERIFY_BOOL(m, b) KWIML_ABI_private_VERIFY(KWIML_ABI_detail_VERIFY_##m, 2, (b)?2:3)
#define KWIML_ABI_private_VERIFY_SIZE(m, t) KWIML_ABI_private_VERIFY(KWIML_ABI_detail_VERIFY_##m, m, sizeof(t))
#define KWIML_ABI_private_VERIFY_SAME(m, x, y) KWIML_ABI_private_VERIFY_SAME_IMPL(KWIML_ABI_detail_VERIFY_##m, x, y)
#define KWIML_ABI_private_VERIFY_DIFF(m, x, y) KWIML_ABI_private_VERIFY_DIFF_IMPL(KWIML_ABI_detail_VERIFY_##m, x, y)
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_DATA_PTR, int*);
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_CODE_PTR, int(*)(int));
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_CHAR, char);
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_SHORT, short);
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_INT, int);
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_LONG, long);
#if defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG > 0
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_LONG_LONG, long long);
#endif
#if defined(KWIML_ABI_SIZEOF___INT64) && KWIML_ABI_SIZEOF___INT64 > 0
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF___INT64, __int64);
#endif
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_FLOAT, float);
KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_DOUBLE, double);
#if defined(KWIML_ABI___INT64_IS_LONG)
KWIML_ABI_private_VERIFY_SAME(KWIML_ABI___INT64_IS_LONG, __int64, long);
#elif defined(KWIML_ABI___INT64_IS_LONG_LONG)
KWIML_ABI_private_VERIFY_SAME(KWIML_ABI___INT64_IS_LONG_LONG, __int64, long long);
#elif defined(KWIML_ABI_SIZEOF___INT64) && KWIML_ABI_SIZEOF___INT64 > 0
KWIML_ABI_private_VERIFY_DIFF(KWIML_ABI___INT64_NOT_LONG, __int64, long);
# if defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG > 0
KWIML_ABI_private_VERIFY_DIFF(KWIML_ABI___INT64_NOT_LONG_LONG, __int64, long long);
# endif
#endif
#if defined(KWIML_ABI_CHAR_IS_UNSIGNED)
KWIML_ABI_private_VERIFY_BOOL(KWIML_ABI_CHAR_IS_UNSIGNED, (char)0x80 > 0);
#elif defined(KWIML_ABI_CHAR_IS_SIGNED)
KWIML_ABI_private_VERIFY_BOOL(KWIML_ABI_CHAR_IS_SIGNED, (char)0x80 < 0);
#endif
#undef KWIML_ABI_private_VERIFY_DIFF
#undef KWIML_ABI_private_VERIFY_SAME
#undef KWIML_ABI_private_VERIFY_SIZE
#undef KWIML_ABI_private_VERIFY_BOOL
#undef KWIML_ABI_private_VERIFY_DIFF_IMPL_1
#undef KWIML_ABI_private_VERIFY_DIFF_IMPL_0
#undef KWIML_ABI_private_VERIFY_DIFF_IMPL
#undef KWIML_ABI_private_VERIFY_SAME_IMPL_1
#undef KWIML_ABI_private_VERIFY_SAME_IMPL_0
#undef KWIML_ABI_private_VERIFY_SAME_IMPL
#undef KWIML_ABI_private_VERIFY_1
#undef KWIML_ABI_private_VERIFY_0
#undef KWIML_ABI_private_VERIFY
#if defined(_MSC_VER)
# pragma warning (pop)
#endif
#endif /* KWIML_ABI_private_DO_VERIFY */
#undef KWIML_ABI_private_VERSION

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
include(${CMAKE_CURRENT_LIST_DIR}/kwiml-targets.cmake)

View File

@ -0,0 +1,59 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2015 Kitware, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Kitware, Inc. nor the names of its contributors
may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================================*/
#ifndef KWIML_VERSION_H
#define KWIML_VERSION_H
/*
This header defines macros with information about this version of KWIML.
An includer may test the following macros after inclusion:
KWIML_VERSION = KWIML version number encoded in an integer as
`printf("%d%03d%03d", MAJOR, MINOR, PATCH)`.
MAJOR is incremented on incompatible changes.
MINOR is incremented on interface additions.
PATCH is incremented on implementation updates.
KWIML_VERSION_STRING = KWIML version number in string formatted as
`printf("%d.%d.%d", MAJOR, MINOR PATCH)`.
KWIML_VERSION_HAS_ABI_H = header 'kwiml/abi.h' is available
KWIML_VERSION_HAS_INT_H = header 'kwiml/int.h' is available
*/
#define KWIML_VERSION @KWIML_VERSION_DECIMAL@
#define KWIML_VERSION_STRING "@KWIML_VERSION@"
#define KWIML_VERSION_HAS_ABI_H 1
#define KWIML_VERSION_HAS_INT_H 1
#endif

View File

@ -1,22 +1,11 @@
#=============================================================================
# Kitware Information Macro Library
# Copyright 2010-2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
# Copyright Kitware, Inc.
# Distributed under the OSI-approved BSD 3-Clause 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.
#=============================================================================
set(test_defs KWIML_NAMESPACE=${KWIML})
# Tell CMake how to follow dependencies of sources in this directory.
set_property(DIRECTORY
PROPERTY IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
"KWIML_HEADER(%)=<${KWIML}/%>"
)
if(NOT KWIML_TEST_PREFIX)
set(KWIML_TEST_PREFIX kwiml)
endif()
# Suppress printf/scanf format warnings; we test if the sizes match.
foreach(lang C CXX)
@ -33,38 +22,33 @@ endif()
if(KWIML_LANGUAGE_C)
list(APPEND test_defs KWIML_LANGUAGE_C)
list(APPEND test_srcs
test_ABI_C.c
test_INT_C.c
test_abi_C.c
test_int_C.c
test_include_C.c
)
endif()
if(KWIML_LANGUAGE_CXX)
list(APPEND test_defs KWIML_LANGUAGE_CXX)
list(APPEND test_srcs
test_ABI_CXX.cxx
test_INT_CXX.cxx
test_abi_CXX.cxx
test_int_CXX.cxx
test_include_CXX.cxx
)
endif()
foreach(th test_ABI_endian test_INT_format)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${th}.h.in
${CMAKE_CURRENT_BINARY_DIR}/${th}.h @ONLY)
endforeach()
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
add_executable(${KWIML}_test ${test_srcs})
set_property(TARGET ${KWIML}_test PROPERTY COMPILE_DEFINITIONS ${test_defs})
set_property(TARGET ${KWIML}_test PROPERTY
add_executable(kwiml_test ${test_srcs})
set_property(TARGET kwiml_test PROPERTY COMPILE_DEFINITIONS ${test_defs})
set_property(TARGET kwiml_test PROPERTY
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_test(${KWIML}.test ${CMAKE_CURRENT_BINARY_DIR}/${KWIML}_test)
set_property(TEST ${KWIML}.test PROPERTY LABELS ${KWIML_LABELS_TEST})
add_test(NAME ${KWIML_TEST_PREFIX}.test COMMAND kwiml_test)
set_property(TEST ${KWIML_TEST_PREFIX}.test PROPERTY LABELS ${KWIML_TEST_LABELS})
# Xcode 2.x forgets to create the output directory before linking
# the individual architectures.
if(CMAKE_OSX_ARCHITECTURES AND XCODE
AND NOT "${XCODE_VERSION}" MATCHES "^[^12]")
add_custom_command(
TARGET ${KWIML}_test
TARGET kwiml_test
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}"
)
endif()

View File

@ -1,21 +1,15 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#ifdef __cplusplus
extern "C" {
#endif
extern int test_ABI_C(void);
extern int test_INT_C(void);
extern int test_ABI_CXX(void);
extern int test_INT_CXX(void);
extern int test_abi_C(void);
extern int test_int_C(void);
extern int test_abi_CXX(void);
extern int test_int_CXX(void);
extern int test_include_C(void);
extern int test_include_CXX(void);
#ifdef __cplusplus
@ -26,13 +20,13 @@ int main(void)
{
int result = 1;
#ifdef KWIML_LANGUAGE_C
result = test_ABI_C() && result;
result = test_INT_C() && result;
result = test_abi_C() && result;
result = test_int_C() && result;
result = test_include_C() && result;
#endif
#ifdef KWIML_LANGUAGE_CXX
result = test_ABI_CXX() && result;
result = test_INT_CXX() && result;
result = test_abi_CXX() && result;
result = test_int_CXX() && result;
result = test_include_CXX() && result;
#endif
return result? 0 : 1;

View File

@ -1,12 +1,6 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include "test.c"

View File

@ -1,32 +1,11 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
#ifndef KWIML_NAMESPACE
# error "Do not include test.h outside of KWIML test files."
#endif
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#ifndef KWIML_TEST_H
#define KWIML_TEST_H
/*
Define KWIML_HEADER macro to help the test files include kwiml
headers from the configured namespace directory. The macro can be
used like this:
#include KWIML_HEADER(ABI.h)
*/
#define KWIML_HEADER(x) KWIML_HEADER0(KWIML_NAMESPACE/x)
#define KWIML_HEADER0(x) KWIML_HEADER1(x)
#define KWIML_HEADER1(x) <x>
/* Quiet MS standard library deprecation warnings. */
#ifndef _CRT_SECURE_NO_DEPRECATE
# define _CRT_SECURE_NO_DEPRECATE

View File

@ -1,22 +0,0 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
#include "test.h"
#include KWIML_HEADER(ABI.h)
#include "test_ABI_endian.h"
int test_ABI_C(void)
{
if(!test_ABI_endian())
{
return 0;
}
return 1;
}

View File

@ -1,47 +0,0 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
#include <stdio.h>
#ifdef __cplusplus
# define LANG "C++ "
#else
# define LANG "C "
#endif
static int test_ABI_endian(void)
{
int result = 1;
{
#if defined(@KWIML@_ABI_ENDIAN_ID)
int expect;
union { short s; unsigned char c[sizeof(short)]; } x;
x.s = 1;
expect = (x.c[0] == 1 ?
@KWIML@_ABI_ENDIAN_ID_LITTLE : @KWIML@_ABI_ENDIAN_ID_BIG);
printf(LANG "@KWIML@_ABI_ENDIAN_ID: expected [%d], got [%d]",
expect, @KWIML@_ABI_ENDIAN_ID);
if(@KWIML@_ABI_ENDIAN_ID == expect)
{
printf(", PASSED\n");
}
else
{
printf(", FAILED\n");
result = 0;
}
#else
printf(LANG "@KWIML@_ABI_ENDIAN_ID: unknown, FAILED\n");
result = 0;
#endif
}
return result;
}

View File

@ -1,22 +0,0 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
#include "test.h"
#include KWIML_HEADER(INT.h)
#include "test_INT_format.h"
int test_INT_C(void)
{
if(!test_INT_format())
{
return 0;
}
return 1;
}

View File

@ -1,22 +0,0 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
#include "test.h"
#include KWIML_HEADER(INT.h)
#include "test_INT_format.h"
extern "C" int test_INT_CXX(void)
{
if(!test_INT_format())
{
return 0;
}
return 1;
}

View File

@ -0,0 +1,19 @@
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include "test.h"
#include "../include/kwiml/abi.h"
#include "test_abi_endian.h"
#ifndef KWIML_ABI_VERSION
# error "KWIML_ABI_VERSION not defined!"
#endif
int test_abi_C(void)
{
if(!test_abi_endian())
{
return 0;
}
return 1;
}

View File

@ -0,0 +1,19 @@
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include "test.h"
#include "../include/kwiml/abi.h"
#include "test_abi_endian.h"
#ifndef KWIML_ABI_VERSION
# error "KWIML_ABI_VERSION not defined!"
#endif
extern "C" int test_abi_CXX(void)
{
if(!test_abi_endian())
{
return 0;
}
return 1;
}

View File

@ -0,0 +1,41 @@
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include <stdio.h>
#ifdef __cplusplus
# define LANG "C++ "
#else
# define LANG "C "
#endif
static int test_abi_endian(void)
{
int result = 1;
{
#if defined(KWIML_ABI_ENDIAN_ID)
int expect;
union { short s; unsigned char c[sizeof(short)]; } x;
x.s = 1;
expect = (x.c[0] == 1 ?
KWIML_ABI_ENDIAN_ID_LITTLE : KWIML_ABI_ENDIAN_ID_BIG);
printf(LANG "KWIML_ABI_ENDIAN_ID: expected [%d], got [%d]",
expect, KWIML_ABI_ENDIAN_ID);
if(KWIML_ABI_ENDIAN_ID == expect)
{
printf(", PASSED\n");
}
else
{
printf(", FAILED\n");
result = 0;
}
#else
printf(LANG "KWIML_ABI_ENDIAN_ID: unknown, FAILED\n");
result = 0;
#endif
}
return result;
}

View File

@ -1,20 +1,14 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include <stdio.h>
/* Test KWIML header inclusion after above system headers. */
#include "test.h"
#include KWIML_HEADER(ABI.h)
#include KWIML_HEADER(INT.h)
#include "../include/kwiml/abi.h"
#include "../include/kwiml/int.h"
int test_include_C(void)
{

View File

@ -1,14 +1,8 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include <string>
#if defined(_MSC_VER) && defined(NDEBUG)
@ -19,8 +13,8 @@ std::string test_include_CXX_use_stl_string;
/* Test KWIML header inclusion after above system headers. */
#include "test.h"
#include KWIML_HEADER(ABI.h)
#include KWIML_HEADER(INT.h)
#include "../include/kwiml/abi.h"
#include "../include/kwiml/int.h"
extern "C" int test_include_CXX(void)
{

View File

@ -0,0 +1,19 @@
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include "test.h"
#include "../include/kwiml/int.h"
#include "test_int_format.h"
#ifndef KWIML_INT_VERSION
# error "KWIML_INT_VERSION not defined!"
#endif
int test_int_C(void)
{
if(!test_int_format())
{
return 0;
}
return 1;
}

View File

@ -0,0 +1,19 @@
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include "test.h"
#include "../include/kwiml/int.h"
#include "test_int_format.h"
#ifndef KWIML_INT_VERSION
# error "KWIML_INT_VERSION not defined!"
#endif
extern "C" int test_int_CXX(void)
{
if(!test_int_format())
{
return 0;
}
return 1;
}

View File

@ -1,17 +1,16 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
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.
============================================================================*/
/*
Copyright Kitware, Inc.
Distributed under the OSI-approved BSD 3-Clause License.
See accompanying file Copyright.txt for details.
*/
#include <stdio.h>
#include <string.h>
#if defined(_MSC_VER)
# pragma warning (push)
# pragma warning (disable:4310) /* cast truncates constant value */
#endif
#ifdef __cplusplus
# define LANG "C++ "
#else
@ -25,8 +24,8 @@
T const x = VALUE(T, U); \
T y = C(V); \
printf(LANG #C ":" \
" expression [%" @KWIML@_INT_PRI##PRI "]," \
" literal [%" @KWIML@_INT_PRI##PRI "]", x, y); \
" expression [%" KWIML_INT_PRI##PRI "]," \
" literal [%" KWIML_INT_PRI##PRI "]", x, y); \
if(x == y) \
{ \
printf(", PASSED\n"); \
@ -42,8 +41,8 @@
{ \
T const x = VALUE(T, U); \
char const* str = STR; \
sprintf(buf, "%" @KWIML@_INT_PRI##PRI, x); \
printf(LANG "@KWIML@_INT_PRI" #PRI ":" \
sprintf(buf, "%" KWIML_INT_PRI##PRI, x); \
printf(LANG "KWIML_INT_PRI" #PRI ":" \
" expected [%s], got [%s]", str, buf); \
if(strcmp(str, buf) == 0) \
{ \
@ -62,13 +61,13 @@
T const x = VALUE(T, U); \
T y; \
char const* str = STR; \
if(sscanf(str, "%" @KWIML@_INT_SCN##SCN, &y) != 1) \
if(sscanf(str, "%" KWIML_INT_SCN##SCN, &y) != 1) \
{ \
y = 0; \
} \
printf(LANG "@KWIML@_INT_SCN" #SCN ":" \
" expected [%" @KWIML@_INT_PRI##PRI "]," \
" got [%" @KWIML@_INT_PRI##PRI "]", x, y); \
printf(LANG "KWIML_INT_SCN" #SCN ":" \
" expected [%" KWIML_INT_PRI##PRI "]," \
" got [%" KWIML_INT_PRI##PRI "]", x, y); \
if(x == y) \
{ \
printf(", PASSED\n"); \
@ -87,41 +86,41 @@
/* Concatenate T and U now to avoid expanding them. */
#define TEST(FMT, T, U, STR) \
TEST_(FMT, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
TEST_(FMT, KWIML_INT_##T, KWIML_INT_##U, STR)
#define TEST2(PRI, SCN, T, U, STR) \
TEST2_(PRI, SCN, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
TEST2_(PRI, SCN, KWIML_INT_##T, KWIML_INT_##U, STR)
#define TEST_C(C, V, PRI, T, U) \
TEST_C_(@KWIML@_INT_##C, V, PRI, @KWIML@_INT_##T, @KWIML@_INT_##U)
TEST_C_(KWIML_INT_##C, V, PRI, KWIML_INT_##T, KWIML_INT_##U)
#define TEST_PRI(PRI, T, U, STR) \
TEST_PRI_(PRI, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
TEST_PRI_(PRI, KWIML_INT_##T, KWIML_INT_##U, STR)
#define TEST_SCN(SCN, T, U, STR) \
TEST_SCN_(SCN, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
TEST_SCN_(SCN, KWIML_INT_##T, KWIML_INT_##U, STR)
#define TEST_SCN2(PRI, SCN, T, U, STR) \
TEST_SCN2_(PRI, SCN, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
TEST_SCN2_(PRI, SCN, KWIML_INT_##T, KWIML_INT_##U, STR)
static int test_INT_format(void)
static int test_int_format(void)
{
int result = 1;
char buf[256];
TEST_PRI(i8, int8_t, uint8_t, "-85")
#if defined(@KWIML@_INT_SCNi8)
#if defined(KWIML_INT_SCNi8)
TEST_SCN(i8, int8_t, uint8_t, "-85")
#endif
TEST_PRI(d8, int8_t, uint8_t, "-85")
#if defined(@KWIML@_INT_SCNd8)
#if defined(KWIML_INT_SCNd8)
TEST_SCN(d8, int8_t, uint8_t, "-85")
#endif
TEST_PRI(o8, uint8_t, uint8_t, "253")
#if defined(@KWIML@_INT_SCNo8)
#if defined(KWIML_INT_SCNo8)
TEST_SCN(o8, uint8_t, uint8_t, "253")
#endif
TEST_PRI(u8, uint8_t, uint8_t, "171")
#if defined(@KWIML@_INT_SCNu8)
#if defined(KWIML_INT_SCNu8)
TEST_SCN(u8, uint8_t, uint8_t, "171")
#endif
TEST_PRI(x8, uint8_t, uint8_t, "ab")
TEST_PRI(X8, uint8_t, uint8_t, "AB")
#if defined(@KWIML@_INT_SCNx8)
#if defined(KWIML_INT_SCNx8)
TEST_SCN(x8, uint8_t, uint8_t, "ab")
TEST_SCN2(X8, x8, uint8_t, uint8_t, "AB")
#endif
@ -141,30 +140,30 @@ static int test_INT_format(void)
TEST2(X32, x32, uint32_t, uint32_t, "AB000000")
TEST_PRI(i64, int64_t, uint64_t, "-6124895493223874560")
#if defined(@KWIML@_INT_SCNi64)
#if defined(KWIML_INT_SCNi64)
TEST_SCN(i64, int64_t, uint64_t, "-6124895493223874560")
#endif
TEST_PRI(d64, int64_t, uint64_t, "-6124895493223874560")
#if defined(@KWIML@_INT_SCNd64)
#if defined(KWIML_INT_SCNd64)
TEST_SCN(d64, int64_t, uint64_t, "-6124895493223874560")
#endif
TEST_PRI(o64, uint64_t, uint64_t, "1254000000000000000000")
#if defined(@KWIML@_INT_SCNo64)
#if defined(KWIML_INT_SCNo64)
TEST_SCN(o64, uint64_t, uint64_t, "1254000000000000000000")
#endif
TEST_PRI(u64, uint64_t, uint64_t, "12321848580485677056")
#if defined(@KWIML@_INT_SCNu64)
#if defined(KWIML_INT_SCNu64)
TEST_SCN(u64, uint64_t, uint64_t, "12321848580485677056")
#endif
TEST_PRI(x64, uint64_t, uint64_t, "ab00000000000000")
TEST_PRI(X64, uint64_t, uint64_t, "AB00000000000000")
#if defined(@KWIML@_INT_SCNx64)
#if defined(KWIML_INT_SCNx64)
TEST_SCN(x64, uint64_t, uint64_t, "ab00000000000000")
TEST_SCN2(X64, x64, uint64_t, uint64_t, "AB00000000000000")
#endif
#if !defined(@KWIML@_INT_NO_INTPTR_T)
# if @KWIML@_ABI_SIZEOF_DATA_PTR == 4
#if !defined(KWIML_INT_NO_INTPTR_T)
# if KWIML_ABI_SIZEOF_DATA_PTR == 4
TEST(iPTR, intptr_t, uint32_t, "-1426063360")
TEST(dPTR, intptr_t, uint32_t, "-1426063360")
# else
@ -173,8 +172,8 @@ static int test_INT_format(void)
# endif
#endif
#if !defined(@KWIML@_INT_NO_UINTPTR_T)
# if @KWIML@_ABI_SIZEOF_DATA_PTR == 4
#if !defined(KWIML_INT_NO_UINTPTR_T)
# if KWIML_ABI_SIZEOF_DATA_PTR == 4
TEST(oPTR, uintptr_t, uintptr_t, "25300000000")
TEST(uPTR, uintptr_t, uintptr_t, "2868903936")
TEST(xPTR, uintptr_t, uintptr_t, "ab000000")
@ -198,3 +197,7 @@ static int test_INT_format(void)
return result;
}
#if defined(_MSC_VER)
# pragma warning (pop)
#endif

View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -e
set -x
shopt -s dotglob
readonly name="KWIML"
readonly ownership="KWIML Upstream <kwrobot@kitware.com>"
readonly subtree="Utilities/KWIML"
readonly repo="https://github.com/Kitware/KWIML.git"
readonly tag="master"
readonly shortlog=true
readonly paths="
"
extract_source () {
git_archive
}
. "${BASH_SOURCE%/*}/update-third-party.bash"

View File

@ -15,6 +15,7 @@
/* Whether CMake is using its own utility libraries. */
#cmakedefine CMAKE_USE_SYSTEM_CURL
#cmakedefine CMAKE_USE_SYSTEM_EXPAT
#cmakedefine CMAKE_USE_SYSTEM_KWIML
#cmakedefine CMAKE_USE_SYSTEM_ZLIB
#cmakedefine CMAKE_USE_SYSTEM_BZIP2
#cmakedefine CMAKE_USE_SYSTEM_LIBARCHIVE

View File

@ -1,6 +1,6 @@
/*============================================================================
Kitware Information Macro Library
Copyright 2010-2011 Kitware, Inc.
CMake - Cross Platform Makefile Generator
Copyright 2000-2015 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
@ -9,14 +9,17 @@
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "test.h"
#include KWIML_HEADER(ABI.h)
#include "test_ABI_endian.h"
extern "C" int test_ABI_CXX(void)
{
if(!test_ABI_endian())
{
return 0;
}
return 1;
}
#ifndef cm_kwiml_h
#define cm_kwiml_h
/* Use the KWIML library configured for CMake. */
#include "cmThirdParty.h"
#ifdef CMAKE_USE_SYSTEM_KWIML
# include <kwiml/abi.h>
# include <kwiml/int.h>
#else
# include "KWIML/include/kwiml/abi.h"
# include "KWIML/include/kwiml/int.h"
#endif
#endif

View File

@ -23,3 +23,4 @@ include_directories(
)
add_library(cmjsoncpp ${JSONCPP_SOURCES})
target_link_libraries(cmjsoncpp ${CMake_KWIML_LIBRARIES})

View File

@ -373,11 +373,6 @@ KWSYS_FILES="\
SystemTools.hxx \
Terminal.h"
KWIML_FILES='
ABI.h
INT.h
'
# Display CMake bootstrap usage
cmake_usage()
{
@ -455,6 +450,18 @@ cmake_error()
exit ${res}
}
cmake_generate_file ()
{
OUTFILE="$1"
CONTENT="$2"
echo "$CONTENT" > "$OUTFILE.tmp"
if "${_diff}" "$OUTFILE.tmp" "$OUTFILE" > /dev/null 2> /dev/null ; then
rm -f "$OUTFILE.tmp"
else
mv -f "$OUTFILE.tmp" "$OUTFILE"
fi
}
# Replace KWSYS_NAMESPACE with cmsys
cmake_replace_string ()
{
@ -702,11 +709,6 @@ if [ ! -d "cmsys" ]; then
cmake_error 4 "Cannot create directory ${cmake_bootstrap_dir}/cmsys"
fi
[ -d "cmIML" ] || mkdir "cmIML"
if [ ! -d "cmIML" ]; then
cmake_error 12 "Cannot create directory ${cmake_bootstrap_dir}/cmIML"
fi
# Delete all the bootstrap files
rm -f "${cmake_bootstrap_dir}/cmake_bootstrap.log"
rm -f "${cmake_bootstrap_dir}/cmConfigure.h${_tmp}"
@ -1280,10 +1282,7 @@ for a in ${KWSYS_FILES}; do
"${cmake_bootstrap_dir}/cmsys/${a}" KWSYS_NAMESPACE cmsys
done
for a in ${KWIML_FILES}; do
cmake_replace_string "${cmake_source_dir}/Utilities/KWIML/${a}.in" \
"${cmake_bootstrap_dir}/cmIML/${a}" KWIML cmIML
done
cmake_generate_file "${cmake_bootstrap_dir}/cmThirdParty.h" ""
# Generate Makefile
dep="cmConfigure.h cmsys/*.hxx cmsys/*.h `cmake_escape \"${cmake_source_dir}\"`/Source/*.h"
@ -1326,9 +1325,9 @@ cmake_cxx_flags_SystemTools="
-DKWSYS_CXX_HAS_UTIMES=${KWSYS_CXX_HAS_UTIMES}
"
cmake_c_flags="${cmake_c_flags}-I`cmake_escape \"${cmake_bootstrap_dir}\"` -I`cmake_escape \"${cmake_source_dir}/Source\"` \
-I`cmake_escape \"${cmake_bootstrap_dir}\"`"
-I`cmake_escape \"${cmake_source_dir}/Utilities\"`"
cmake_cxx_flags="${cmake_cxx_flags} -I`cmake_escape \"${cmake_bootstrap_dir}\"` -I`cmake_escape \"${cmake_source_dir}/Source\"` \
-I`cmake_escape \"${cmake_bootstrap_dir}\"`"
-I`cmake_escape \"${cmake_source_dir}/Utilities\"`"
echo "cmake: ${objs}" > "${cmake_bootstrap_dir}/Makefile"
echo " ${cmake_cxx_compiler} ${cmake_ld_flags} ${cmake_cxx_flags} ${objs} -o cmake" >> "${cmake_bootstrap_dir}/Makefile"
for a in ${CMAKE_CXX_SOURCES}; do