mirror of https://github.com/madler/zlib.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
319 lines
10 KiB
319 lines
10 KiB
cmake_minimum_required(VERSION 3.10) |
|
|
|
project(zlib |
|
LANGUAGES C |
|
VERSION 1.3.1.1 |
|
HOMEPAGE_URL "https://zlib.net/" |
|
DESCRIPTION "a general-purpose lossless data-compression library") |
|
|
|
#============================================================================ |
|
# CPack |
|
#============================================================================ |
|
set(CPACK_PACKAGE_VENDOR "zlib-Project") |
|
set(CPACK_PACKAGE_DESCRIPTION_FILE ${zlib_SOURCE_DIR}/README) |
|
set(CPACK_RESOURCE_FILE_LICENSE ${zlib_SOURCE_DIR}/LICENSE) |
|
set(CPACK_RESOURCE_FILE_README ${zlib_SOURCE_DIR}/README) |
|
|
|
#============================================================================ |
|
# configuration |
|
#============================================================================ |
|
|
|
option(ZLIB_BUILD_TESTING "Enable Zlib Examples as tests" ON) |
|
option(ZLIB_BUILD_SHARED "Enable building zlib shared library" ON) |
|
option(ZLIB_BUILD_STATIC "Enable building zlib static library" ON) |
|
option(ZLIB_BUILD_MINIZIP "Enable building libminizip contrib library" OFF) |
|
option(ZLIB_INSTALL_LIBRARIES "Enable installation of zlib" ON) |
|
option(ZLIB_PREFIX |
|
"prefix for all types and library functions, see zconf.h.in" |
|
OFF) |
|
mark_as_advanced(ZLIB_PREFIX) |
|
|
|
if(WIN32) |
|
option(ZLIB_INSTALL_COMPAT_DLL "Install a copy as zlib1.dll" ON) |
|
endif(WIN32) |
|
|
|
get_property(IS_MULTI GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) |
|
|
|
if(NOT DEFINED CMAKE_BUILD_TYPE AND NOT IS_MULTI) |
|
message(STATUS "No CMAKE_BUILD_TYPE set -- using Release") |
|
set(CMAKE_BUILD_TYPE Release) |
|
endif(NOT DEFINED CMAKE_BUILD_TYPE AND NOT IS_MULTI) |
|
include(CheckTypeSize) |
|
include(CheckFunctionExists) |
|
include(CheckIncludeFile) |
|
include(CheckCSourceCompiles) |
|
include(CMakePackageConfigHelpers) |
|
include(CPack) |
|
include(GNUInstallDirs) |
|
|
|
if(NOT ZLIB_CONF_WRITTEN) |
|
set(Z_PREFIX ${ZLIB_PREFIX}) |
|
set(CONF_OUT_FILE ${zlib_BINARY_DIR}/zconf.h.cmakein) |
|
file(READ ${zlib_SOURCE_DIR}/zconf.h.in ZCONF_CONTENT LIMIT 245) |
|
file(WRITE ${CONF_OUT_FILE} ${ZCONF_CONTENT}) |
|
file(APPEND ${CONF_OUT_FILE} "#cmakedefine Z_PREFIX 1\n") |
|
file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_STDARG_H 1\n") |
|
file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_UNISTD_H 1\n") |
|
file(READ ${zlib_SOURCE_DIR}/zconf.h.in ZCONF_CONTENT OFFSET 244) |
|
set(FIRST_ITEM TRUE) |
|
|
|
foreach(item IN LISTS ZCONF_CONTENT) |
|
if(FIRST_ITEM) |
|
string(APPEND OUT_CONTENT ${item}) |
|
set(FIRST_ITEM FALSE) |
|
else(FIRST_ITEM) |
|
string(APPEND OUT_CONTENT "\;" ${item}) |
|
endif(FIRST_ITEM) |
|
endforeach(item IN LISTS ${ZCONF_CONTENT}) |
|
|
|
file(APPEND ${CONF_OUT_FILE} ${OUT_CONTENT}) |
|
set(ZLIB_CONF_WRITTEN TRUE CACHE BOOL "zconf.h.cmakein was created") |
|
mark_as_advanced(ZLIB_CONF_WRITTEN) |
|
endif(NOT ZLIB_CONF_WRITTEN) |
|
|
|
# |
|
# Check to see if we have large file support |
|
# |
|
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) |
|
check_type_size(off64_t OFF64_T) |
|
unset(CMAKE_REQUIRED_DEFINITIONS) # clear variable |
|
|
|
# |
|
# Check for fseeko |
|
# |
|
check_function_exists(fseeko HAVE_FSEEKO) |
|
|
|
# |
|
# Check for stdarg.h |
|
# |
|
check_include_file(stdarg.h HAVE_STDARG_H) |
|
|
|
# |
|
# Check for unistd.h |
|
# |
|
check_include_file(unistd.h HAVE_UNISTD_H) |
|
|
|
# |
|
# Check visibility attribute is supported |
|
# |
|
if(MSVC) |
|
set(CMAKE_REQUIRED_FLAGS "-WX") |
|
else(MSVC) |
|
set(CMAKE_REQUIRED_FLAGS "-WError") |
|
endif(MSVC) |
|
|
|
check_c_source_compiles( |
|
" |
|
#include <stdlib.h> |
|
static void f(void) __attribute__ ((visibility(\"hidden\"))); |
|
int main(void) {return 0;} |
|
" |
|
HAVE___ATTR__VIS_HIDDEN) |
|
|
|
unset(CMAKE_COMPILE_FLAGS) |
|
set(ZLIB_PC ${zlib_BINARY_DIR}/zlib.pc) |
|
configure_file(${zlib_SOURCE_DIR}/zlib.pc.cmakein |
|
${ZLIB_PC} @ONLY) |
|
configure_file(${zlib_BINARY_DIR}/zconf.h.cmakein |
|
${zlib_BINARY_DIR}/zconf.h) |
|
include_directories(${zlib_BINARY_DIR} ${zlib_SOURCE_DIR}) |
|
|
|
#============================================================================ |
|
# zlib |
|
#============================================================================ |
|
|
|
set(ZLIB_PUBLIC_HDRS |
|
${zlib_BINARY_DIR}/zconf.h |
|
zlib.h) |
|
|
|
set(ZLIB_PRIVATE_HDRS |
|
crc32.h |
|
deflate.h |
|
gzguts.h |
|
inffast.h |
|
inffixed.h |
|
inflate.h |
|
inftrees.h |
|
trees.h |
|
zutil.h) |
|
|
|
set(ZLIB_SRCS |
|
adler32.c |
|
compress.c |
|
crc32.c |
|
deflate.c |
|
gzclose.c |
|
gzlib.c |
|
gzread.c |
|
gzwrite.c |
|
inflate.c |
|
infback.c |
|
inftrees.c |
|
inffast.c |
|
trees.c |
|
uncompr.c |
|
zutil.c) |
|
|
|
set_source_files_properties(win32/zlib1.rc PROPERTIES |
|
COMPILE_FLAGS $<$<STREQUAL:${CMAKE_RC_OUTPUT_EXTENSION},.obj>:-DGCC_WINDRES>) |
|
|
|
if(WIN32) |
|
set(zlib_static_suffix "s") |
|
set(CMAKE_DEBUG_POSTFIX "d") |
|
endif(WIN32) |
|
|
|
if(ZLIB_BUILD_SHARED) |
|
add_library(zlib SHARED |
|
${ZLIB_SRCS} |
|
${ZLIB_DLL_SRCS} |
|
${ZLIB_PUBLIC_HDRS} |
|
${ZLIB_PRIVATE_HDRS} |
|
$<$<OR:$<BOOL:${WIN32}>,$<BOOL:${CYGWIN}>>:win32/zlib1.rc>) |
|
add_library(ZLIB::ZLIB ALIAS zlib) |
|
target_include_directories(zlib PUBLIC |
|
$<BUILD_INTERFACE:${zlib_BINARY_DIR}> |
|
$<BUILD_INTERFACE:${zlib_SOURCE_DIR}> |
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |
|
target_compile_definitions(zlib |
|
PRIVATE |
|
$<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO> |
|
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> |
|
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE> |
|
$<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE> |
|
PUBLIC |
|
$<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) |
|
set(INSTALL_VERSION ${zlib_VERSION}) |
|
|
|
if(NOT CYGWIN) |
|
set_target_properties(zlib PROPERTIES |
|
SOVERSION ${zlib_VERSION_MAJOR} |
|
VERSION ${INSTALL_VERSION}) |
|
endif(NOT CYGWIN) |
|
|
|
set_target_properties(zlib PROPERTIES |
|
DEFINE_SYMBOL ZLIB_DLL |
|
EXPORT_NAME ZLIB |
|
OUTPUT_NAME z) |
|
if(UNIX AND NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX)) |
|
# On unix-like platforms the library is almost always called libz |
|
set_target_properties(zlib PROPERTIES |
|
LINK_FLAGS "-Wl,--version-script,\"${zlib_SOURCE_DIR}/zlib.map\"") |
|
endif(UNIX AND NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX)) |
|
endif(ZLIB_BUILD_SHARED) |
|
|
|
if(ZLIB_BUILD_STATIC) |
|
add_library(zlibstatic STATIC |
|
${ZLIB_SRCS} |
|
${ZLIB_PUBLIC_HDRS} |
|
${ZLIB_PRIVATE_HDRS}) |
|
add_library(ZLIB::ZLIBSTATIC ALIAS zlibstatic) |
|
target_include_directories(zlibstatic PUBLIC |
|
$<BUILD_INTERFACE:${zlib_BINARY_DIR}> |
|
$<BUILD_INTERFACE:${zlib_SOURCE_DIR}> |
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |
|
target_compile_definitions(zlibstatic |
|
PRIVATE |
|
$<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO> |
|
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> |
|
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE> |
|
$<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE> |
|
PUBLIC |
|
$<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) |
|
set_target_properties(zlibstatic PROPERTIES |
|
EXPORT_NAME ZLIBSTATIC |
|
OUTPUT_NAME z${zlib_static_suffix}) |
|
endif(ZLIB_BUILD_STATIC) |
|
|
|
if(ZLIB_INSTALL_LIBRARIES) |
|
if(ZLIB_BUILD_SHARED) |
|
install(TARGETS zlib |
|
COMPONENT Runtime |
|
EXPORT zlibExport |
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") |
|
if(ZLIB_INSTALL_COMPAT_DLL) |
|
install(FILES $<TARGET_FILE:zlib> |
|
COMPONENT Runtime |
|
RENAME zlib1.dll |
|
DESTINATION "${CMAKE_INSTALL_BINDIR}") |
|
endif(ZLIB_INSTALL_COMPAT_DLL) |
|
|
|
if(MSVC) |
|
install(FILES $<TARGET_PDB_FILE:zlib> |
|
COMPONENT Runtime |
|
DESTINATION ${CMAKE_INSTALL_BINDIR} |
|
CONFIGURATIONS Debug OR RelWithDebInfo |
|
OPTIONAL |
|
) |
|
endif(MSVC) |
|
endif(ZLIB_BUILD_SHARED) |
|
|
|
if(ZLIB_BUILD_STATIC) |
|
install(TARGETS zlibstatic |
|
COMPONENT Development |
|
EXPORT zlibExport |
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") |
|
if(ZLIB_INSTALL_COMPAT_DLL AND MINGW) |
|
install(FILES $<TARGET_FILE:zlibstatic> |
|
COMPONENT Development |
|
RENAME libz.dll.a |
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}") |
|
endif(ZLIB_INSTALL_COMPAT_DLL AND MINGW) |
|
|
|
endif(ZLIB_BUILD_STATIC) |
|
|
|
configure_package_config_file(${zlib_SOURCE_DIR}/zlibConfig.cmake.in |
|
${zlib_BINARY_DIR}/ZLIBConfig.cmake |
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib |
|
NO_CHECK_REQUIRED_COMPONENTS_MACRO) |
|
|
|
write_basic_package_version_file( |
|
"${zlib_BINARY_DIR}/ZLIBConfigVersion.cmake" |
|
VERSION "${zlib_VERSION}" |
|
COMPATIBILITY AnyNewerVersion) |
|
|
|
install(FILES |
|
${zlib_BINARY_DIR}/ZLIBConfig.cmake |
|
${zlib_BINARY_DIR}/ZLIBConfigVersion.cmake |
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib) |
|
|
|
install(EXPORT zlibExport |
|
FILE ZLIB.cmake |
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib |
|
NAMESPACE ZLIB::) |
|
|
|
install(FILES ${ZLIB_PUBLIC_HDRS} |
|
COMPONENT Development |
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") |
|
install(FILES zlib.3 |
|
COMPONENT Docs |
|
DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") |
|
install(FILES |
|
LICENSE |
|
doc/algorithm.txt |
|
doc/crc-doc.1.0.pdf |
|
doc/rfc1950.txt |
|
doc/rfc1951.txt |
|
doc/rfc1952.txt |
|
doc/txtvsbin.txt |
|
COMPONENT Docs |
|
DESTINATION "${CMAKE_INSTALL_DOCDIR}/zlib") |
|
install(FILES ${ZLIB_PC} |
|
COMPONENT Development |
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") |
|
endif(ZLIB_INSTALL_LIBRARIES) |
|
|
|
#============================================================================ |
|
# Tests |
|
#============================================================================ |
|
if(ZLIB_BUILD_TESTING) |
|
enable_testing() |
|
add_subdirectory(test) |
|
endif(ZLIB_BUILD_TESTING) |
|
|
|
if(ZLIB_BUILD_MINIZIP) |
|
add_subdirectory(contrib/minizip/) |
|
endif(ZLIB_BUILD_MINIZIP)
|
|
|