summaryrefslogtreecommitdiffstats
path: root/Utilities/KWIML
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities/KWIML')
-rw-r--r--Utilities/KWIML/ABI.h.in482
-rw-r--r--Utilities/KWIML/CMakeLists.txt79
-rw-r--r--Utilities/KWIML/Copyright.txt30
-rw-r--r--Utilities/KWIML/INT.h.in861
-rw-r--r--Utilities/KWIML/README.txt29
-rw-r--r--Utilities/KWIML/test/CMakeLists.txt70
-rw-r--r--Utilities/KWIML/test/test.c39
-rw-r--r--Utilities/KWIML/test/test.cxx12
-rw-r--r--Utilities/KWIML/test/test.h37
-rw-r--r--Utilities/KWIML/test/test_ABI_C.c22
-rw-r--r--Utilities/KWIML/test/test_ABI_CXX.cxx22
-rw-r--r--Utilities/KWIML/test/test_ABI_endian.h.in47
-rw-r--r--Utilities/KWIML/test/test_INT_C.c22
-rw-r--r--Utilities/KWIML/test/test_INT_CXX.cxx22
-rw-r--r--Utilities/KWIML/test/test_INT_format.h.in200
-rw-r--r--Utilities/KWIML/test/test_include_C.c22
-rw-r--r--Utilities/KWIML/test/test_include_CXX.cxx28
17 files changed, 2024 insertions, 0 deletions
diff --git a/Utilities/KWIML/ABI.h.in b/Utilities/KWIML/ABI.h.in
new file mode 100644
index 0000000..f93ddba
--- /dev/null
+++ b/Utilities/KWIML/ABI.h.in
@@ -0,0 +1,482 @@
+/*============================================================================
+ 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(__hpux) && !defined(__GNUC__) /* Old HP: no __HP_cc/__HP_aCC 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
+
+/* 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
+
+/* 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
diff --git a/Utilities/KWIML/CMakeLists.txt b/Utilities/KWIML/CMakeLists.txt
new file mode 100644
index 0000000..62b6fff
--- /dev/null
+++ b/Utilities/KWIML/CMakeLists.txt
@@ -0,0 +1,79 @@
+#=============================================================================
+# 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.
+#=============================================================================
+
+# 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)
+ project(KWIML)
+ include(CTest)
+ mark_as_advanced(BUILD_TESTING)
+endif()
+
+#-----------------------------------------------------------------------------
+get_property(KWIML_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
+foreach(lang ${KWIML_LANGUAGES})
+ set(KWIML_LANGUAGE_${lang} 1)
+endforeach()
+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}")
+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)
+ add_subdirectory(test)
+endif()
diff --git a/Utilities/KWIML/Copyright.txt b/Utilities/KWIML/Copyright.txt
new file mode 100644
index 0000000..c1e5ebc
--- /dev/null
+++ b/Utilities/KWIML/Copyright.txt
@@ -0,0 +1,30 @@
+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.
diff --git a/Utilities/KWIML/INT.h.in b/Utilities/KWIML/INT.h.in
new file mode 100644
index 0000000..d2eda63
--- /dev/null
+++ b/Utilities/KWIML/INT.h.in
@@ -0,0 +1,861 @@
+/*============================================================================
+ 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
diff --git a/Utilities/KWIML/README.txt b/Utilities/KWIML/README.txt
new file mode 100644
index 0000000..6bdf859
--- /dev/null
+++ b/Utilities/KWIML/README.txt
@@ -0,0 +1,29 @@
+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.
diff --git a/Utilities/KWIML/test/CMakeLists.txt b/Utilities/KWIML/test/CMakeLists.txt
new file mode 100644
index 0000000..a2359cc
--- /dev/null
+++ b/Utilities/KWIML/test/CMakeLists.txt
@@ -0,0 +1,70 @@
+#=============================================================================
+# 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.
+#=============================================================================
+
+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}/%>"
+ )
+
+# Suppress printf/scanf format warnings; we test if the sizes match.
+foreach(lang C CXX)
+ if(KWIML_LANGUAGE_${lang} AND "${CMAKE_${lang}_COMPILER_ID}" STREQUAL GNU)
+ set(CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS} -Wno-format")
+ endif()
+endforeach()
+
+if(KWIML_LANGUAGE_C)
+ set(test_srcs test.c)
+else()
+ set(test_srcs test.cxx)
+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_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_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
+ 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})
+
+# 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
+ PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CFG_INTDIR}"
+ )
+endif()
diff --git a/Utilities/KWIML/test/test.c b/Utilities/KWIML/test/test.c
new file mode 100644
index 0000000..131c81f
--- /dev/null
+++ b/Utilities/KWIML/test/test.c
@@ -0,0 +1,39 @@
+/*============================================================================
+ 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.
+============================================================================*/
+#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_include_C(void);
+extern int test_include_CXX(void);
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+int main(void)
+{
+ int result = 1;
+#ifdef KWIML_LANGUAGE_C
+ 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_include_CXX() && result;
+#endif
+ return result? 0 : 1;
+}
diff --git a/Utilities/KWIML/test/test.cxx b/Utilities/KWIML/test/test.cxx
new file mode 100644
index 0000000..bf61421
--- /dev/null
+++ b/Utilities/KWIML/test/test.cxx
@@ -0,0 +1,12 @@
+/*============================================================================
+ 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.c"
diff --git a/Utilities/KWIML/test/test.h b/Utilities/KWIML/test/test.h
new file mode 100644
index 0000000..b87a0e7
--- /dev/null
+++ b/Utilities/KWIML/test/test.h
@@ -0,0 +1,37 @@
+/*============================================================================
+ 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
+
+#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
+#endif
+
+#else
+# error "test.h included multiple times."
+#endif
diff --git a/Utilities/KWIML/test/test_ABI_C.c b/Utilities/KWIML/test/test_ABI_C.c
new file mode 100644
index 0000000..3ca4ad3
--- /dev/null
+++ b/Utilities/KWIML/test/test_ABI_C.c
@@ -0,0 +1,22 @@
+/*============================================================================
+ 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;
+}
diff --git a/Utilities/KWIML/test/test_ABI_CXX.cxx b/Utilities/KWIML/test/test_ABI_CXX.cxx
new file mode 100644
index 0000000..7ede20e
--- /dev/null
+++ b/Utilities/KWIML/test/test_ABI_CXX.cxx
@@ -0,0 +1,22 @@
+/*============================================================================
+ 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"
+extern "C" int test_ABI_CXX(void)
+{
+ if(!test_ABI_endian())
+ {
+ return 0;
+ }
+ return 1;
+}
diff --git a/Utilities/KWIML/test/test_ABI_endian.h.in b/Utilities/KWIML/test/test_ABI_endian.h.in
new file mode 100644
index 0000000..992baea
--- /dev/null
+++ b/Utilities/KWIML/test/test_ABI_endian.h.in
@@ -0,0 +1,47 @@
+/*============================================================================
+ 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;
+}
diff --git a/Utilities/KWIML/test/test_INT_C.c b/Utilities/KWIML/test/test_INT_C.c
new file mode 100644
index 0000000..5513a0b
--- /dev/null
+++ b/Utilities/KWIML/test/test_INT_C.c
@@ -0,0 +1,22 @@
+/*============================================================================
+ 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;
+}
diff --git a/Utilities/KWIML/test/test_INT_CXX.cxx b/Utilities/KWIML/test/test_INT_CXX.cxx
new file mode 100644
index 0000000..9f74e96
--- /dev/null
+++ b/Utilities/KWIML/test/test_INT_CXX.cxx
@@ -0,0 +1,22 @@
+/*============================================================================
+ 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;
+}
diff --git a/Utilities/KWIML/test/test_INT_format.h.in b/Utilities/KWIML/test/test_INT_format.h.in
new file mode 100644
index 0000000..71b443d
--- /dev/null
+++ b/Utilities/KWIML/test/test_INT_format.h.in
@@ -0,0 +1,200 @@
+/*============================================================================
+ 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>
+#include <string.h>
+
+#ifdef __cplusplus
+# define LANG "C++ "
+#else
+# define LANG "C "
+#endif
+
+#define VALUE(T, U) (T)((U)0xab << ((sizeof(T)-1)<<3))
+
+#define TEST_C_(C, V, PRI, T, U) \
+ { \
+ 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); \
+ if(x == y) \
+ { \
+ printf(", PASSED\n"); \
+ } \
+ else \
+ { \
+ printf(", FAILED\n"); \
+ result = 0; \
+ } \
+ }
+
+#define TEST_PRI_(PRI, T, U, STR) \
+ { \
+ T const x = VALUE(T, U); \
+ char const* str = STR; \
+ sprintf(buf, "%" @KWIML@_INT_PRI##PRI, x); \
+ printf(LANG "@KWIML@_INT_PRI" #PRI ":" \
+ " expected [%s], got [%s]", str, buf); \
+ if(strcmp(str, buf) == 0) \
+ { \
+ printf(", PASSED\n"); \
+ } \
+ else \
+ { \
+ printf(", FAILED\n"); \
+ result = 0; \
+ } \
+ }
+
+#define TEST_SCN_(SCN, T, U, STR) TEST_SCN2_(SCN, SCN, T, U, STR)
+#define TEST_SCN2_(PRI, SCN, T, U, STR) \
+ { \
+ T const x = VALUE(T, U); \
+ T y; \
+ char const* str = STR; \
+ 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); \
+ if(x == y) \
+ { \
+ printf(", PASSED\n"); \
+ } \
+ else \
+ { \
+ printf(", FAILED\n"); \
+ result = 0; \
+ } \
+ }
+
+#define TEST_(FMT, T, U, STR) TEST2_(FMT, FMT, T, U, STR)
+#define TEST2_(PRI, SCN, T, U, STR) \
+ TEST_PRI_(PRI, T, U, STR) \
+ TEST_SCN2_(PRI, SCN, T, U, STR)
+
+/* Concatenate T and U now to avoid expanding them. */
+#define TEST(FMT, T, 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)
+#define TEST_C(C, V, PRI, T, 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)
+#define TEST_SCN(SCN, T, 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)
+
+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)
+ TEST_SCN(i8, int8_t, uint8_t, "-85")
+#endif
+ TEST_PRI(d8, int8_t, uint8_t, "-85")
+#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)
+ TEST_SCN(o8, uint8_t, uint8_t, "253")
+#endif
+ TEST_PRI(u8, uint8_t, uint8_t, "171")
+#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)
+ TEST_SCN(x8, uint8_t, uint8_t, "ab")
+ TEST_SCN2(X8, x8, uint8_t, uint8_t, "AB")
+#endif
+
+ TEST(i16, int16_t, uint16_t, "-21760")
+ TEST(d16, int16_t, uint16_t, "-21760")
+ TEST(o16, uint16_t, uint16_t, "125400")
+ TEST(u16, uint16_t, uint16_t, "43776")
+ TEST(x16, uint16_t, uint16_t, "ab00")
+ TEST2(X16, x16, uint16_t, uint16_t, "AB00")
+
+ TEST(i32, int32_t, uint32_t, "-1426063360")
+ TEST(d32, int32_t, uint32_t, "-1426063360")
+ TEST(o32, uint32_t, uint32_t, "25300000000")
+ TEST(u32, uint32_t, uint32_t, "2868903936")
+ TEST(x32, uint32_t, uint32_t, "ab000000")
+ TEST2(X32, x32, uint32_t, uint32_t, "AB000000")
+
+ TEST_PRI(i64, int64_t, uint64_t, "-6124895493223874560")
+#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)
+ TEST_SCN(d64, int64_t, uint64_t, "-6124895493223874560")
+#endif
+ TEST_PRI(o64, uint64_t, uint64_t, "1254000000000000000000")
+#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)
+ 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)
+ 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
+ TEST(iPTR, intptr_t, uint32_t, "-1426063360")
+ TEST(dPTR, intptr_t, uint32_t, "-1426063360")
+# else
+ TEST(iPTR, intptr_t, uint64_t, "-6124895493223874560")
+ TEST(dPTR, intptr_t, uint64_t, "-6124895493223874560")
+# endif
+#endif
+
+#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")
+ TEST2(XPTR, xPTR, uintptr_t, uintptr_t, "AB000000")
+# else
+ TEST(oPTR, uintptr_t, uintptr_t, "1254000000000000000000")
+ TEST(uPTR, uintptr_t, uintptr_t, "12321848580485677056")
+ TEST(xPTR, uintptr_t, uintptr_t, "ab00000000000000")
+ TEST2(XPTR, xPTR, uintptr_t, uintptr_t, "AB00000000000000")
+# endif
+#endif
+
+ TEST_C(INT8_C, -0x55, i8, int8_t, uint8_t)
+ TEST_C(UINT8_C, 0xAB, u8, uint8_t, uint8_t)
+ TEST_C(INT16_C, -0x5500, i16, int16_t, uint16_t)
+ TEST_C(UINT16_C, 0xAB00, u16, uint16_t, uint16_t)
+ TEST_C(INT32_C, -0x55000000, i32, int32_t, uint32_t)
+ TEST_C(UINT32_C, 0xAB000000, u32, uint32_t, uint32_t)
+ TEST_C(INT64_C, -0x5500000000000000, i64, int64_t, uint64_t)
+ TEST_C(UINT64_C, 0xAB00000000000000, u64, uint64_t, uint64_t)
+
+ return result;
+}
diff --git a/Utilities/KWIML/test/test_include_C.c b/Utilities/KWIML/test/test_include_C.c
new file mode 100644
index 0000000..fb3e4cf
--- /dev/null
+++ b/Utilities/KWIML/test/test_include_C.c
@@ -0,0 +1,22 @@
+/*============================================================================
+ 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>
+
+/* Test KWIML header inclusion after above system headers. */
+#include "test.h"
+#include KWIML_HEADER(ABI.h)
+#include KWIML_HEADER(INT.h)
+
+int test_include_C(void)
+{
+ return 1;
+}
diff --git a/Utilities/KWIML/test/test_include_CXX.cxx b/Utilities/KWIML/test/test_include_CXX.cxx
new file mode 100644
index 0000000..111311a
--- /dev/null
+++ b/Utilities/KWIML/test/test_include_CXX.cxx
@@ -0,0 +1,28 @@
+/*============================================================================
+ 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 <string>
+
+#if defined(_MSC_VER) && defined(NDEBUG)
+// Use C++ runtime to avoid linker warning:
+// warning LNK4089: all references to 'MSVCP71.dll' discarded by /OPT:REF
+std::string test_include_CXX_use_stl_string;
+#endif
+
+/* Test KWIML header inclusion after above system headers. */
+#include "test.h"
+#include KWIML_HEADER(ABI.h)
+#include KWIML_HEADER(INT.h)
+
+extern "C" int test_include_CXX(void)
+{
+ return 1;
+}