Some `.c` sources add `restrict` to their pointer types to tell
the optimizer that there is no aliasing. These do not appear in
the corresponding `.h` declarations so MSVC warns.
Revert commit v3.1.0-rc1~255^2~5 (liblzma: Port from C99 to C89/90,
2014-07-13). We now compile as C99 or above except on MSVC where
we will use another approach.
Revert commit v3.1.0-rc1~255^2~2 (liblzma: Avoid defining a 'restrict'
macro, 2014-07-24). We will use another approach to deal with the
'restrict' keyword.
The checks fail even on compilers that support the keywords because
the linkage is broken:
src.c:...: undefined reference to 'test'
At the actual use sites we use `static inline` instead of just `inline`,
so perform the check this way too to fix the linkage.
We will now manage the liblzma source tree updates using
the `Utilities/Scripts/update-liblzma.bash` script. Drop
the README that covered the old method.
Revert commit 82c51a8a (liblzma: Disable XL compiler optimizations in
one source to avoid crash, 2015-04-02) and instead add a compiler flag
to disable optimizations in every source of liblzma. Somehow the XL
compiler optimizations create incorrect behavior in liblzma and lead
to crashes or truncated output during compression.
Somehow optimizations of lzma_lzma_optimum_normal by the IBM XL C
compiler cause it to crash. Simply disable optimizations of this source
file with a pragma.
Some systems don't define a SIZE_MAX (older versions of HP-UX with aCC).
The logic was already in place to account for this condition but
SIZEOF_SIZE_T was not getting cmoputed at configure time to allow it to
function. This computes sizeof(size_t) at configure time to allow the
appropriate logic to work. It also changes SIZEOF_SIZE_T to SIZE_OF_SIZE_T
for consistency.
When testing CMAKE_<LANG>_COMPILER_ID values, do not explicitly
dereference or quote the variable. We want if() to auto-dereference the
variable and not its value. Also replace MATCHES with STREQUAL where
equivalent.
- sha265.c is using some C99 specific features, in particular static
array dimensions in a function parameter array (see section 6.7.5-7
of the C99 spec). A #ifndef check was in place to prevent compilation
under MSVC but it actually needed to check for C99 compliance instead.
Even still, the C99 code fails on a few compilers (PGI being one) so for
compatibility reasons, the C99 version of the function declaration is
removed entirely, leaving only the C89 version.
- CHECK_SYMBOL_EXISTS is used to determine the presense of bswap
functions from byteswap.h. Most compilers re-dedefine the bswap_N
functions as a __bswap_N function implemented by the compiler. Since
bswap_N is usually defined as a macro then it's mere presence passes
the check. Some versions of the PGI compiler though have shipped
broken headers for byteswap.h, in particular 11.3 for x64 linux
provides byteswap.h but is missing an associated bits/byteswap.h which
causes some of the bswap_N macros to be defined but broken and unusable.
The bswap_N checks have been converted to CHECK_SOURCE_COMPILES to
ensure that the bswap_N calls are actually usable and not just merely
defined.
Any "#define restrict ..." line may conflict with MSVC header files
that use "__declspec(restrict)". Define our own LZMA_RESTRICT macro
in "Utilities/cmliblzma/config.h.in" and transform liblzma code to
use it:
git grep -lE '\<restrict\>' Utilities/cmliblzma/liblzma |
xargs sed -i 's/\<restrict\>/LZMA_RESTRICT/g'