summaryrefslogtreecommitdiffstats
path: root/Utilities/cmliblzma
diff options
context:
space:
mode:
authorChuck Atkins <chuck.atkins@kitware.com>2014-08-01 17:56:41 (GMT)
committerBrad King <brad.king@kitware.com>2014-08-04 14:12:51 (GMT)
commit2dd17a546f0a2dafacf53b5db1e9ead0990d91ea (patch)
tree480b9f99d525c94e6ab8683ca66902fc9daacf6a /Utilities/cmliblzma
parent1238b3656ad95a6cc23a08e1846099ca773a5e1f (diff)
downloadCMake-2dd17a546f0a2dafacf53b5db1e9ead0990d91ea.zip
CMake-2dd17a546f0a2dafacf53b5db1e9ead0990d91ea.tar.gz
CMake-2dd17a546f0a2dafacf53b5db1e9ead0990d91ea.tar.bz2
liblzma: Fix compilation with PGI compiler
- 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.
Diffstat (limited to 'Utilities/cmliblzma')
-rw-r--r--Utilities/cmliblzma/CMakeLists.txt12
-rw-r--r--Utilities/cmliblzma/liblzma/check/sha256.c4
2 files changed, 9 insertions, 7 deletions
diff --git a/Utilities/cmliblzma/CMakeLists.txt b/Utilities/cmliblzma/CMakeLists.txt
index fc50dbe..856e41e 100644
--- a/Utilities/cmliblzma/CMakeLists.txt
+++ b/Utilities/cmliblzma/CMakeLists.txt
@@ -31,9 +31,15 @@ CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
CHECK_INCLUDE_FILE(sys/sysctl.h HAVE_SYS_SYSCTL_H)
-CHECK_SYMBOL_EXISTS(bswap_16 byteswap.h HAVE_BSWAP_16)
-CHECK_SYMBOL_EXISTS(bswap_32 byteswap.h HAVE_BSWAP_32)
-CHECK_SYMBOL_EXISTS(bswap_64 byteswap.h HAVE_BSWAP_64)
+CHECK_C_SOURCE_COMPILES (
+ "#include<byteswap.h>\nint main(void){bswap_16(0);return 0;}"
+ HAVE_BSWAP_16)
+CHECK_C_SOURCE_COMPILES (
+ "#include<byteswap.h>\nint main(void){bswap_32(0);return 0;}"
+ HAVE_BSWAP_32)
+CHECK_C_SOURCE_COMPILES (
+ "#include<byteswap.h>\nint main(void){bswap_64(0);return 0;}"
+ HAVE_BSWAP_64)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
diff --git a/Utilities/cmliblzma/liblzma/check/sha256.c b/Utilities/cmliblzma/liblzma/check/sha256.c
index b09ccbf..c2c85eb 100644
--- a/Utilities/cmliblzma/liblzma/check/sha256.c
+++ b/Utilities/cmliblzma/liblzma/check/sha256.c
@@ -80,11 +80,7 @@ static const uint32_t SHA256_K[64] = {
static void
-#ifndef _MSC_VER
-transform(uint32_t state[static 8], const uint32_t data[static 16])
-#else
transform(uint32_t state[], const uint32_t data[])
-#endif
{
uint32_t W[16];
uint32_t T[8];