]>
Commit | Line | Data |
---|---|---|
8b7ba998 TK |
1 | # |
2 | # | |
fccf5c27 | 3 | PROJECT(libarchive C) |
8b7ba998 | 4 | # |
d8dabfb7 | 5 | CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR) |
dd63f1c5 | 6 | SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake") |
8b7ba998 TK |
7 | # |
8 | # Version - read from 'version' file. | |
9 | # | |
dd63f1c5 | 10 | FILE(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/build/version _version) |
8b7ba998 | 11 | STRING(REGEX REPLACE |
97b032b7 | 12 | "^([0-9])[0-9][0-9][0-9][0-9][0-9][0-9][a-z]?$" "\\1" _major ${_version}) |
8b7ba998 | 13 | STRING(REGEX REPLACE |
97b032b7 | 14 | "^[0-9]([0-9][0-9][0-9])[0-9][0-9][0-9][a-z]?$" "\\1" _minor ${_version}) |
8b7ba998 | 15 | STRING(REGEX REPLACE |
97b032b7 | 16 | "^[0-9][0-9][0-9][0-9]([0-9][0-9][0-9])[a-z]?$" "\\1" _revision ${_version}) |
8b7ba998 | 17 | STRING(REGEX REPLACE |
97b032b7 | 18 | "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9]([a-z]?)$" "\\1" _quality ${_version}) |
8b7ba998 | 19 | SET(_version_number ${_major}${_minor}${_revision}) |
4c09608f MN |
20 | STRING(REGEX REPLACE "[0]*([^0][0-9]*)$" "\\1" _minor ${_minor}) |
21 | STRING(REGEX REPLACE "[0]*([^0][0-9]*)$" "\\1" _revision ${_revision}) | |
8b7ba998 | 22 | # |
8b7ba998 | 23 | SET(VERSION "${_major}.${_minor}.${_revision}${_quality}") |
806025f2 | 24 | SET(BSDCPIO_VERSION_STRING "${VERSION}") |
8b7ba998 TK |
25 | SET(BSDTAR_VERSION_STRING "${VERSION}") |
26 | SET(LIBARCHIVE_VERSION_NUMBER "${_version_number}") | |
27 | SET(LIBARCHIVE_VERSION_STRING "${VERSION}") | |
d6cd0cbd MN |
28 | # Shared library number |
29 | SET(SOVERSION 8) | |
806025f2 | 30 | |
787a5ff7 TK |
31 | # Enable CTest/CDash support |
32 | include(CTest) | |
33 | ||
09a663f1 BK |
34 | # Provide ADD_TEST_28 macro to approximate CMake 2.8 ADD_TEST(NAME). |
35 | # TODO: Require CMake 2.8 and drop this workaround (perhaps late 2010). | |
36 | INCLUDE(AddTest28) | |
37 | ||
806025f2 | 38 | OPTION(ENABLE_TAR "Enable tar building" ON) |
7a118a73 | 39 | OPTION(ENABLE_TAR_SHARED "Enable dynamic build of tar" OFF) |
806025f2 | 40 | OPTION(ENABLE_CPIO "Enable cpio building" ON) |
7a118a73 | 41 | OPTION(ENABLE_CPIO_SHARED "Enable dynamic build of cpio" OFF) |
806025f2 TK |
42 | OPTION(ENABLE_XATTR "Enable extended attribute support" ON) |
43 | OPTION(ENABLE_ACL "Enable ACL support" ON) | |
44 | OPTION(ENABLE_TEST "Enable unit and regression tests" ON) | |
45 | ||
46 | IF(ENABLE_TEST) | |
47 | ENABLE_TESTING() | |
48 | ENDIF(ENABLE_TEST) | |
926d6bcb MN |
49 | IF(WIN32 AND NOT CYGWIN) |
50 | # Currently, dynamic build only. | |
51 | SET(ENABLE_TAR_SHARED ON) | |
52 | SET(ENABLE_CPIO_SHARED ON) | |
53 | ENDIF(WIN32 AND NOT CYGWIN) | |
806025f2 | 54 | |
197cc2d1 CW |
55 | IF(WIN32) |
56 | SET(_WIN32_WINNT 0x0500 CACHE INTERNAL "Setting _WIN32_WINNT to 0x0500 for Windows 2000 APIs") | |
57 | SET(WINVER 0x0500 CACHE INTERNAL "Setting WINVER to 0x0500 for Windows 2000 APIs") | |
58 | ENDIF(WIN32) | |
59 | ||
8b7ba998 | 60 | # |
794a00f4 | 61 | INCLUDE(CheckCSourceRuns) |
968a8126 | 62 | INCLUDE(CheckFileOffsetBits) |
8b7ba998 | 63 | INCLUDE(CheckFuncs) |
8b7ba998 | 64 | INCLUDE(CheckHeaderDirent) |
8b7ba998 | 65 | INCLUDE(CheckIncludeFile) |
72f559e7 | 66 | INCLUDE(CheckIncludeFiles) |
968a8126 | 67 | INCLUDE(CheckLibraryExists) |
8b7ba998 TK |
68 | INCLUDE(CheckStructMember) |
69 | INCLUDE(CheckSymbolExists) | |
70 | INCLUDE(CheckTypeExists) | |
71 | INCLUDE(CheckTypeSize) | |
87b05751 | 72 | |
8b7ba998 TK |
73 | # |
74 | # Generate list.h | |
75 | # | |
13cc0fb9 MN |
76 | MACRO (GENERATE_LIST_H _listfile _cmlist __list_sources) |
77 | SET(_argv ${ARGV}) | |
78 | # Remove _listfile and _cmlist from _argv | |
79 | LIST(REMOVE_AT _argv 0 1) | |
8b7ba998 | 80 | IF (NOT EXISTS "${_listfile}" OR |
13cc0fb9 | 81 | ${_cmlist} IS_NEWER_THAN "${_listfile}") |
8b7ba998 TK |
82 | |
83 | MESSAGE(STATUS "Generating ${_listfile}") | |
84 | FILE(WRITE ${_listfile} "") | |
13cc0fb9 | 85 | FOREACH (testfile ${_argv}) |
968a8126 | 86 | IF (testfile MATCHES "^test_[^/]+[.]c$") |
8b7ba998 TK |
87 | FILE(STRINGS ${testfile} testvar REGEX "^DEFINE_TEST") |
88 | FOREACH (deftest ${testvar}) | |
89 | FILE(APPEND ${_listfile} "${deftest}\n") | |
90 | ENDFOREACH (deftest) | |
968a8126 | 91 | ENDIF (testfile MATCHES "^test_[^/]+[.]c$") |
8b7ba998 TK |
92 | ENDFOREACH (testfile) |
93 | ||
94 | ENDIF (NOT EXISTS "${_listfile}" OR | |
13cc0fb9 | 95 | ${_cmlist} IS_NEWER_THAN "${_listfile}") |
8b7ba998 | 96 | ENDMACRO (GENERATE_LIST_H) |
1c2e5b54 MN |
97 | # |
98 | # Generate installation rules for man pages. | |
99 | # | |
100 | MACRO (INSTALL_MAN __mans) | |
101 | FOREACH (_man ${ARGV}) | |
102 | STRING(REGEX REPLACE "^.+[.]([1-9])" "\\1" _mansect ${_man}) | |
103 | INSTALL(FILES ${_man} DESTINATION "share/man/man${_mansect}") | |
104 | ENDFOREACH (_man) | |
105 | ENDMACRO (INSTALL_MAN __mans) | |
8b7ba998 TK |
106 | |
107 | # | |
108 | # Check compress/decompress libraries | |
109 | # | |
72881599 MN |
110 | IF(WIN32 AND NOT CMAKE_CL_64 AND NOT CYGWIN) |
111 | # GnuWin32 is only for Win32, not Win64. | |
112 | SET(__GNUWIN32PATH "C:/Program Files/GnuWin32") | |
113 | ENDIF(WIN32 AND NOT CMAKE_CL_64 AND NOT CYGWIN) | |
114 | IF(DEFINED __GNUWIN32PATH AND EXISTS "${__GNUWIN32PATH}") | |
0c4a6ac2 | 115 | # You have to add a path availabel DLL file into PATH environment variable. |
be4c3c3c | 116 | # Maybe DLL path is "C:/Program Files/GnuWin32/bin". |
0c4a6ac2 MN |
117 | # The zlib and the bzip2 Setup program have installed programs and DLLs into |
118 | # "C:/Program Files/GnuWin32" by default. | |
119 | # This is convenience setting for Windows. | |
120 | SET(CMAKE_PREFIX_PATH ${__GNUWIN32PATH} $(CMAKE_PREFIX_PATH)) | |
121 | # | |
122 | # If you didn't use Setup program or installed into nonstandard path, | |
123 | # cmake cannot find out your zlib or bzip2 libraries and include files, | |
124 | # you should execute cmake with -DCMAKE_PREFIX_PATH option. | |
125 | # e.g. | |
76241b4c | 126 | # cmake -DCMAKE_PREFIX_PATH=<your-GnuWin32-path> <path-to-source> |
0c4a6ac2 MN |
127 | # |
128 | # If compiling error occured in zconf.h, You may need patch to zconf.h. | |
129 | #--- zconf.h.orig 2005-07-21 00:40:26.000000000 | |
130 | #+++ zconf.h 2009-01-19 11:39:10.093750000 | |
be4c3c3c MN |
131 | #@@ -286,7 +286,7 @@ |
132 | # | |
133 | # #if 1 /* HAVE_UNISTD_H -- this line is updated by ./configure */ | |
134 | # # include <sys/types.h> /* for off_t */ | |
135 | #-# include <unistd.h> /* for SEEK_* and off_t */ | |
136 | #+# include <stdio.h> /* for SEEK_* and off_t */ | |
137 | # # ifdef VMS | |
138 | # # include <unixio.h> /* for off_t */ | |
139 | # # endif | |
72881599 | 140 | ENDIF(DEFINED __GNUWIN32PATH AND EXISTS "${__GNUWIN32PATH}") |
8b7ba998 TK |
141 | |
142 | SET(ADDITIONAL_LIBS "") | |
143 | # | |
144 | # Find ZLIB | |
145 | # | |
146 | FIND_PACKAGE(ZLIB) | |
147 | IF(ZLIB_FOUND) | |
148 | SET(HAVE_LIBZ 1) | |
149 | SET(HAVE_ZLIB_H 1) | |
150 | INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) | |
151 | LIST(APPEND ADDITIONAL_LIBS ${ZLIB_LIBRARIES}) | |
152 | ENDIF(ZLIB_FOUND) | |
38d31061 TK |
153 | MARK_AS_ADVANCED(CLEAR ZLIB_INCLUDE_DIR) |
154 | MARK_AS_ADVANCED(CLEAR ZLIB_LIBRARY) | |
8b7ba998 TK |
155 | # |
156 | # Find BZip2 | |
157 | # | |
158 | FIND_PACKAGE(BZip2) | |
159 | IF(BZIP2_FOUND) | |
160 | SET(HAVE_LIBBZ2 1) | |
161 | SET(HAVE_BZLIB_H 1) | |
162 | INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR}) | |
163 | LIST(APPEND ADDITIONAL_LIBS ${BZIP2_LIBRARIES}) | |
164 | ENDIF(BZIP2_FOUND) | |
38d31061 TK |
165 | MARK_AS_ADVANCED(CLEAR BZIP2_INCLUDE_DIR) |
166 | MARK_AS_ADVANCED(CLEAR BZIP2_LIBRARY) | |
8b7ba998 TK |
167 | # |
168 | # Find LZMA | |
169 | # | |
170 | FIND_PACKAGE(LZMA) | |
171 | IF(LZMA_FOUND) | |
c25e0da2 MN |
172 | SET(HAVE_LIBLZMA 1) |
173 | SET(HAVE_LZMA_H 1) | |
8b7ba998 TK |
174 | INCLUDE_DIRECTORIES(${LZMA_INCLUDE_DIR}) |
175 | LIST(APPEND ADDITIONAL_LIBS ${LZMA_LIBRARIES}) | |
38d31061 TK |
176 | MARK_AS_ADVANCED(CLEAR LZMA_INCLUDE_DIR) |
177 | MARK_AS_ADVANCED(CLEAR LZMA_LIBRARY) | |
c25e0da2 MN |
178 | ELSEIF(LZMADEC_FOUND) |
179 | SET(HAVE_LIBLZMADEC 1) | |
180 | SET(HAVE_LZMADEC_H 1) | |
181 | INCLUDE_DIRECTORIES(${LZMADEC_INCLUDE_DIR}) | |
182 | LIST(APPEND ADDITIONAL_LIBS ${LZMADEC_LIBRARIES}) | |
38d31061 TK |
183 | MARK_AS_ADVANCED(CLEAR LZMADEC_INCLUDE_DIR) |
184 | MARK_AS_ADVANCED(CLEAR LZMADEC_LIBRARY) | |
185 | ELSE(LZMA_FOUND) | |
186 | MARK_AS_ADVANCED(CLEAR LZMA_INCLUDE_DIR) | |
187 | MARK_AS_ADVANCED(CLEAR LZMA_LIBRARY) | |
8b7ba998 TK |
188 | ENDIF(LZMA_FOUND) |
189 | ||
190 | # | |
191 | # Check headers | |
192 | # | |
8b7ba998 | 193 | CHECK_HEADER_DIRENT() |
8b7ba998 | 194 | |
79150845 TK |
195 | SET(INCLUDES "") |
196 | MACRO (LA_CHECK_INCLUDE_FILE header var) | |
197 | CHECK_INCLUDE_FILES("${INCLUDES};${header}" ${var}) | |
198 | IF (${var}) | |
199 | SET(INCLUDES ${INCLUDES} ${header}) | |
200 | ENDIF (${var}) | |
201 | ENDMACRO (LA_CHECK_INCLUDE_FILE) | |
202 | ||
203 | # Few headers that must precede other headers | |
204 | # Must precede sys/extattr.h on FreeBSD | |
205 | LA_CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) | |
206 | ||
207 | # Alphabetize the rest unless there's a compelling reason | |
208 | LA_CHECK_INCLUDE_FILE("acl/libacl.h" HAVE_ACL_LIBACL_H) | |
209 | LA_CHECK_INCLUDE_FILE("attr/xattr.h" HAVE_ATTR_XATTR_H) | |
210 | LA_CHECK_INCLUDE_FILE("ctype.h" HAVE_CTYPE_H) | |
211 | LA_CHECK_INCLUDE_FILE("direct.h" HAVE_DIRECT_H) | |
212 | LA_CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H) | |
213 | LA_CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H) | |
214 | LA_CHECK_INCLUDE_FILE("ext2fs/ext2_fs.h" HAVE_EXT2FS_EXT2_FS_H) | |
215 | LA_CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H) | |
216 | LA_CHECK_INCLUDE_FILE("grp.h" HAVE_GRP_H) | |
217 | LA_CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H) | |
218 | LA_CHECK_INCLUDE_FILE("io.h" HAVE_IO_H) | |
219 | LA_CHECK_INCLUDE_FILE("langinfo.h" HAVE_LANGINFO_H) | |
220 | LA_CHECK_INCLUDE_FILE("limits.h" HAVE_LIMITS_H) | |
221 | LA_CHECK_INCLUDE_FILE("linux/fs.h" HAVE_LINUX_FS_H) | |
222 | LA_CHECK_INCLUDE_FILE("locale.h" HAVE_LOCALE_H) | |
223 | LA_CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H) | |
224 | LA_CHECK_INCLUDE_FILE("paths.h" HAVE_PATHS_H) | |
225 | LA_CHECK_INCLUDE_FILE("poll.h" HAVE_POLL_H) | |
226 | LA_CHECK_INCLUDE_FILE("process.h" HAVE_PROCESS_H) | |
227 | LA_CHECK_INCLUDE_FILE("pwd.h" HAVE_PWD_H) | |
228 | LA_CHECK_INCLUDE_FILE("regex.h" HAVE_REGEX_H) | |
229 | LA_CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H) | |
230 | LA_CHECK_INCLUDE_FILE("stdarg.h" HAVE_STDARG_H) | |
231 | LA_CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H) | |
232 | LA_CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H) | |
233 | LA_CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H) | |
234 | LA_CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H) | |
235 | LA_CHECK_INCLUDE_FILE("sys/acl.h" HAVE_SYS_ACL_H) | |
5eec93b7 | 236 | LA_CHECK_INCLUDE_FILE("sys/cdefs.h" HAVE_SYS_CDEFS_H) |
79150845 TK |
237 | LA_CHECK_INCLUDE_FILE("sys/extattr.h" HAVE_SYS_EXTATTR_H) |
238 | LA_CHECK_INCLUDE_FILE("sys/ioctl.h" HAVE_SYS_IOCTL_H) | |
239 | LA_CHECK_INCLUDE_FILE("sys/mkdev.h" HAVE_SYS_MKDEV_H) | |
240 | LA_CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H) | |
241 | LA_CHECK_INCLUDE_FILE("sys/poll.h" HAVE_SYS_POLL_H) | |
242 | LA_CHECK_INCLUDE_FILE("sys/select.h" HAVE_SYS_SELECT_H) | |
243 | LA_CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H) | |
244 | LA_CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H) | |
245 | LA_CHECK_INCLUDE_FILE("sys/utime.h" HAVE_SYS_UTIME_H) | |
246 | LA_CHECK_INCLUDE_FILE("sys/wait.h" HAVE_SYS_WAIT_H) | |
247 | LA_CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H) | |
248 | LA_CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) | |
249 | LA_CHECK_INCLUDE_FILE("utime.h" HAVE_UTIME_H) | |
250 | LA_CHECK_INCLUDE_FILE("wchar.h" HAVE_WCHAR_H) | |
251 | LA_CHECK_INCLUDE_FILE("wctype.h" HAVE_WCTYPE_H) | |
252 | LA_CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H) | |
72f559e7 | 253 | |
9cc27fc3 | 254 | |
72f559e7 TK |
255 | # |
256 | # Some headers require extra includes when they're available. | |
257 | # | |
8b7ba998 | 258 | |
10e5183c MN |
259 | # |
260 | # Find OpenSSL | |
261 | # | |
262 | FIND_PACKAGE(OpenSSL) | |
263 | IF(OPENSSL_FOUND) | |
264 | INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) | |
265 | LIST(APPEND ADDITIONAL_LIBS ${OPENSSL_LIBRARIES}) | |
266 | ENDIF(OPENSSL_FOUND) | |
22b1a517 | 267 | # |
380345e6 | 268 | # Check MD5/RMD160/SHA headers |
22b1a517 | 269 | # |
79150845 TK |
270 | LA_CHECK_INCLUDE_FILE("md5.h" HAVE_MD5_H) |
271 | LA_CHECK_INCLUDE_FILE("openssl/md5.h" HAVE_OPENSSL_MD5_H) | |
272 | LA_CHECK_INCLUDE_FILE("openssl/ripemd.h" HAVE_OPENSSL_RIPEMD_H) | |
273 | LA_CHECK_INCLUDE_FILE("openssl/sha.h" HAVE_OPENSSL_SHA_H) | |
274 | LA_CHECK_INCLUDE_FILE("ripemd.h" HAVE_RIPEMD_H) | |
275 | LA_CHECK_INCLUDE_FILE("rmd160.h" HAVE_RMD160_H) | |
276 | LA_CHECK_INCLUDE_FILE("sha.h" HAVE_SHA_H) | |
277 | LA_CHECK_INCLUDE_FILE("sha1.h" HAVE_SHA1_H) | |
278 | LA_CHECK_INCLUDE_FILE("sha2.h" HAVE_SHA2_H) | |
279 | LA_CHECK_INCLUDE_FILE("sha256.h" HAVE_SHA256_H) | |
280 | ||
16151528 | 281 | # |
380345e6 | 282 | # Find MD5/RMD160/SHA library |
16151528 | 283 | # |
2846d884 MN |
284 | FIND_LIBRARY(CRYPTO_LIBRARY NAMES crypto) |
285 | IF(CRYPTO_LIBRARY) | |
286 | LIST(APPEND ADDITIONAL_LIBS ${CRYPTO_LIBRARY}) | |
287 | ELSE(CRYPTO_LIBRARY) | |
10e5183c | 288 | IF(NOT OPENSSL_FOUND) |
2846d884 MN |
289 | FIND_LIBRARY(MD_LIBRARY NAMES md) |
290 | IF(MD_LIBRARY) | |
291 | LIST(APPEND ADDITIONAL_LIBS ${MD_LIBRARY}) | |
292 | ENDIF(MD_LIBRARY) | |
10e5183c | 293 | ENDIF(NOT OPENSSL_FOUND) |
2846d884 MN |
294 | ENDIF(CRYPTO_LIBRARY) |
295 | # | |
380345e6 | 296 | # Check MD5/RMD160/SHA functions |
2846d884 MN |
297 | # |
298 | SET(CMAKE_REQUIRED_LIBRARIES ${ADDITIONAL_LIBS}) | |
69f00c7b BK |
299 | IF(HAVE_MD5_H) |
300 | CHECK_SYMBOL_EXISTS(MD5Init "md5.h" HAVE_MD5INIT) | |
301 | ENDIF(HAVE_MD5_H) | |
302 | IF(HAVE_RMD160_H) | |
303 | CHECK_SYMBOL_EXISTS(RMD160Init "rmd160.h" HAVE_RMD160INIT) | |
304 | ENDIF(HAVE_RMD160_H) | |
305 | IF(HAVE_SHA2_H) | |
306 | CHECK_SYMBOL_EXISTS(SHA256Init "sha2.h" HAVE_SHA256INIT) | |
307 | CHECK_SYMBOL_EXISTS(SHA384Init "sha2.h" HAVE_SHA384INIT) | |
308 | CHECK_SYMBOL_EXISTS(SHA512Init "sha2.h" HAVE_SHA512INIT) | |
309 | CHECK_SYMBOL_EXISTS(SHA256_Init "sha2.h" HAVE_SHA256_INIT) | |
310 | CHECK_SYMBOL_EXISTS(SHA384_Init "sha2.h" HAVE_SHA384_INIT) | |
311 | CHECK_SYMBOL_EXISTS(SHA512_Init "sha2.h" HAVE_SHA512_INIT) | |
1ee74d95 BK |
312 | ELSEIF(HAVE_OPENSSL_SHA_H) |
313 | CHECK_SYMBOL_EXISTS(SHA256_Init "openssl/sha.h" HAVE_OPENSSL_SHA256_INIT) | |
314 | CHECK_SYMBOL_EXISTS(SHA384_Init "openssl/sha.h" HAVE_OPENSSL_SHA384_INIT) | |
315 | CHECK_SYMBOL_EXISTS(SHA512_Init "openssl/sha.h" HAVE_OPENSSL_SHA512_INIT) | |
316 | ENDIF() | |
69f00c7b | 317 | SET(CMAKE_REQUIRED_LIBRARIES "") |
22b1a517 | 318 | |
d2c0930d MN |
319 | # |
320 | # Find Libxml2 | |
321 | # | |
322 | FIND_PACKAGE(LibXml2) | |
323 | IF(LIBXML2_FOUND) | |
324 | INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR}) | |
325 | LIST(APPEND ADDITIONAL_LIBS ${LIBXML2_LIBRARIES}) | |
326 | SET(HAVE_LIBXML2 1) | |
327 | # libxml2's include files use iconv.h | |
328 | # We need a directory path of iconv.h so that it won't fail to check | |
329 | # "libxml/xmlreader.h". | |
330 | FIND_PATH(ICONV_INCLUDE_DIR iconv.h) | |
331 | SET(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) | |
332 | LA_CHECK_INCLUDE_FILE("libxml/xmlreader.h" HAVE_LIBXML_XMLREADER_H) | |
333 | SET(CMAKE_REQUIRED_INCLUDES "") | |
334 | ELSE(LIBXML2_FOUND) | |
335 | # | |
336 | # Find Expat | |
337 | # | |
aa5b327f MN |
338 | FIND_PACKAGE(EXPAT) |
339 | IF(EXPAT_FOUND) | |
340 | INCLUDE_DIRECTORIES(${EXPAT_INCLUDE_DIR}) | |
341 | LIST(APPEND ADDITIONAL_LIBS ${EXPAT_LIBRARIES}) | |
342 | SET(HAVE_LIBEXPAT 1) | |
343 | LA_CHECK_INCLUDE_FILE("expat.h" HAVE_EXPAT_H) | |
344 | ENDIF(EXPAT_FOUND) | |
d2c0930d MN |
345 | ENDIF(LIBXML2_FOUND) |
346 | ||
8b7ba998 TK |
347 | # |
348 | # Check functions | |
349 | # | |
197cc2d1 | 350 | CHECK_SYMBOL_EXISTS(CreateHardLinkA "windows.h" HAVE_CREATEHARDLINKA) |
3407cbf6 | 351 | CHECK_SYMBOL_EXISTS(CreateHardLinkW "windows.h" HAVE_CREATEHARDLINKW) |
3f7c4c64 | 352 | CHECK_SYMBOL_EXISTS(_CrtSetReportMode "crtdbg.h" HAVE__CrtSetReportMode) |
950a18b3 TK |
353 | CHECK_FUNCTION_EXISTS_GLIBC(chflags HAVE_CHFLAGS) |
354 | CHECK_FUNCTION_EXISTS_GLIBC(chown HAVE_CHOWN) | |
355 | CHECK_FUNCTION_EXISTS_GLIBC(chroot HAVE_CHROOT) | |
356 | CHECK_FUNCTION_EXISTS_GLIBC(fchdir HAVE_FCHDIR) | |
357 | CHECK_FUNCTION_EXISTS_GLIBC(fchflags HAVE_FCHFLAGS) | |
358 | CHECK_FUNCTION_EXISTS_GLIBC(fchmod HAVE_FCHMOD) | |
359 | CHECK_FUNCTION_EXISTS_GLIBC(fchown HAVE_FCHOWN) | |
360 | CHECK_FUNCTION_EXISTS_GLIBC(fcntl HAVE_FCNTL) | |
361 | CHECK_FUNCTION_EXISTS_GLIBC(fork HAVE_FORK) | |
362 | CHECK_FUNCTION_EXISTS_GLIBC(fstat HAVE_FSTAT) | |
363 | CHECK_FUNCTION_EXISTS_GLIBC(ftruncate HAVE_FTRUNCATE) | |
c9ad879b | 364 | CHECK_FUNCTION_EXISTS_GLIBC(futimens HAVE_FUTIMENS) |
950a18b3 TK |
365 | CHECK_FUNCTION_EXISTS_GLIBC(futimes HAVE_FUTIMES) |
366 | CHECK_FUNCTION_EXISTS_GLIBC(geteuid HAVE_GETEUID) | |
367 | CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID) | |
368 | CHECK_FUNCTION_EXISTS_GLIBC(lchflags HAVE_LCHFLAGS) | |
369 | CHECK_FUNCTION_EXISTS_GLIBC(lchmod HAVE_LCHMOD) | |
370 | CHECK_FUNCTION_EXISTS_GLIBC(lchown HAVE_LCHOWN) | |
371 | CHECK_FUNCTION_EXISTS_GLIBC(link HAVE_LINK) | |
372 | CHECK_FUNCTION_EXISTS_GLIBC(lstat HAVE_LSTAT) | |
373 | CHECK_FUNCTION_EXISTS_GLIBC(lutimes HAVE_LUTIMES) | |
374 | CHECK_FUNCTION_EXISTS_GLIBC(memmove HAVE_MEMMOVE) | |
950a18b3 TK |
375 | CHECK_FUNCTION_EXISTS_GLIBC(mkdir HAVE_MKDIR) |
376 | CHECK_FUNCTION_EXISTS_GLIBC(mkfifo HAVE_MKFIFO) | |
377 | CHECK_FUNCTION_EXISTS_GLIBC(mknod HAVE_MKNOD) | |
378 | CHECK_FUNCTION_EXISTS_GLIBC(nl_langinfo HAVE_NL_LANGINFO) | |
379 | CHECK_FUNCTION_EXISTS_GLIBC(pipe HAVE_PIPE) | |
380 | CHECK_FUNCTION_EXISTS_GLIBC(poll HAVE_POLL) | |
381 | CHECK_FUNCTION_EXISTS_GLIBC(readlink HAVE_READLINK) | |
382 | CHECK_FUNCTION_EXISTS_GLIBC(select HAVE_SELECT) | |
383 | CHECK_FUNCTION_EXISTS_GLIBC(setenv HAVE_SETENV) | |
384 | CHECK_FUNCTION_EXISTS_GLIBC(setlocale HAVE_SETLOCALE) | |
b5bae8ca | 385 | CHECK_FUNCTION_EXISTS_GLIBC(sigaction HAVE_SIGACTION) |
950a18b3 TK |
386 | CHECK_FUNCTION_EXISTS_GLIBC(strchr HAVE_STRCHR) |
387 | CHECK_FUNCTION_EXISTS_GLIBC(strdup HAVE_STRDUP) | |
388 | CHECK_FUNCTION_EXISTS_GLIBC(strerror HAVE_STRERROR) | |
125047fc | 389 | CHECK_FUNCTION_EXISTS_GLIBC(strncpy_s HAVE_STRNCPY_S) |
950a18b3 TK |
390 | CHECK_FUNCTION_EXISTS_GLIBC(strrchr HAVE_STRRCHR) |
391 | CHECK_FUNCTION_EXISTS_GLIBC(symlink HAVE_SYMLINK) | |
392 | CHECK_FUNCTION_EXISTS_GLIBC(timegm HAVE_TIMEGM) | |
393 | CHECK_FUNCTION_EXISTS_GLIBC(tzset HAVE_TZSET) | |
394 | CHECK_FUNCTION_EXISTS_GLIBC(unsetenv HAVE_UNSETENV) | |
395 | CHECK_FUNCTION_EXISTS_GLIBC(utime HAVE_UTIME) | |
396 | CHECK_FUNCTION_EXISTS_GLIBC(utimes HAVE_UTIMES) | |
3b73222c | 397 | CHECK_FUNCTION_EXISTS_GLIBC(utimensat HAVE_UTIMENSAT) |
950a18b3 TK |
398 | CHECK_FUNCTION_EXISTS_GLIBC(vfork HAVE_VFORK) |
399 | CHECK_FUNCTION_EXISTS_GLIBC(wcrtomb HAVE_WCRTOMB) | |
400 | CHECK_FUNCTION_EXISTS_GLIBC(wcscpy HAVE_WCSCPY) | |
401 | CHECK_FUNCTION_EXISTS_GLIBC(wcslen HAVE_WCSLEN) | |
402 | CHECK_FUNCTION_EXISTS_GLIBC(wctomb HAVE_WCTOMB) | |
403 | CHECK_SYMBOL_EXISTS(wmemcmp "wchar.h" HAVE_WMEMCMP) | |
404 | CHECK_SYMBOL_EXISTS(wmemcpy "wchar.h" HAVE_WMEMCPY) | |
8b7ba998 TK |
405 | |
406 | SET(CMAKE_REQUIRED_LIBRARIES "") | |
8b7ba998 TK |
407 | CHECK_SYMBOL_EXISTS(fseeko "stdio.h" HAVE_FSEEKO) |
408 | CHECK_SYMBOL_EXISTS(strerror_r "string.h" HAVE_STRERROR_R) | |
409 | CHECK_SYMBOL_EXISTS(strftime "time.h" HAVE_STRFTIME) | |
410 | CHECK_SYMBOL_EXISTS(vprintf "stdio.h" HAVE_VPRINTF) | |
15caccc3 | 411 | CHECK_SYMBOL_EXISTS(cygwin_conv_path "sys/cygwin.h" HAVE_CYGWIN_CONV_PATH) |
8b7ba998 | 412 | |
003ae2f2 BK |
413 | CHECK_SYMBOL_EXISTS(major "sys/mkdev.h" MAJOR_IN_MKDEV) |
414 | CHECK_SYMBOL_EXISTS(major "sys/sysmacros.h" MAJOR_IN_SYSMACROS) | |
415 | ||
8b7ba998 TK |
416 | IF(HAVE_STRERROR_R) |
417 | SET(HAVE_DECL_STRERROR_R 1) | |
418 | ENDIF(HAVE_STRERROR_R) | |
419 | ||
420 | # | |
421 | # Check defines | |
422 | # | |
159c809b BK |
423 | SET(headers "limits.h") |
424 | IF(HAVE_STDINT_H) | |
425 | LIST(APPEND headers "stdint.h") | |
426 | ENDIF(HAVE_STDINT_H) | |
427 | IF(HAVE_INTTYPES_H) | |
428 | LIST(APPEND headers "inttypes.h") | |
429 | ENDIF(HAVE_INTTYPES_H) | |
8b7ba998 TK |
430 | CHECK_SYMBOL_EXISTS(EFTYPE "errno.h" HAVE_EFTYPE) |
431 | CHECK_SYMBOL_EXISTS(EILSEQ "errno.h" HAVE_EILSEQ) | |
432 | CHECK_SYMBOL_EXISTS(D_MD_ORDER "langinfo.h" HAVE_D_MD_ORDER) | |
8b7ba998 TK |
433 | CHECK_SYMBOL_EXISTS(optarg "unistd.h" HAVE_DECL_OPTARG) |
434 | CHECK_SYMBOL_EXISTS(optind "unistd.h" HAVE_DECL_OPTIND) | |
159c809b BK |
435 | CHECK_SYMBOL_EXISTS(INT64_MAX "${headers}" HAVE_DECL_INT64_MAX) |
436 | CHECK_SYMBOL_EXISTS(INT64_MIN "${headers}" HAVE_DECL_INT64_MIN) | |
437 | CHECK_SYMBOL_EXISTS(UINT32_MAX "${headers}" HAVE_DECL_UINT32_MAX) | |
438 | CHECK_SYMBOL_EXISTS(UINT64_MAX "${headers}" HAVE_DECL_UINT64_MAX) | |
439 | CHECK_SYMBOL_EXISTS(SIZE_MAX "${headers}" HAVE_DECL_SIZE_MAX) | |
8b7ba998 TK |
440 | CHECK_SYMBOL_EXISTS(SSIZE_MAX "limits.h" HAVE_DECL_SSIZE_MAX) |
441 | ||
442 | # | |
443 | # Check struct members | |
444 | # | |
445 | # Check for birthtime in struct stat | |
446 | CHECK_STRUCT_MEMBER("struct stat" st_birthtime | |
447 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_BIRTHTIME) | |
448 | ||
449 | # Check for high-resolution timestamps in struct stat | |
450 | CHECK_STRUCT_MEMBER("struct stat" st_birthtimespec.tv_nsec | |
451 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC) | |
452 | CHECK_STRUCT_MEMBER("struct stat" st_mtimespec.tv_nsec | |
453 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC) | |
454 | CHECK_STRUCT_MEMBER("struct stat" st_mtim.tv_nsec | |
455 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC) | |
d3c720f3 MN |
456 | CHECK_STRUCT_MEMBER("struct stat" st_mtime_n |
457 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIME_N) | |
458 | CHECK_STRUCT_MEMBER("struct stat" st_umtime | |
459 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_UMTIME) | |
a101fb70 MN |
460 | CHECK_STRUCT_MEMBER("struct stat" st_mtime_usec |
461 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIME_USEC) | |
8b7ba998 TK |
462 | # Check for block size support in struct stat |
463 | CHECK_STRUCT_MEMBER("struct stat" st_blksize | |
464 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_BLKSIZE) | |
465 | # Check for st_flags in struct stat (BSD fflags) | |
466 | CHECK_STRUCT_MEMBER("struct stat" st_flags | |
467 | "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_FLAGS) | |
468 | # | |
469 | # | |
470 | CHECK_STRUCT_MEMBER("struct tm" tm_sec | |
471 | "sys/types.h;sys/time.h;time.h" TIME_WITH_SYS_TIME) | |
472 | ||
473 | # | |
87b05751 TK |
474 | # Check for integer types |
475 | # | |
476 | # XXX There must be a way to make this simpler <sigh> XXXX | |
8b7ba998 TK |
477 | # |
478 | CHECK_TYPE_SIZE("long long int" LONG_LONG_INT) | |
479 | CHECK_TYPE_SIZE("unsigned long long" UNSIGNED_LONG_LONG) | |
480 | CHECK_TYPE_SIZE("unsigned long long int" UNSIGNED_LONG_LONG_INT) | |
481 | ||
482 | # | |
483 | CHECK_TYPE_SIZE(dev_t DEV_T) | |
484 | IF(NOT HAVE_DEV_T) | |
485 | IF(MSVC) | |
486 | SET(dev_t "unsigned int") | |
487 | ENDIF(MSVC) | |
488 | ENDIF(NOT HAVE_DEV_T) | |
489 | # | |
490 | CHECK_TYPE_SIZE(gid_t GID_T) | |
491 | IF(NOT HAVE_GID_T) | |
492 | IF(WIN32) | |
1e202fe1 | 493 | SET(gid_t "short") |
2566a7ab | 494 | ELSE(WIN32) |
1e202fe1 | 495 | SET(gid_t "unsigned int") |
8b7ba998 TK |
496 | ENDIF(WIN32) |
497 | ENDIF(NOT HAVE_GID_T) | |
498 | # | |
499 | CHECK_TYPE_SIZE(id_t ID_T) | |
500 | IF(NOT HAVE_ID_T) | |
1e202fe1 TK |
501 | IF(WIN32) |
502 | SET(id_t "short") | |
2566a7ab | 503 | ELSE(WIN32) |
1e202fe1 TK |
504 | SET(id_t "unsigned int") |
505 | ENDIF(WIN32) | |
8b7ba998 TK |
506 | ENDIF(NOT HAVE_ID_T) |
507 | # | |
5dcb6ce8 MN |
508 | CHECK_TYPE_SIZE(int32_t INT32_T) |
509 | IF(NOT HAVE_INT32_T) | |
ad739669 | 510 | SET(int32_t "int") |
5dcb6ce8 MN |
511 | ENDIF(NOT HAVE_INT32_T) |
512 | # | |
8b7ba998 TK |
513 | CHECK_TYPE_SIZE(int64_t INT64_T) |
514 | IF(NOT HAVE_INT64_T) | |
12eb9483 | 515 | IF(WIN32) |
8b7ba998 | 516 | SET(int64_t __int64) |
12eb9483 | 517 | ENDIF(WIN32) |
8b7ba998 TK |
518 | ENDIF(NOT HAVE_INT64_T) |
519 | # | |
520 | CHECK_TYPE_SIZE(intmax_t INTMAX_T) | |
521 | IF(NOT HAVE_INTMAX_T) | |
b2c66028 | 522 | SET(intmax_t "int64_t") |
8b7ba998 TK |
523 | ENDIF(NOT HAVE_INTMAX_T) |
524 | # | |
525 | CHECK_TYPE_SIZE(mode_t MODE_T) | |
526 | IF(NOT HAVE_MODE_T) | |
2566a7ab | 527 | IF(WIN32) |
8b7ba998 | 528 | SET(mode_t "unsigned short") |
2566a7ab | 529 | ELSE(WIN32) |
8b7ba998 | 530 | SET(mode_t "int") |
2566a7ab | 531 | ENDIF(WIN32) |
8b7ba998 TK |
532 | ENDIF(NOT HAVE_MODE_T) |
533 | # | |
534 | CHECK_TYPE_SIZE(off_t OFF_T) | |
535 | IF(NOT HAVE_OFF_T) | |
2566a7ab | 536 | SET(off_t "__int64") |
8b7ba998 TK |
537 | ENDIF(NOT HAVE_OFF_T) |
538 | # | |
8b7ba998 TK |
539 | CHECK_TYPE_SIZE(size_t SIZE_T) |
540 | IF(NOT HAVE_SIZE_T) | |
e0f0abf0 BK |
541 | IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) |
542 | SET(size_t "uint64_t") | |
543 | ELSE("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) | |
544 | SET(size_t "uint32_t") | |
545 | ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) | |
8b7ba998 TK |
546 | ENDIF(NOT HAVE_SIZE_T) |
547 | # | |
548 | CHECK_TYPE_SIZE(ssize_t SSIZE_T) | |
549 | IF(NOT HAVE_SSIZE_T) | |
e0f0abf0 BK |
550 | IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) |
551 | SET(ssize_t "int64_t") | |
552 | ELSE("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) | |
553 | SET(ssize_t "long") | |
554 | ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) | |
8b7ba998 TK |
555 | ENDIF(NOT HAVE_SSIZE_T) |
556 | # | |
557 | CHECK_TYPE_SIZE(uid_t UID_T) | |
558 | IF(NOT HAVE_UID_T) | |
559 | IF(WIN32) | |
1e202fe1 | 560 | SET(uid_t "short") |
2566a7ab | 561 | ELSE(WIN32) |
1e202fe1 | 562 | SET(uid_t "unsigned int") |
8b7ba998 TK |
563 | ENDIF(WIN32) |
564 | ENDIF(NOT HAVE_UID_T) | |
565 | # | |
566 | CHECK_TYPE_SIZE(uint16_t UINT16_T) | |
567 | IF(NOT HAVE_UINT16_T) | |
ad739669 | 568 | SET(uint16_t "unsigned short") |
8b7ba998 TK |
569 | ENDIF(NOT HAVE_UINT16_T) |
570 | # | |
571 | CHECK_TYPE_SIZE(uint32_t UINT32_T) | |
572 | IF(NOT HAVE_UINT32_T) | |
ad739669 | 573 | SET(uint32_t "unsigned int") |
8b7ba998 TK |
574 | ENDIF(NOT HAVE_UINT32_T) |
575 | # | |
576 | CHECK_TYPE_SIZE(uint64_t UINT64_T) | |
577 | IF(NOT HAVE_UINT64_T) | |
12eb9483 | 578 | IF(WIN32) |
8b7ba998 | 579 | SET(uint64_t "unsigned __int64") |
12eb9483 | 580 | ENDIF(WIN32) |
8b7ba998 TK |
581 | ENDIF(NOT HAVE_UINT64_T) |
582 | # | |
583 | CHECK_TYPE_SIZE(uintmax_t UINTMAX_T) | |
584 | IF(NOT HAVE_UINTMAX_T) | |
b2c66028 | 585 | SET(uintmax_t "uint64_t") |
8b7ba998 | 586 | ENDIF(NOT HAVE_UINTMAX_T) |
19a8ead1 | 587 | # |
be2f791b BK |
588 | CHECK_TYPE_SIZE(intptr_t INTPTR_T) |
589 | IF(NOT HAVE_INTPTR_T) | |
590 | IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) | |
591 | SET(intptr_t "int64_t") | |
592 | ELSE() | |
593 | SET(intptr_t "int32_t") | |
594 | ENDIF() | |
595 | ENDIF(NOT HAVE_INTPTR_T) | |
596 | # | |
597 | CHECK_TYPE_SIZE(uintptr_t UINTPTR_T) | |
598 | IF(NOT HAVE_UINTPTR_T) | |
599 | IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) | |
600 | SET(uintptr_t "uint64_t") | |
601 | ELSE() | |
602 | SET(uintptr_t "uint32_t") | |
603 | ENDIF() | |
604 | ENDIF(NOT HAVE_UINTPTR_T) | |
605 | # | |
778a496c | 606 | CHECK_TYPE_SIZE(wchar_t SIZEOF_WCHAR_T) |
1b7e93f0 MN |
607 | IF(HAVE_SIZEOF_WCHAR_T) |
608 | SET(HAVE_WCHAR_T 1) | |
609 | ENDIF(HAVE_SIZEOF_WCHAR_T) | |
778a496c | 610 | # |
19a8ead1 MN |
611 | # Check if _FILE_OFFSET_BITS macro needed for large files |
612 | # | |
613 | CHECK_FILE_OFFSET_BITS() | |
8b7ba998 | 614 | |
794a00f4 TK |
615 | |
616 | ||
8b7ba998 | 617 | # |
87b05751 | 618 | # Check for Extended Attribute libraries, headers, and functions |
8b7ba998 | 619 | # |
806025f2 | 620 | IF(ENABLE_XATTR) |
79150845 TK |
621 | LA_CHECK_INCLUDE_FILE(attr/xattr.h HAVE_ATTR_XATTR_H) |
622 | LA_CHECK_INCLUDE_FILE(sys/xattr.h HAVE_SYS_XATTR_H) | |
8b7ba998 TK |
623 | CHECK_LIBRARY_EXISTS(attr "setxattr" "" HAVE_ATTR_LIB) |
624 | IF(HAVE_ATTR_LIB) | |
625 | SET(CMAKE_REQUIRED_LIBRARIES "attr") | |
626 | ENDIF(HAVE_ATTR_LIB) | |
950a18b3 TK |
627 | CHECK_FUNCTION_EXISTS_GLIBC(extattr_get_file HAVE_EXTATTR_GET_FILE) |
628 | CHECK_FUNCTION_EXISTS_GLIBC(extattr_list_file HAVE_EXTATTR_LIST_FILE) | |
629 | CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_fd HAVE_EXTATTR_SET_FD) | |
630 | CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_file HAVE_EXTATTR_SET_FILE) | |
631 | CHECK_FUNCTION_EXISTS_GLIBC(fsetxattr HAVE_FSETXATTR) | |
632 | CHECK_FUNCTION_EXISTS_GLIBC(getxattr HAVE_GETXATTR) | |
633 | CHECK_FUNCTION_EXISTS_GLIBC(lgetxattr HAVE_LGETXATTR) | |
634 | CHECK_FUNCTION_EXISTS_GLIBC(listxattr HAVE_LISTXATTR) | |
635 | CHECK_FUNCTION_EXISTS_GLIBC(llistxattr HAVE_LLISTXATTR) | |
636 | CHECK_FUNCTION_EXISTS_GLIBC(lsetxattr HAVE_LSETXATTR) | |
806025f2 | 637 | ENDIF(ENABLE_XATTR) |
8b7ba998 TK |
638 | |
639 | # | |
87b05751 | 640 | # Check for ACL libraries, headers, and functions |
8b7ba998 TK |
641 | # |
642 | # The ACL support in libarchive is written against the POSIX1e draft, | |
643 | # which was never officially approved and varies quite a bit across | |
644 | # platforms. Worse, some systems have completely non-POSIX acl functions, | |
645 | # which makes the following checks rather more complex than I would like. | |
646 | # | |
806025f2 | 647 | IF(ENABLE_ACL) |
8b7ba998 TK |
648 | CHECK_LIBRARY_EXISTS(acl "acl_get_file" "" HAVE_ACL_LIB) |
649 | IF(HAVE_ACL_LIB) | |
650 | SET(CMAKE_REQUIRED_LIBRARIES "acl") | |
79150845 TK |
651 | FIND_LIBRARY(ACL_LIBRARY NAMES acl) |
652 | LIST(APPEND ADDITIONAL_LIBS ${ACL_LIBRARY}) | |
8b7ba998 TK |
653 | ENDIF(HAVE_ACL_LIB) |
654 | # | |
950a18b3 TK |
655 | CHECK_FUNCTION_EXISTS_GLIBC(acl_create_entry HAVE_ACL_CREATE_ENTRY) |
656 | CHECK_FUNCTION_EXISTS_GLIBC(acl_init HAVE_ACL_INIT) | |
657 | CHECK_FUNCTION_EXISTS_GLIBC(acl_set_fd HAVE_ACL_SET_FD) | |
658 | CHECK_FUNCTION_EXISTS_GLIBC(acl_set_fd_np HAVE_ACL_SET_FD_NP) | |
659 | CHECK_FUNCTION_EXISTS_GLIBC(acl_set_file HAVE_ACL_SET_FILE) | |
79150845 | 660 | CHECK_TYPE_EXISTS(acl_permset_t "${INCLUDES}" HAVE_ACL_PERMSET_T) |
8b7ba998 TK |
661 | |
662 | # The "acl_get_perm()" function was omitted from the POSIX draft. | |
663 | # (It's a pretty obvious oversight; otherwise, there's no way to | |
664 | # test for specific permissions in a permset.) Linux uses the obvious | |
665 | # name, FreeBSD adds _np to mark it as "non-Posix extension." | |
666 | # Test for both as a double-check that we really have POSIX-style ACL support. | |
79150845 TK |
667 | CHECK_SYMBOL_EXISTS(acl_get_perm "${INCLUDES}" HAVE_ACL_GET_PERM) |
668 | CHECK_SYMBOL_EXISTS(acl_get_perm_np "${INCLUDES}" HAVE_ACL_GET_PERM_NP) | |
669 | CHECK_SYMBOL_EXISTS(acl_get_link "${INCLUDES}" HAVE_ACL_GET_LINK) | |
670 | CHECK_SYMBOL_EXISTS(acl_get_link_np "${INCLUDES}" HAVE_ACL_GET_LINK_NP) | |
8b7ba998 TK |
671 | |
672 | # MacOS has an acl.h that isn't POSIX. It can be detected by | |
673 | # checking for ACL_USER | |
79150845 | 674 | CHECK_SYMBOL_EXISTS(ACL_USER "${INCLUDES}" HAVE_ACL_USER) |
806025f2 | 675 | ENDIF(ENABLE_ACL) |
8b7ba998 | 676 | |
968a8126 | 677 | # Generate "config.h" from "build/cmake/config.h.in" |
23c96a24 | 678 | CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/config.h.in |
806025f2 | 679 | ${CMAKE_CURRENT_BINARY_DIR}/config.h) |
5a1e844e | 680 | INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) |
3133e6d6 | 681 | ADD_DEFINITIONS(-DHAVE_CONFIG_H) |
8b7ba998 | 682 | |
2753f77f MN |
683 | # |
684 | # Register installation of PDF documents. | |
685 | # | |
686 | IF(WIN32 AND NOT CYGWIN) | |
687 | # | |
688 | # On Windows platform, It's better that we install PDF documents | |
689 | # on one's computer. | |
690 | # These PDF documents are available in the release package. | |
691 | # | |
692 | IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/doc/pdf) | |
693 | INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc/pdf | |
694 | DESTINATION share/man | |
695 | FILES_MATCHING PATTERN "*.pdf" | |
696 | ) | |
697 | ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/doc/pdf) | |
698 | ENDIF(WIN32 AND NOT CYGWIN) | |
8b7ba998 | 699 | # |
8b7ba998 | 700 | # |
968a8126 | 701 | # |
8b7ba998 | 702 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libarchive) |
8b7ba998 TK |
703 | # |
704 | IF(MSVC) | |
63bbbfa2 | 705 | ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE) |
8b7ba998 | 706 | ENDIF(MSVC) |
0b377bc4 MN |
707 | # Especially for early development, we want to be a little |
708 | # aggressive about diagnosing build problems; this can get | |
709 | # relaxed somewhat in final shipping versions. | |
710 | IF ("CMAKE_C_COMPILER_ID" MATCHES "^GNU$") | |
711 | ADD_DEFINITIONS(-Wall -Werror) | |
712 | ENDIF ("CMAKE_C_COMPILER_ID" MATCHES "^GNU$") | |
8b7ba998 | 713 | |
4427c8a5 TK |
714 | IF(ENABLE_TEST) |
715 | ADD_CUSTOM_TARGET(run_all_tests) | |
716 | ENDIF(ENABLE_TEST) | |
0f7a479b | 717 | |
968a8126 MN |
718 | add_subdirectory(libarchive) |
719 | add_subdirectory(tar) | |
720 | add_subdirectory(cpio) |