summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2011-01-12 18:52:14 (GMT)
committerBrad King <brad.king@kitware.com>2011-01-12 18:52:14 (GMT)
commitcf5ad18340f1d775e47c7aa9afde7deb0482027e (patch)
tree7191008f1faa201954c42546ca0c8d0fc17c3a22
parentdde0c89cfcec22ac75cbadd77e45d2113521f326 (diff)
downloadCMake-cf5ad18340f1d775e47c7aa9afde7deb0482027e.zip
CMake-cf5ad18340f1d775e47c7aa9afde7deb0482027e.tar.gz
CMake-cf5ad18340f1d775e47c7aa9afde7deb0482027e.tar.bz2
libarchive: Fix major() check for LSB 4.0 (#11648)
The LSB header files define major() as a macro but if it is ever called the macro references symbols not available at link time. Improve the test for major() to actually call the macro and try to link. This approach is based on upstream libarchive SVN commit 2866 which fixed libarchive issue 125, submitted in response to CMake issue #11648. Inspired-by: Tim Kientzle <kientzle@freebsd.org>
-rw-r--r--Utilities/cmlibarchive/CMakeLists.txt8
1 files changed, 6 insertions, 2 deletions
diff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt
index 8c10b21..6472ec5 100644
--- a/Utilities/cmlibarchive/CMakeLists.txt
+++ b/Utilities/cmlibarchive/CMakeLists.txt
@@ -415,8 +415,12 @@ CHECK_SYMBOL_EXISTS(strerror_r "string.h" HAVE_STRERROR_R)
CHECK_SYMBOL_EXISTS(strftime "time.h" HAVE_STRFTIME)
CHECK_SYMBOL_EXISTS(vprintf "stdio.h" HAVE_VPRINTF)
-CHECK_SYMBOL_EXISTS(major "sys/mkdev.h" MAJOR_IN_MKDEV)
-CHECK_SYMBOL_EXISTS(major "sys/sysmacros.h" MAJOR_IN_SYSMACROS)
+CHECK_C_SOURCE_COMPILES(
+ "#include <sys/mkdev.h>\nint main() { return major(256); }"
+ MAJOR_IN_MKDEV)
+CHECK_C_SOURCE_COMPILES(
+ "#include <sys/sysmacros.h>\nint main() { return major(256); }"
+ MAJOR_IN_SYSMACROS)
IF(HAVE_STRERROR_R)
SET(HAVE_DECL_STRERROR_R 1)