cmake_minimum_required(VERSION 3.5) project(zlib LANGUAGES C VERSION 1.3.1.1) option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" ON) option(ZLIB_BUILD_SHARED "Enable building zlib shared library" ON) option(ZLIB_BUILD_STATIC "Enable building zlib static library" ON) if(WIN32) option(ZLIB_INSTALL_COMPAT_DLL "Install a copy as zlib1.dll" ON) endif(WIN32) include(CheckTypeSize) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckCSourceCompiles) include(GNUInstallDirs) enable_testing() # # Check to see if we have large file support # set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) check_type_size(off64_t OFF64_T) set(CMAKE_REQUIRED_DEFINITIONS) # clear variable # # Check for fseeko # check_function_exists(fseeko HAVE_FSEEKO) # # Check for unistd.h # check_include_file(unistd.h Z_HAVE_UNISTD_H) set(ZLIB_PC ${zlib_BINARY_DIR}/zlib.pc) configure_file( ${zlib_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY) configure_file( ${zlib_SOURCE_DIR}/zconf.h.cmakein ${zlib_BINARY_DIR}/zconf.h @ONLY) 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 $<$:-DGCC_WINDRES>) if(WIN32) set (zlib_static_suffix "s") set (zlib_debug_suffix "d") endif(WIN32) if(ZLIB_BUILD_SHARED) add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS} $<$:win32/zlib1.rc>) target_include_directories(zlib PUBLIC $ $) target_compile_definitions(zlib PRIVATE $<$:_LARGEFILE64_SOURCE=1> $<$:NO_FSEEKO> $<$:_CRT_SECURE_NO_DEPRECATE> $<$:_CRT_NONSTDC_NO_DEPRECATE>) set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL SOVERSION 1 PROPERTIES OUTPUT_NAME z PROPERTIES OUTPUT_NAME_DEBUG z${zlib_debug_suffix}) 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}) target_include_directories(zlibstatic PUBLIC $ $) target_compile_definitions(zlibstatic PRIVATE $<$:NO_FSEEKO> $<$:_CRT_SECURE_NO_DEPRECATE> $<$:_CRT_NONSTDC_NO_DEPRECATE> PUBLIC $<$:_LARGEFILE64_SOURCE=1>) set_target_properties(zlibstatic PROPERTIES PROPERTIES OUTPUT_NAME z${zlib_static_suffix} PROPERTIES OUTPUT_NAME_DEBUG z${zlib_static_suffix}${zlib_debug_suffix}) endif(ZLIB_BUILD_STATIC) if(NOT CYGWIN AND ZLIB_BUILD_SHARED) # This property causes shared libraries on Linux to have the full version # encoded into their final filename. We disable this on Cygwin because # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll # seems to be the default. # # This has no effect with MSVC, on that platform the version info for # the DLL comes from the resource file win32/zlib1.rc set_target_properties(zlib PROPERTIES VERSION ${zlib_VERSION}) endif(NOT CYGWIN AND ZLIB_BUILD_SHARED) if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) if(ZLIB_BUILD_SHARED) install(TARGETS zlib RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") if(ZLIB_INSTALL_COMPAT_DLL) install(FILES $ RENAME zlib1.dll DESTINATION "${CMAKE_INSTALL_BINDIR}") endif(ZLIB_INSTALL_COMPAT_DLL) if(MSVC) install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug OR RelWithDebInfo OPTIONAL ) endif(MSVC) endif(ZLIB_BUILD_SHARED) if(ZLIB_BUILD_STATIC) install(TARGETS zlibstatic RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") endif(ZLIB_BUILD_STATIC) endif(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") endif(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) install(FILES zlib.3 DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") endif(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) install(FILES ${ZLIB_PC} DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") endif(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) #============================================================================ # Example binaries #============================================================================ if(ZLIB_BUILD_EXAMPLES) add_executable(zlib_example test/example.c) target_link_libraries(zlib_example zlib) add_test(zlib_example zlib_example) add_executable(minigzip test/minigzip.c) target_link_libraries(minigzip zlib) if(HAVE_OFF64_T) add_executable(zlib_example64 test/example.c) target_compile_definitions(zlib_example64 PRIVATE LARGEFILE64_SOURCE=1) target_link_libraries(zlib_example64 zlib) add_test(zlib_example64 zlib_example64) add_executable(minigzip64 test/minigzip.c) target_compile_definitions(minigzip64 PRIVATE LARGEFILE64_SOURCE=1) target_link_libraries(minigzip64 zlib) endif(HAVE_OFF64_T) endif(ZLIB_BUILD_EXAMPLES)