159 lines
4.6 KiB
C++
159 lines
4.6 KiB
C++
/* system_check_predefs.h -- check pre-defined macros
|
|
|
|
This file is part of the UPX executable compressor.
|
|
|
|
Copyright (C) 1996-2024 Markus Franz Xaver Johannes Oberhumer
|
|
All Rights Reserved.
|
|
|
|
UPX and the UCL library are free software; you can redistribute them
|
|
and/or modify them under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of
|
|
the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; see the file COPYING.
|
|
If not, write to the Free Software Foundation, Inc.,
|
|
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
Markus F.X.J. Oberhumer
|
|
<markus@oberhumer.com>
|
|
*/
|
|
|
|
// windows defines
|
|
#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
|
|
#error "missing __CYGWIN__"
|
|
#endif
|
|
#if defined(__CYGWIN64__) && !defined(__CYGWIN__)
|
|
#error "missing __CYGWIN__"
|
|
#endif
|
|
#if defined(__CYGWIN__) && defined(_WIN32)
|
|
#error "unexpected _WIN32"
|
|
#endif
|
|
#if defined(__CYGWIN__) && defined(_WIN64)
|
|
#error "unexpected _WIN64"
|
|
#endif
|
|
#if defined(__MINGW64__) && !defined(__MINGW32__)
|
|
#error "missing __MINGW32__"
|
|
#endif
|
|
#if defined(__MINGW32__) && !defined(_WIN32)
|
|
#error "missing _WIN32"
|
|
#endif
|
|
#if defined(__MINGW64__) && !defined(_WIN64)
|
|
#error "missing _WIN64"
|
|
#endif
|
|
#if defined(_WIN64) && !defined(_WIN32)
|
|
#error "missing _WIN32"
|
|
#endif
|
|
|
|
// available since gcc-4.3 (2008), clang-2.7 (2010) and msvc-20XX
|
|
#if !defined(__COUNTER__)
|
|
#error "missing __COUNTER__"
|
|
#endif
|
|
|
|
// fundamental type sizes - these are pre-defined since gcc-4.3 (2008) and clang-2.8 (2010)
|
|
#if defined(__clang__) || defined(__GNUC__)
|
|
#if !defined(__SIZEOF_SHORT__)
|
|
#error "missing __SIZEOF_SHORT__"
|
|
#endif
|
|
#if !defined(__SIZEOF_INT__)
|
|
#error "missing __SIZEOF_INT__"
|
|
#endif
|
|
#if !defined(__SIZEOF_LONG__)
|
|
#error "missing __SIZEOF_LONG__"
|
|
#endif
|
|
#if !defined(__SIZEOF_LONG_LONG__)
|
|
#error "missing __SIZEOF_LONG_LONG__"
|
|
#endif
|
|
#if !defined(__SIZEOF_PTRDIFF_T__)
|
|
#error "missing __SIZEOF_PTRDIFF_T__"
|
|
#endif
|
|
#if !defined(__SIZEOF_SIZE_T__)
|
|
#error "missing __SIZEOF_SIZE_T__"
|
|
#endif
|
|
#if !defined(__SIZEOF_POINTER__)
|
|
#error "missing __SIZEOF_POINTER__"
|
|
#endif
|
|
#endif
|
|
|
|
// fundamental types - these are pre-defined since gcc-4.5 (2010) and clang-3.5 (2014)
|
|
#if defined(__clang__) || defined(__GNUC__)
|
|
#if !defined(__PTRDIFF_TYPE__)
|
|
#error "missing __PTRDIFF_TYPE__"
|
|
#endif
|
|
#if !defined(__SIZE_TYPE__)
|
|
#error "missing __SIZE_TYPE__"
|
|
#endif
|
|
#if !defined(__INTPTR_TYPE__)
|
|
#error "missing __INTPTR_TYPE__"
|
|
#endif
|
|
#if !defined(__UINTPTR_TYPE__)
|
|
#error "missing __UINTPTR_TYPE__"
|
|
#endif
|
|
#endif
|
|
#if defined(__PTRADDR_TYPE__) && !defined(__PTRADDR_WIDTH__)
|
|
#error "missing __PTRADDR_WIDTH__"
|
|
#elif defined(__PTRADDR_WIDTH__) && !defined(__PTRADDR_TYPE__)
|
|
#error "missing __PTRADDR_TYPE__"
|
|
#endif
|
|
|
|
// byte order - these are pre-defined since gcc-4.6 (2011) and clang-3.2 (2012)
|
|
#if defined(__clang__) || defined(__GNUC__)
|
|
#if !defined(__ORDER_BIG_ENDIAN__) || (__ORDER_BIG_ENDIAN__ + 0 == 0)
|
|
#error "missing __ORDER_BIG_ENDIAN__"
|
|
#endif
|
|
#if !defined(__ORDER_LITTLE_ENDIAN__) || (__ORDER_LITTLE_ENDIAN__ + 0 == 0)
|
|
#error "missing __ORDER_LITTLE_ENDIAN__"
|
|
#endif
|
|
#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ + 0 == 0)
|
|
#error "missing __BYTE_ORDER__"
|
|
#endif
|
|
#if !defined(__ORDER_BIG_ENDIAN__) || (__ORDER_BIG_ENDIAN__ + 0 != 4321)
|
|
#error "unexpected __ORDER_BIG_ENDIAN__"
|
|
#endif
|
|
#if !defined(__ORDER_BIG_ENDIAN__) || (__ORDER_LITTLE_ENDIAN__ + 0 != 1234)
|
|
#error "unexpected __ORDER_BIG_ENDIAN__"
|
|
#endif
|
|
#if (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__)
|
|
#error "unexpected __BYTE_ORDER__"
|
|
#endif
|
|
#endif
|
|
|
|
// pic and pie
|
|
#if defined(__PIC__) && defined(__pic__)
|
|
#if (__PIC__ + 0) != (__pic__ + 0)
|
|
#error "unexpected __PIC__ vs __pic__ mismatch"
|
|
#endif
|
|
#endif
|
|
#if defined(__PIC__)
|
|
#if (__PIC__ != 1) && (__PIC__ != 2)
|
|
#error "unexpected __PIC__ value"
|
|
#endif
|
|
#endif
|
|
#if defined(__pic__)
|
|
#if (__pic__ != 1) && (__pic__ != 2)
|
|
#error "unexpected __pic__ value"
|
|
#endif
|
|
#endif
|
|
#if defined(__PIE__) && defined(__pie__)
|
|
#if (__PIE__ + 0) != (__pie__ + 0)
|
|
#error "unexpected __PIE__ vs __pie__ mismatch"
|
|
#endif
|
|
#endif
|
|
#if defined(__PIE__)
|
|
#if (__PIE__ != 1) && (__PIE__ != 2)
|
|
#error "unexpected __PIE__ value"
|
|
#endif
|
|
#endif
|
|
#if defined(__pie__)
|
|
#if (__pie__ != 1) && (__pie__ != 2)
|
|
#error "unexpected __pie__ value"
|
|
#endif
|
|
#endif
|
|
|
|
/* vim:set ts=4 sw=4 et: */
|