src: portability updates

This commit is contained in:
Markus F.X.J. Oberhumer
2024-07-07 14:50:27 +02:00
parent 285472bc78
commit 16c8f6d160
21 changed files with 700 additions and 129 deletions
+158
View File
@@ -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: */