src: portability updates
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
/* 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: */
|
||||
Reference in New Issue
Block a user