diff -ru cmake-2.8.3/Utilities/cmlibarchive/CMakeLists.txt cmake-2.8.3-patched/Utilities/cmlibarchive/CMakeLists.txt --- cmake-2.8.3/Utilities/cmlibarchive/CMakeLists.txt 2010-11-04 06:58:35.000000000 +1100 +++ cmake-2.8.3-patched/Utilities/cmlibarchive/CMakeLists.txt 2011-01-01 13:04:35.000000000 +1100 @@ -415,8 +415,11 @@ 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) +GET_FILENAME_COMPONENT(ccomp_lsbcheck ${CMAKE_C_COMPILER} NAME) +IF(NOT ccomp_lsbcheck STREQUAL "lsbcc") + CHECK_SYMBOL_EXISTS(major "sys/mkdev.h" MAJOR_IN_MKDEV) + CHECK_SYMBOL_EXISTS(major "sys/sysmacros.h" MAJOR_IN_SYSMACROS) +ENDIF() IF(HAVE_STRERROR_R) SET(HAVE_DECL_STRERROR_R 1) diff -ru cmake-2.8.3/Utilities/cmlibarchive/libarchive/archive_entry.c cmake-2.8.3-patched/Utilities/cmlibarchive/libarchive/archive_entry.c --- cmake-2.8.3/Utilities/cmlibarchive/libarchive/archive_entry.c 2010-11-04 06:58:35.000000000 +1100 +++ cmake-2.8.3-patched/Utilities/cmlibarchive/libarchive/archive_entry.c 2011-01-01 13:21:51.000000000 +1100 @@ -86,6 +86,32 @@ #elif defined mkdev || ((defined _WIN32 || defined __WIN32__) && !defined(__CYGWIN__)) /* Windows. */ #define ae_makedev(maj, min) mkdev((maj), (min)) +#elif defined(__LSB_VERSION__) +/* LSB 4.0 does not provide makedev() but all major linux distributions + support it. The implementation is a simple macro anyway so we just + embed it here to allow apps to link when built with LSB compilers. + The major() and minor() macros are similar. For reference, the three + implementations that follow were taken from Fedora 14 x86_64 but other + distributions should be the same. 32-bit Linux headers appears to be + equivalent to these as well. */ +static inline unsigned int major (unsigned long long int dev) +{ + return ((dev >> 8) & 0xfff) | ((unsigned int) (dev >> 32) & ~0xfff); +} + +static inline unsigned int minor (unsigned long long int dev) +{ + return (dev & 0xff) | ((unsigned int) (dev >> 12) & ~0xff); +} + +static inline unsigned long long int makedev (unsigned int majorPart, unsigned int minorPart) +{ + return ((minorPart & 0xff) | ((majorPart & 0xfff) << 8) + | (((unsigned long long int) (minorPart & ~0xff)) << 12) + | (((unsigned long long int) (majorPart & ~0xfff)) << 32)); +} + +#define ae_makedev(maj, min) makedev((maj), (min)) #else /* There's a "makedev" function. */ #define ae_makedev(maj, min) makedev((maj), (min))