Fixup fromcvs/togit conversion
[minix-pkgsrc.git] / archivers / libarchive / files / CMakeLists.txt
blob776f6c2b3742d494f424856535a01a0ec231bdca
3 PROJECT(libarchive C)
5 CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
6 SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake")
7 if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
8   set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${libarchive_BINARY_DIR}/bin)
9 endif()
12 # Version - read from 'version' file.
14 FILE(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/build/version _version)
15 STRING(REGEX REPLACE
16  "^([0-9])[0-9][0-9][0-9][0-9][0-9][0-9][a-z]?$" "\\1" _major ${_version})
17 STRING(REGEX REPLACE
18  "^[0-9]([0-9][0-9][0-9])[0-9][0-9][0-9][a-z]?$" "\\1" _minor ${_version})
19 STRING(REGEX REPLACE
20  "^[0-9][0-9][0-9][0-9]([0-9][0-9][0-9])[a-z]?$" "\\1" _revision ${_version})
21 STRING(REGEX REPLACE
22  "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9]([a-z]?)$" "\\1" _quality ${_version})
23 SET(_version_number ${_major}${_minor}${_revision})
24 STRING(REGEX REPLACE "[0]*([^0][0-9]*)$" "\\1" _minor ${_minor})
25 STRING(REGEX REPLACE "[0]*([^0][0-9]*)$" "\\1" _revision ${_revision})
27 SET(VERSION                    "${_major}.${_minor}.${_revision}${_quality}")
28 SET(BSDCPIO_VERSION_STRING     "${VERSION}")
29 SET(BSDTAR_VERSION_STRING      "${VERSION}")
30 SET(LIBARCHIVE_VERSION_NUMBER  "${_version_number}")
31 SET(LIBARCHIVE_VERSION_STRING  "${VERSION}")
32 # Shared library number
33 SET(SOVERSION                   8)
35 # Enable CTest/CDash support
36 include(CTest)
38 # Provide ADD_TEST_28 macro to approximate CMake 2.8 ADD_TEST(NAME).
39 # TODO: Require CMake 2.8 and drop this workaround (perhaps late 2010).
40 INCLUDE(AddTest28)
42 OPTION(ENABLE_OPENSSL "Enable use of OpenSSL" ON)
43 OPTION(ENABLE_TAR "Enable tar building" ON)
44 OPTION(ENABLE_TAR_SHARED "Enable dynamic build of tar" OFF)
45 OPTION(ENABLE_CPIO "Enable cpio building" ON)
46 OPTION(ENABLE_CPIO_SHARED "Enable dynamic build of cpio" OFF)
47 OPTION(ENABLE_XATTR "Enable extended attribute support" ON)
48 OPTION(ENABLE_ACL "Enable ACL support" ON)
49 OPTION(ENABLE_TEST "Enable unit and regression tests" ON)
51 IF(ENABLE_TEST)
52         ENABLE_TESTING()
53 ENDIF(ENABLE_TEST)
54 IF(WIN32 AND NOT CYGWIN)
55   # Currently, dynamic build only.
56   SET(ENABLE_TAR_SHARED ON)
57   SET(ENABLE_CPIO_SHARED ON)
58 ENDIF(WIN32 AND NOT CYGWIN)
60 IF(WIN32)
61   SET(_WIN32_WINNT 0x0500 CACHE INTERNAL "Setting _WIN32_WINNT to 0x0500 for Windows 2000 APIs")
62   SET(WINVER 0x0500 CACHE INTERNAL "Setting WINVER to 0x0500 for Windows 2000 APIs")
63 ENDIF(WIN32)
66 INCLUDE(CheckCSourceRuns)
67 INCLUDE(CheckFileOffsetBits)
68 INCLUDE(CheckFuncs)
69 INCLUDE(CheckHeaderDirent)
70 INCLUDE(CheckIncludeFile)
71 INCLUDE(CheckIncludeFiles)
72 INCLUDE(CheckLibraryExists)
73 INCLUDE(CheckStructMember)
74 INCLUDE(CheckSymbolExists)
75 INCLUDE(CheckTypeExists)
76 INCLUDE(CheckTypeSize)
79 # Generate list.h
81 MACRO (GENERATE_LIST_H _listfile _cmlist __list_sources)
82   SET(_argv ${ARGV})
83   # Remove _listfile and _cmlist from _argv
84   LIST(REMOVE_AT _argv 0 1)
85   IF (NOT EXISTS "${_listfile}" OR
86      ${_cmlist} IS_NEWER_THAN "${_listfile}")
88     MESSAGE(STATUS "Generating ${_listfile}")
89     FILE(WRITE ${_listfile} "")
90     FOREACH (testfile ${_argv})
91       IF (testfile MATCHES "^test_[^/]+[.]c$")
92         FILE(STRINGS ${testfile} testvar REGEX "^DEFINE_TEST")
93         FOREACH (deftest ${testvar})
94           FILE(APPEND ${_listfile} "${deftest}\n")
95         ENDFOREACH (deftest)
96       ENDIF (testfile MATCHES "^test_[^/]+[.]c$")
97     ENDFOREACH (testfile)
99   ENDIF (NOT EXISTS "${_listfile}" OR
100      ${_cmlist} IS_NEWER_THAN "${_listfile}")
101 ENDMACRO (GENERATE_LIST_H)
103 # Generate installation rules for man pages.
105 MACRO (INSTALL_MAN __mans)
106   FOREACH (_man ${ARGV})
107     STRING(REGEX REPLACE "^.+[.]([1-9])" "\\1" _mansect ${_man})
108     INSTALL(FILES ${_man} DESTINATION "share/man/man${_mansect}")
109   ENDFOREACH (_man)
110 ENDMACRO (INSTALL_MAN __mans)
113 # Check compress/decompress libraries
115 IF(WIN32 AND NOT CMAKE_CL_64 AND NOT CYGWIN)
116   # GnuWin32 is only for Win32, not Win64.
117   SET(__GNUWIN32PATH "C:/Program Files/GnuWin32")
118 ENDIF(WIN32 AND NOT CMAKE_CL_64 AND NOT CYGWIN)
119 IF(DEFINED __GNUWIN32PATH AND EXISTS "${__GNUWIN32PATH}")
120   # You have to add a path availabel DLL file into PATH environment variable.
121   # Maybe DLL path is "C:/Program Files/GnuWin32/bin".
122   # The zlib and the bzip2 Setup program have installed programs and DLLs into
123   # "C:/Program Files/GnuWin32" by default.
124   # This is convenience setting for Windows.
125   SET(CMAKE_PREFIX_PATH ${__GNUWIN32PATH} $(CMAKE_PREFIX_PATH))
126   #
127   # If you didn't use Setup program or installed into nonstandard path,
128   # cmake cannot find out your zlib or bzip2 libraries and include files,
129   # you should execute cmake with  -DCMAKE_PREFIX_PATH option.
130   #   e.g.
131   #     cmake -DCMAKE_PREFIX_PATH=<your-GnuWin32-path> <path-to-source>
132   #
133   # If compiling error occured in zconf.h, You may need patch to zconf.h.
134   #--- zconf.h.orig     2005-07-21 00:40:26.000000000
135   #+++ zconf.h  2009-01-19 11:39:10.093750000
136   #@@ -286,7 +286,7 @@
137   # 
138   # #if 1           /* HAVE_UNISTD_H -- this line is updated by ./configure */
139   # #  include <sys/types.h> /* for off_t */
140   #-#  include <unistd.h>    /* for SEEK_* and off_t */
141   #+#  include <stdio.h>    /* for SEEK_* and off_t */
142   # #  ifdef VMS
143   # #    include <unixio.h>   /* for off_t */
144   # #  endif
145 ENDIF(DEFINED __GNUWIN32PATH AND EXISTS "${__GNUWIN32PATH}")
147 SET(ADDITIONAL_LIBS "")
149 # Find ZLIB
151 FIND_PACKAGE(ZLIB)
152 IF(ZLIB_FOUND)
153   SET(HAVE_LIBZ 1)
154   SET(HAVE_ZLIB_H 1)
155   INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
156   LIST(APPEND ADDITIONAL_LIBS ${ZLIB_LIBRARIES})
157 ENDIF(ZLIB_FOUND)
158 MARK_AS_ADVANCED(CLEAR ZLIB_INCLUDE_DIR)
159 MARK_AS_ADVANCED(CLEAR ZLIB_LIBRARY)
161 # Find BZip2
163 FIND_PACKAGE(BZip2)
164 IF(BZIP2_FOUND)
165   SET(HAVE_LIBBZ2 1)
166   SET(HAVE_BZLIB_H 1)
167   INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR})
168   LIST(APPEND ADDITIONAL_LIBS ${BZIP2_LIBRARIES})
169 ENDIF(BZIP2_FOUND)
170 MARK_AS_ADVANCED(CLEAR BZIP2_INCLUDE_DIR)
171 MARK_AS_ADVANCED(CLEAR BZIP2_LIBRARY)
173 # Find LZMA
175 FIND_PACKAGE(LZMA)
176 IF(LZMA_FOUND)
177   SET(HAVE_LIBLZMA 1)
178   SET(HAVE_LZMA_H 1)
179   INCLUDE_DIRECTORIES(${LZMA_INCLUDE_DIR})
180   LIST(APPEND ADDITIONAL_LIBS ${LZMA_LIBRARIES})
181   MARK_AS_ADVANCED(CLEAR LZMA_INCLUDE_DIR)
182   MARK_AS_ADVANCED(CLEAR LZMA_LIBRARY)
183 ELSEIF(LZMADEC_FOUND)
184   SET(HAVE_LIBLZMADEC 1)
185   SET(HAVE_LZMADEC_H 1)
186   INCLUDE_DIRECTORIES(${LZMADEC_INCLUDE_DIR})
187   LIST(APPEND ADDITIONAL_LIBS ${LZMADEC_LIBRARIES})
188   MARK_AS_ADVANCED(CLEAR LZMADEC_INCLUDE_DIR)
189   MARK_AS_ADVANCED(CLEAR LZMADEC_LIBRARY)
190 ELSE(LZMA_FOUND)
191   MARK_AS_ADVANCED(CLEAR LZMA_INCLUDE_DIR)
192   MARK_AS_ADVANCED(CLEAR LZMA_LIBRARY)
193 ENDIF(LZMA_FOUND)
196 # Check headers
198 CHECK_HEADER_DIRENT()
200 SET(INCLUDES "")
201 MACRO (LA_CHECK_INCLUDE_FILE header var)
202       CHECK_INCLUDE_FILES("${INCLUDES};${header}" ${var})
203       IF (${var})
204          SET(INCLUDES ${INCLUDES} ${header})
205       ENDIF (${var})
206 ENDMACRO (LA_CHECK_INCLUDE_FILE)
208 # Some FreeBSD headers assume sys/types.h was already included.
209 LA_CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H)
211 # Alphabetize the rest unless there's a compelling reason
212 LA_CHECK_INCLUDE_FILE("acl/libacl.h" HAVE_ACL_LIBACL_H)
213 LA_CHECK_INCLUDE_FILE("ctype.h" HAVE_CTYPE_H)
214 LA_CHECK_INCLUDE_FILE("direct.h" HAVE_DIRECT_H)
215 LA_CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
216 LA_CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H)
217 LA_CHECK_INCLUDE_FILE("ext2fs/ext2_fs.h" HAVE_EXT2FS_EXT2_FS_H)
218 LA_CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H)
219 LA_CHECK_INCLUDE_FILE("grp.h" HAVE_GRP_H)
220 LA_CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
221 LA_CHECK_INCLUDE_FILE("io.h" HAVE_IO_H)
222 LA_CHECK_INCLUDE_FILE("langinfo.h" HAVE_LANGINFO_H)
223 LA_CHECK_INCLUDE_FILE("limits.h" HAVE_LIMITS_H)
224 LA_CHECK_INCLUDE_FILE("linux/fs.h" HAVE_LINUX_FS_H)
225 LA_CHECK_INCLUDE_FILE("locale.h" HAVE_LOCALE_H)
226 LA_CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H)
227 LA_CHECK_INCLUDE_FILE("paths.h" HAVE_PATHS_H)
228 LA_CHECK_INCLUDE_FILE("poll.h" HAVE_POLL_H)
229 LA_CHECK_INCLUDE_FILE("process.h" HAVE_PROCESS_H)
230 LA_CHECK_INCLUDE_FILE("pwd.h" HAVE_PWD_H)
231 LA_CHECK_INCLUDE_FILE("regex.h" HAVE_REGEX_H)
232 LA_CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H)
233 LA_CHECK_INCLUDE_FILE("stdarg.h" HAVE_STDARG_H)
234 LA_CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H)
235 LA_CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H)
236 LA_CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H)
237 LA_CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H)
238 LA_CHECK_INCLUDE_FILE("sys/acl.h" HAVE_SYS_ACL_H)
239 LA_CHECK_INCLUDE_FILE("sys/cdefs.h" HAVE_SYS_CDEFS_H)
240 LA_CHECK_INCLUDE_FILE("sys/ioctl.h" HAVE_SYS_IOCTL_H)
241 LA_CHECK_INCLUDE_FILE("sys/mkdev.h" HAVE_SYS_MKDEV_H)
242 LA_CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
243 LA_CHECK_INCLUDE_FILE("sys/poll.h" HAVE_SYS_POLL_H)
244 LA_CHECK_INCLUDE_FILE("sys/select.h" HAVE_SYS_SELECT_H)
245 LA_CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
246 LA_CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H)
247 LA_CHECK_INCLUDE_FILE("sys/utime.h" HAVE_SYS_UTIME_H)
248 LA_CHECK_INCLUDE_FILE("sys/wait.h" HAVE_SYS_WAIT_H)
249 LA_CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
250 LA_CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
251 LA_CHECK_INCLUDE_FILE("utime.h" HAVE_UTIME_H)
252 LA_CHECK_INCLUDE_FILE("wchar.h" HAVE_WCHAR_H)
253 LA_CHECK_INCLUDE_FILE("wctype.h" HAVE_WCTYPE_H)
254 LA_CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H)
258 # Some headers require extra includes when they're available.
262 # Find OpenSSL
264 IF(ENABLE_OPENSSL)
265   FIND_PACKAGE(OpenSSL)
266 ENDIF()
269 # How to prove that HASH functions, which have several names on various
270 # platforms, can be mapped to archive_{hash name}_init,
271 # archive_{hash name}_update and archive_{hash name}_final through
272 # archive_hash.h
274 MACRO(CHECK_MD HASH IMPLEMENTATIONS)
275     IF(HAVE_SYS_TYPES_H)
276         SET(HASH_HEADER_CONFIG "#define HAVE_SYS_TYPES_H 1\n")
277     ELSE(HAVE_SYS_TYPES_H)
278         SET(HASH_HEADER_CONFIG "")
279     ENDIF(HAVE_SYS_TYPES_H)
281     FOREACH(IMPLEMENTATION ${IMPLEMENTATIONS})
282       IF(NOT DEFINED ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
283         STRING(TOLOWER "${HASH}" lower_hash)
284         STRING(TOUPPER "${HASH}" hash)
286         SET(HASH_REQUIRED_INCLUDES)
287         SET(TRY_HASH_REQUIRED_INCLUDES
288           "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_CURRENT_SOURCE_DIR}/libarchive")
289         SET(HASH_REQUIRED_LIBS)
290         SET(TRY_HASH_REQUIRED_LIBS)
291         IF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND)
292             SET(HASH_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
293             SET(TRY_HASH_REQUIRED_INCLUDES
294               "${TRY_HASH_REQUIRED_INCLUDES};${OPENSSL_INCLUDE_DIR}")
295             SET(HASH_REQUIRED_LIBS ${OPENSSL_LIBRARIES})
296             SET(TRY_HASH_REQUIRED_LIBS
297                 "-DLINK_LIBRARIES:STRING=${OPENSSL_LIBRARIES}")
298         ENDIF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND)
300         SET(SOURCE "#define ${hash}_COMPILE_TEST
301 #define ARCHIVE_HASH_${hash}_${IMPLEMENTATION}
302 #define __LIBARCHIVE_BUILD
303 ${HASH_HEADER_CONFIG}
304 #include \"archive_hash.h\"
307 main(int argc, char **argv)
309         archive_${lower_hash}_ctx ctx;
311         archive_${lower_hash}_init(&ctx);
312         archive_${lower_hash}_update(&ctx, *argv, argc);
313         archive_${lower_hash}_final(&ctx, *argv);
314         return 0;
318         FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_hash_md.c" "${SOURCE}")
319         MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION}")
321         TRY_COMPILE(ARCHIVE_HASH_${HASH}_${IMPLEMENTATION}
322           ${CMAKE_BINARY_DIR}
323           ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_hash_md.c
324           CMAKE_FLAGS
325            "${TRY_HASH_REQUIRED_LIBS}"
326            "${TRY_HASH_REQUIRED_INCLUDES}"
327           OUTPUT_VARIABLE OUTPUT)
329         IF (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
330             MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} -- found")
331             IF (HASH_REQUIRED_INCLUDES)
332                 INCLUDE_DIRECTORIES(${HASH_REQUIRED_INCLUDES})
333             ENDIF (HASH_REQUIRED_INCLUDES)
334             IF (HASH_REQUIRED_LIBS)
335                 LIST(APPEND ADDITIONAL_LIBS ${HASH_REQUIRED_LIBS})
336                 LIST(REMOVE_DUPLICATES ADDITIONAL_LIBS)
337             ENDIF (HASH_REQUIRED_LIBS)
338             BREAK()
339         ENDIF (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
341         MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} -- not found")
342         FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
343             "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} failed with the following output:\n"
344             "${OUTPUT}\n"
345             "Source file was:\n${SOURCE}\n")
346       ELSE(NOT DEFINED ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
347         IF(ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
348            BREAK()
349         ENDIF(ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
350       ENDIF(NOT DEFINED ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
351     ENDFOREACH(IMPLEMENTATION)
352 ENDMACRO(CHECK_MD HASH IMPLEMENTATIONS)
355 # HASH functions on Windows is defined at archive_windows.c, thus we do not
356 # need the test what the functions can be mapped to archive_{hash name}_init,
357 # archive_{hash name}_update and archive_{hash name}_final.
358 # The functions on Windows use CALG_{hash name} macro to create a crypt object
359 # and then we need to know what CALG_{hash name} macros is available to show
360 # ARCHIVE_HASH_{hash name}_WIN macros because Windows 2000 and earlier version
361 # of Windows XP do not support SHA256, SHA384 and SHA512.
363 MACRO(CHECK_HASH_WIN HASH_LIST)
364   IF(WIN32 AND NOT CYGWIN)
365     FOREACH(HASH ${HASH_LIST})
366       IF(NOT DEFINED ARCHIVE_HASH_${HASH}_WIN)
367         STRING(TOUPPER "${HASH}" hash)
368         SET(ALGID "")
369         IF ("${HASH}" MATCHES "^MD5$")
370             SET(ALGID "CALG_MD5")
371         ENDIF ("${HASH}" MATCHES "^MD5$")
372         IF ("${HASH}" MATCHES "^SHA1$")
373             SET(ALGID "CALG_SHA1")
374         ENDIF ("${HASH}" MATCHES "^SHA1$")
375         IF ("${HASH}" MATCHES "^SHA256$")
376             SET(ALGID "CALG_SHA_256")
377         ENDIF ("${HASH}" MATCHES "^SHA256$")
378         IF ("${HASH}" MATCHES "^SHA384$")
379             SET(ALGID "CALG_SHA_384")
380         ENDIF ("${HASH}" MATCHES "^SHA384$")
381         IF ("${HASH}" MATCHES "^SHA512$")
382             SET(ALGID "CALG_SHA_512")
383         ENDIF ("${HASH}" MATCHES "^SHA512$")
385         SET(SOURCE "#define ${hash}_COMPILE_TEST
386 #define _WIN32_WINNT ${_WIN32_WINNT}
387 #define WINVER ${WINVER}
388 #include <windows.h>
389 #include <wincrypt.h>
392 main(int argc, char **argv)
394         return ${ALGID};
397         SET(SOURCE_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_hash_win.c")
399         FILE(WRITE "${SOURCE_FILE}" "${SOURCE}")
400         MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_WIN")
402         TRY_COMPILE(ARCHIVE_HASH_${HASH}_WIN
403           ${CMAKE_BINARY_DIR}
404           ${SOURCE_FILE}
405           CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_CURRENT_SOURCE_DIR}/libarchive"
406           OUTPUT_VARIABLE OUTPUT)
408         IF (ARCHIVE_HASH_${HASH}_WIN)
409             MESSAGE(STATUS
410                 "Checking support for ARCHIVE_HASH_${HASH}_WIN -- found")
411         ELSE (ARCHIVE_HASH_${HASH}_WIN)
412             MESSAGE(STATUS
413                  "Checking support for ARCHIVE_HASH_${HASH}_WIN -- not found")
414             FILE(APPEND
415                 ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
416                 "Checking support for ARCHIVE_HASH_${HASH}_WIN failed with the following output:\n"
417                 "${OUTPUT}\n"
418                 "Source file was:\n${SOURCE}\n")
419         ENDIF (ARCHIVE_HASH_${HASH}_WIN)
421       ENDIF(NOT DEFINED ARCHIVE_HASH_${HASH}_WIN)
422     ENDFOREACH(HASH)
423   ENDIF(WIN32 AND NOT CYGWIN)
424 ENDMACRO(CHECK_HASH_WIN HASH_LIST)
427 # Check MD5/RMD160/SHA support
429 CHECK_MD(MD5 "LIBC;LIBSYSTEM;OPENSSL")
430 CHECK_MD(RMD160 "LIBC;OPENSSL")
431 CHECK_MD(SHA1 "LIBC;LIBSYSTEM;OPENSSL")
432 CHECK_MD(SHA256 "LIBC;LIBC2;LIBC3;LIBSYSTEM;OPENSSL")
433 CHECK_MD(SHA384 "LIBC;LIBC2;LIBC3;LIBSYSTEM;OPENSSL")
434 CHECK_MD(SHA512 "LIBC;LIBC2;LIBC3;LIBSYSTEM;OPENSSL")
435 CHECK_HASH_WIN("MD5;SHA1;SHA256;SHA384;SHA512")
438 # Find Libxml2
440 FIND_PACKAGE(LibXml2)
441 IF(LIBXML2_FOUND)
442   INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
443   LIST(APPEND ADDITIONAL_LIBS ${LIBXML2_LIBRARIES})
444   SET(HAVE_LIBXML2 1)
445   # libxml2's include files use iconv.h
446   # We need a directory path of iconv.h so that it won't fail to check
447   # "libxml/xmlreader.h".
448   FIND_PATH(ICONV_INCLUDE_DIR iconv.h)
449   INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
450   SET(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR})
451   CHECK_INCLUDE_FILES("libxml/xmlreader.h" HAVE_LIBXML_XMLREADER_H)
452   SET(CMAKE_REQUIRED_INCLUDES "")
453 ELSE(LIBXML2_FOUND)
454   #
455   # Find Expat
456   #
457   FIND_PACKAGE(EXPAT)
458   IF(EXPAT_FOUND)
459     INCLUDE_DIRECTORIES(${EXPAT_INCLUDE_DIR})
460     LIST(APPEND ADDITIONAL_LIBS ${EXPAT_LIBRARIES})
461     SET(HAVE_LIBEXPAT 1)
462     LA_CHECK_INCLUDE_FILE("expat.h" HAVE_EXPAT_H)
463   ENDIF(EXPAT_FOUND)
464 ENDIF(LIBXML2_FOUND)
467 # Check functions
469 CHECK_SYMBOL_EXISTS(CreateHardLinkA "windows.h" HAVE_CREATEHARDLINKA)
470 CHECK_SYMBOL_EXISTS(CreateHardLinkW "windows.h" HAVE_CREATEHARDLINKW)
471 CHECK_SYMBOL_EXISTS(_CrtSetReportMode "crtdbg.h" HAVE__CrtSetReportMode)
472 CHECK_FUNCTION_EXISTS_GLIBC(chflags HAVE_CHFLAGS)
473 CHECK_FUNCTION_EXISTS_GLIBC(chown HAVE_CHOWN)
474 CHECK_FUNCTION_EXISTS_GLIBC(chroot HAVE_CHROOT)
475 CHECK_FUNCTION_EXISTS_GLIBC(fchdir HAVE_FCHDIR)
476 CHECK_FUNCTION_EXISTS_GLIBC(fchflags HAVE_FCHFLAGS)
477 CHECK_FUNCTION_EXISTS_GLIBC(fchmod HAVE_FCHMOD)
478 CHECK_FUNCTION_EXISTS_GLIBC(fchown HAVE_FCHOWN)
479 CHECK_FUNCTION_EXISTS_GLIBC(fcntl HAVE_FCNTL)
480 CHECK_FUNCTION_EXISTS_GLIBC(fork HAVE_FORK)
481 CHECK_FUNCTION_EXISTS_GLIBC(fstat HAVE_FSTAT)
482 CHECK_FUNCTION_EXISTS_GLIBC(ftruncate HAVE_FTRUNCATE)
483 CHECK_FUNCTION_EXISTS_GLIBC(futimens HAVE_FUTIMENS)
484 CHECK_FUNCTION_EXISTS_GLIBC(futimes HAVE_FUTIMES)
485 CHECK_FUNCTION_EXISTS_GLIBC(geteuid HAVE_GETEUID)
486 CHECK_FUNCTION_EXISTS_GLIBC(getgrgid_r HAVE_GETGRGID_R)
487 CHECK_FUNCTION_EXISTS_GLIBC(getgrnam_r HAVE_GETGRNAM_R)
488 CHECK_FUNCTION_EXISTS_GLIBC(getpwnam_r HAVE_GETPWNAM_R)
489 CHECK_FUNCTION_EXISTS_GLIBC(getpwuid_r HAVE_GETPWUID_R)
490 CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID)
491 CHECK_FUNCTION_EXISTS_GLIBC(lchflags HAVE_LCHFLAGS)
492 CHECK_FUNCTION_EXISTS_GLIBC(lchmod HAVE_LCHMOD)
493 CHECK_FUNCTION_EXISTS_GLIBC(lchown HAVE_LCHOWN)
494 CHECK_FUNCTION_EXISTS_GLIBC(link HAVE_LINK)
495 CHECK_FUNCTION_EXISTS_GLIBC(lstat HAVE_LSTAT)
496 CHECK_FUNCTION_EXISTS_GLIBC(lutimes HAVE_LUTIMES)
497 CHECK_FUNCTION_EXISTS_GLIBC(memmove HAVE_MEMMOVE)
498 CHECK_FUNCTION_EXISTS_GLIBC(mkdir HAVE_MKDIR)
499 CHECK_FUNCTION_EXISTS_GLIBC(mkfifo HAVE_MKFIFO)
500 CHECK_FUNCTION_EXISTS_GLIBC(mknod HAVE_MKNOD)
501 CHECK_FUNCTION_EXISTS_GLIBC(nl_langinfo HAVE_NL_LANGINFO)
502 CHECK_FUNCTION_EXISTS_GLIBC(pipe HAVE_PIPE)
503 CHECK_FUNCTION_EXISTS_GLIBC(poll HAVE_POLL)
504 CHECK_FUNCTION_EXISTS_GLIBC(readlink HAVE_READLINK)
505 CHECK_FUNCTION_EXISTS_GLIBC(select HAVE_SELECT)
506 CHECK_FUNCTION_EXISTS_GLIBC(setenv HAVE_SETENV)
507 CHECK_FUNCTION_EXISTS_GLIBC(setlocale HAVE_SETLOCALE)
508 CHECK_FUNCTION_EXISTS_GLIBC(sigaction HAVE_SIGACTION)
509 CHECK_FUNCTION_EXISTS_GLIBC(strchr HAVE_STRCHR)
510 CHECK_FUNCTION_EXISTS_GLIBC(strdup HAVE_STRDUP)
511 CHECK_FUNCTION_EXISTS_GLIBC(strerror HAVE_STRERROR)
512 CHECK_FUNCTION_EXISTS_GLIBC(strncpy_s HAVE_STRNCPY_S)
513 CHECK_FUNCTION_EXISTS_GLIBC(strrchr HAVE_STRRCHR)
514 CHECK_FUNCTION_EXISTS_GLIBC(symlink HAVE_SYMLINK)
515 CHECK_FUNCTION_EXISTS_GLIBC(timegm HAVE_TIMEGM)
516 CHECK_FUNCTION_EXISTS_GLIBC(tzset HAVE_TZSET)
517 CHECK_FUNCTION_EXISTS_GLIBC(unsetenv HAVE_UNSETENV)
518 CHECK_FUNCTION_EXISTS_GLIBC(utime HAVE_UTIME)
519 CHECK_FUNCTION_EXISTS_GLIBC(utimes HAVE_UTIMES)
520 CHECK_FUNCTION_EXISTS_GLIBC(utimensat HAVE_UTIMENSAT)
521 CHECK_FUNCTION_EXISTS_GLIBC(vfork HAVE_VFORK)
522 CHECK_FUNCTION_EXISTS_GLIBC(wcrtomb HAVE_WCRTOMB)
523 CHECK_FUNCTION_EXISTS_GLIBC(wcscmp HAVE_WCSCMP)
524 CHECK_FUNCTION_EXISTS_GLIBC(wcscpy HAVE_WCSCPY)
525 CHECK_FUNCTION_EXISTS_GLIBC(wcslen HAVE_WCSLEN)
526 CHECK_FUNCTION_EXISTS_GLIBC(wctomb HAVE_WCTOMB)
527 CHECK_SYMBOL_EXISTS(wmemcmp "wchar.h" HAVE_WMEMCMP)
528 CHECK_SYMBOL_EXISTS(wmemcpy "wchar.h" HAVE_WMEMCPY)
530 SET(CMAKE_REQUIRED_LIBRARIES "")
531 CHECK_SYMBOL_EXISTS(fseeko           "stdio.h"    HAVE_FSEEKO)
532 CHECK_SYMBOL_EXISTS(strerror_r       "string.h"   HAVE_STRERROR_R)
533 CHECK_SYMBOL_EXISTS(strftime         "time.h"     HAVE_STRFTIME)
534 CHECK_SYMBOL_EXISTS(vprintf          "stdio.h"    HAVE_VPRINTF)
535 CHECK_SYMBOL_EXISTS(cygwin_conv_path "sys/cygwin.h" HAVE_CYGWIN_CONV_PATH)
537 CHECK_SYMBOL_EXISTS(major            "sys/mkdev.h"     MAJOR_IN_MKDEV)
538 CHECK_SYMBOL_EXISTS(major            "sys/sysmacros.h" MAJOR_IN_SYSMACROS)
540 IF(HAVE_STRERROR_R)
541   SET(HAVE_DECL_STRERROR_R 1)
542 ENDIF(HAVE_STRERROR_R)
545 # Check defines
547 SET(headers "limits.h")
548 IF(HAVE_STDINT_H)
549   LIST(APPEND headers "stdint.h")
550 ENDIF(HAVE_STDINT_H)
551 IF(HAVE_INTTYPES_H)
552   LIST(APPEND headers "inttypes.h")
553 ENDIF(HAVE_INTTYPES_H)
554 CHECK_SYMBOL_EXISTS(EFTYPE           "errno.h"    HAVE_EFTYPE)
555 CHECK_SYMBOL_EXISTS(EILSEQ           "errno.h"    HAVE_EILSEQ)
556 CHECK_SYMBOL_EXISTS(D_MD_ORDER       "langinfo.h" HAVE_D_MD_ORDER)
557 CHECK_SYMBOL_EXISTS(optarg           "unistd.h"   HAVE_DECL_OPTARG)
558 CHECK_SYMBOL_EXISTS(optind           "unistd.h"   HAVE_DECL_OPTIND)
559 CHECK_SYMBOL_EXISTS(INT64_MAX        "${headers}" HAVE_DECL_INT64_MAX)
560 CHECK_SYMBOL_EXISTS(INT64_MIN        "${headers}" HAVE_DECL_INT64_MIN)
561 CHECK_SYMBOL_EXISTS(UINT32_MAX       "${headers}" HAVE_DECL_UINT32_MAX)
562 CHECK_SYMBOL_EXISTS(UINT64_MAX       "${headers}" HAVE_DECL_UINT64_MAX)
563 CHECK_SYMBOL_EXISTS(SIZE_MAX         "${headers}" HAVE_DECL_SIZE_MAX)
564 CHECK_SYMBOL_EXISTS(SSIZE_MAX        "limits.h"   HAVE_DECL_SSIZE_MAX)
567 # Check struct members
569 # Check for birthtime in struct stat
570 CHECK_STRUCT_MEMBER("struct stat" st_birthtime
571     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_BIRTHTIME)
573 # Check for high-resolution timestamps in struct stat
574 CHECK_STRUCT_MEMBER("struct stat" st_birthtimespec.tv_nsec
575     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC)
576 CHECK_STRUCT_MEMBER("struct stat" st_mtimespec.tv_nsec
577     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC)
578 CHECK_STRUCT_MEMBER("struct stat" st_mtim.tv_nsec
579     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
580 CHECK_STRUCT_MEMBER("struct stat" st_mtime_n
581     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIME_N)
582 CHECK_STRUCT_MEMBER("struct stat" st_umtime
583     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_UMTIME)
584 CHECK_STRUCT_MEMBER("struct stat" st_mtime_usec
585     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIME_USEC)
586 # Check for block size support in struct stat
587 CHECK_STRUCT_MEMBER("struct stat" st_blksize
588     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_BLKSIZE)
589 # Check for st_flags in struct stat (BSD fflags)
590 CHECK_STRUCT_MEMBER("struct stat" st_flags
591     "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_FLAGS)
594 CHECK_STRUCT_MEMBER("struct tm" tm_sec
595     "sys/types.h;sys/time.h;time.h" TIME_WITH_SYS_TIME)
598 # Check for integer types
600 # XXX There must be a way to make this simpler <sigh> XXXX
602 CHECK_TYPE_SIZE("long long int"            LONG_LONG_INT)
603 CHECK_TYPE_SIZE("unsigned long long"       UNSIGNED_LONG_LONG)
604 CHECK_TYPE_SIZE("unsigned long long int"   UNSIGNED_LONG_LONG_INT)
607 CHECK_TYPE_SIZE(dev_t       DEV_T)
608 IF(NOT HAVE_DEV_T)
609   IF(MSVC)
610     SET(dev_t "unsigned int")
611   ENDIF(MSVC)
612 ENDIF(NOT HAVE_DEV_T)
614 CHECK_TYPE_SIZE(gid_t       GID_T)
615 IF(NOT HAVE_GID_T)
616   IF(WIN32)
617     SET(gid_t "short")
618   ELSE(WIN32)
619     SET(gid_t "unsigned int")
620   ENDIF(WIN32)
621 ENDIF(NOT HAVE_GID_T)
623 CHECK_TYPE_SIZE(id_t        ID_T)
624 IF(NOT HAVE_ID_T)
625   IF(WIN32)
626     SET(id_t "short")
627   ELSE(WIN32)
628     SET(id_t "unsigned int")
629   ENDIF(WIN32)
630 ENDIF(NOT HAVE_ID_T)
632 CHECK_TYPE_SIZE(int32_t    INT32_T)
633 IF(NOT HAVE_INT32_T)
634   SET(int32_t "int")
635 ENDIF(NOT HAVE_INT32_T)
637 CHECK_TYPE_SIZE(int64_t     INT64_T)
638 IF(NOT HAVE_INT64_T)
639   IF(WIN32)
640     SET(int64_t __int64)
641   ENDIF(WIN32)
642 ENDIF(NOT HAVE_INT64_T)
644 CHECK_TYPE_SIZE(intmax_t    INTMAX_T)
645 IF(NOT HAVE_INTMAX_T)
646   SET(intmax_t "int64_t")
647 ENDIF(NOT HAVE_INTMAX_T)
649 CHECK_TYPE_SIZE(mode_t      MODE_T)
650 IF(NOT HAVE_MODE_T)
651   IF(WIN32)
652     SET(mode_t "unsigned short")
653   ELSE(WIN32)
654     SET(mode_t "int")
655   ENDIF(WIN32)
656 ENDIF(NOT HAVE_MODE_T)
658 CHECK_TYPE_SIZE(off_t       OFF_T)
659 IF(NOT HAVE_OFF_T)
660   SET(off_t "__int64")
661 ENDIF(NOT HAVE_OFF_T)
663 CHECK_TYPE_SIZE(size_t      SIZE_T)
664 IF(NOT HAVE_SIZE_T)
665   IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
666     SET(size_t "uint64_t")
667   ELSE("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
668     SET(size_t   "uint32_t")
669   ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
670 ENDIF(NOT HAVE_SIZE_T)
672 CHECK_TYPE_SIZE(ssize_t     SSIZE_T)
673 IF(NOT HAVE_SSIZE_T)
674   IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
675     SET(ssize_t "int64_t")
676   ELSE("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
677     SET(ssize_t "long")
678   ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
679 ENDIF(NOT HAVE_SSIZE_T)
681 CHECK_TYPE_SIZE(uid_t       UID_T)
682 IF(NOT HAVE_UID_T)
683   IF(WIN32)
684     SET(uid_t "short")
685   ELSE(WIN32)
686     SET(uid_t "unsigned int")
687   ENDIF(WIN32)
688 ENDIF(NOT HAVE_UID_T)
690 CHECK_TYPE_SIZE(pid_t       PID_T)
691 IF(NOT HAVE_PID_T)
692   IF(WIN32)
693     SET(pid_t "int")
694   ELSE(WIN32)
695     MESSAGE(FATAL_ERROR "pid_t doesn't exist on this platform?")
696   ENDIF(WIN32)
697 ENDIF(NOT HAVE_PID_T)
699 CHECK_TYPE_SIZE(uint16_t    UINT16_T)
700 IF(NOT HAVE_UINT16_T)
701   SET(uint16_t "unsigned short")
702 ENDIF(NOT HAVE_UINT16_T)
704 CHECK_TYPE_SIZE(uint32_t    UINT32_T)
705 IF(NOT HAVE_UINT32_T)
706   SET(uint32_t "unsigned int")
707 ENDIF(NOT HAVE_UINT32_T)
709 CHECK_TYPE_SIZE(uint64_t    UINT64_T)
710 IF(NOT HAVE_UINT64_T)
711   IF(WIN32)
712     SET(uint64_t "unsigned __int64")
713   ENDIF(WIN32)
714 ENDIF(NOT HAVE_UINT64_T)
716 CHECK_TYPE_SIZE(uintmax_t   UINTMAX_T)
717 IF(NOT HAVE_UINTMAX_T)
718   SET(uintmax_t "uint64_t")
719 ENDIF(NOT HAVE_UINTMAX_T)
721 CHECK_TYPE_SIZE(intptr_t   INTPTR_T)
722 IF(NOT HAVE_INTPTR_T)
723   IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
724     SET(intptr_t "int64_t")
725   ELSE()
726     SET(intptr_t "int32_t")
727   ENDIF()
728 ENDIF(NOT HAVE_INTPTR_T)
730 CHECK_TYPE_SIZE(uintptr_t   UINTPTR_T)
731 IF(NOT HAVE_UINTPTR_T)
732   IF("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
733     SET(uintptr_t "uint64_t")
734   ELSE()
735     SET(uintptr_t "uint32_t")
736   ENDIF()
737 ENDIF(NOT HAVE_UINTPTR_T)
739 CHECK_TYPE_SIZE(wchar_t     SIZEOF_WCHAR_T)
740 IF(HAVE_SIZEOF_WCHAR_T)
741   SET(HAVE_WCHAR_T 1)
742 ENDIF(HAVE_SIZEOF_WCHAR_T)
744 # Check if _FILE_OFFSET_BITS macro needed for large files
746 CHECK_FILE_OFFSET_BITS()
751 # Check for Extended Attribute libraries, headers, and functions
753 IF(ENABLE_XATTR)
754   LA_CHECK_INCLUDE_FILE(attr/xattr.h     HAVE_ATTR_XATTR_H)
755   LA_CHECK_INCLUDE_FILE(sys/xattr.h      HAVE_SYS_XATTR_H)
756   LA_CHECK_INCLUDE_FILE(sys/extattr.h      HAVE_SYS_EXTATTR_H)
757   CHECK_LIBRARY_EXISTS(attr "setxattr" "" HAVE_ATTR_LIB)
758   IF(HAVE_ATTR_LIB)
759     SET(CMAKE_REQUIRED_LIBRARIES "attr")
760   ENDIF(HAVE_ATTR_LIB)
761   CHECK_SYMBOL_EXISTS(EXTATTR_NAMESPACE_USER "sys/types.h;sys/extattr.h" HAVE_DECL_EXTATTR_NAMESPACE_USER)
762   CHECK_FUNCTION_EXISTS_GLIBC(extattr_get_file HAVE_EXTATTR_GET_FILE)
763   CHECK_FUNCTION_EXISTS_GLIBC(extattr_list_file HAVE_EXTATTR_LIST_FILE)
764   CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_fd HAVE_EXTATTR_SET_FD)
765   CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_file HAVE_EXTATTR_SET_FILE)
766   CHECK_FUNCTION_EXISTS_GLIBC(fsetxattr HAVE_FSETXATTR)
767   CHECK_FUNCTION_EXISTS_GLIBC(getxattr HAVE_GETXATTR)
768   CHECK_FUNCTION_EXISTS_GLIBC(lgetxattr HAVE_LGETXATTR)
769   CHECK_FUNCTION_EXISTS_GLIBC(listxattr HAVE_LISTXATTR)
770   CHECK_FUNCTION_EXISTS_GLIBC(llistxattr HAVE_LLISTXATTR)
771   CHECK_FUNCTION_EXISTS_GLIBC(lsetxattr HAVE_LSETXATTR)
772 ENDIF(ENABLE_XATTR)
775 # Check for ACL libraries, headers, and functions
777 # The ACL support in libarchive is written against the POSIX1e draft,
778 # which was never officially approved and varies quite a bit across
779 # platforms.  Worse, some systems have completely non-POSIX acl functions,
780 # which makes the following checks rather more complex than I would like.
782 IF(ENABLE_ACL)
783   CHECK_LIBRARY_EXISTS(acl "acl_get_file" "" HAVE_ACL_LIB)
784   IF(HAVE_ACL_LIB)
785     SET(CMAKE_REQUIRED_LIBRARIES "acl")
786     FIND_LIBRARY(ACL_LIBRARY NAMES acl)
787     LIST(APPEND ADDITIONAL_LIBS ${ACL_LIBRARY})
788   ENDIF(HAVE_ACL_LIB)
789   #
790   CHECK_FUNCTION_EXISTS_GLIBC(acl_create_entry HAVE_ACL_CREATE_ENTRY)
791   CHECK_FUNCTION_EXISTS_GLIBC(acl_init HAVE_ACL_INIT)
792   CHECK_FUNCTION_EXISTS_GLIBC(acl_set_fd HAVE_ACL_SET_FD)
793   CHECK_FUNCTION_EXISTS_GLIBC(acl_set_fd_np HAVE_ACL_SET_FD_NP)
794   CHECK_FUNCTION_EXISTS_GLIBC(acl_set_file HAVE_ACL_SET_FILE)
795   CHECK_TYPE_EXISTS(acl_permset_t "${INCLUDES}"    HAVE_ACL_PERMSET_T)
797   # The "acl_get_perm()" function was omitted from the POSIX draft.
798   # (It's a pretty obvious oversight; otherwise, there's no way to
799   # test for specific permissions in a permset.)  Linux uses the obvious
800   # name, FreeBSD adds _np to mark it as "non-Posix extension."
801   # Test for both as a double-check that we really have POSIX-style ACL support.
802   CHECK_SYMBOL_EXISTS(acl_get_perm "${INCLUDES}" HAVE_ACL_GET_PERM)
803   CHECK_SYMBOL_EXISTS(acl_get_perm_np "${INCLUDES}" HAVE_ACL_GET_PERM_NP)
804   CHECK_SYMBOL_EXISTS(acl_get_link "${INCLUDES}" HAVE_ACL_GET_LINK)
805   CHECK_SYMBOL_EXISTS(acl_get_link_np "${INCLUDES}" HAVE_ACL_GET_LINK_NP)
807   # MacOS has an acl.h that isn't POSIX.  It can be detected by
808   # checking for ACL_USER
809   CHECK_SYMBOL_EXISTS(ACL_USER "${INCLUDES}" HAVE_ACL_USER)
810 ENDIF(ENABLE_ACL)
812 # Generate "config.h" from "build/cmake/config.h.in"
813 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/config.h.in
814         ${CMAKE_CURRENT_BINARY_DIR}/config.h)
815 INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
816 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
819 # Register installation of PDF documents.
821 IF(WIN32 AND NOT CYGWIN)
822   #
823   # On Windows platform, It's better that we install PDF documents
824   # on one's computer.
825   # These PDF documents are available in the release package.
826   #
827   IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/doc/pdf)
828     INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc/pdf
829             DESTINATION share/man
830             FILES_MATCHING PATTERN "*.pdf"
831     )
832   ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/doc/pdf)
833 ENDIF(WIN32 AND NOT CYGWIN)
837 INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/libarchive)
839 IF(MSVC)
840   ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
841 ENDIF(MSVC)
842 # Especially for early development, we want to be a little
843 # aggressive about diagnosing build problems; this can get
844 # relaxed somewhat in final shipping versions.
845 IF ("CMAKE_C_COMPILER_ID" MATCHES "^GNU$")
846   ADD_DEFINITIONS(-Wall -Werror)
847 ENDIF ("CMAKE_C_COMPILER_ID" MATCHES "^GNU$")
849 IF(ENABLE_TEST)
850 ADD_CUSTOM_TARGET(run_all_tests)
851 ENDIF(ENABLE_TEST)
853 add_subdirectory(libarchive)
854 add_subdirectory(tar)
855 add_subdirectory(cpio)