1 1.1 christos cmake_minimum_required(VERSION 3.12...3.31) 2 1.1 christos 3 1.1 christos project( 4 1.1 christos zlib1-dll 5 1.1 christos LANGUAGES C 6 1.1 christos VERSION 1.3.2 7 1.1 christos HOMEPAGE_URL "https://zlib.net/" 8 1.1 christos DESCRIPTION "zlib1.dll is the legacy DLL with zlib and minizip") 9 1.1 christos 10 1.1 christos # ============================================================================ 11 1.1 christos # configuration 12 1.1 christos # ============================================================================ 13 1.1 christos 14 1.1 christos if(NOT WIN32) 15 1.1 christos message(FATAL_ERROR "This creates zlib1.<DLL>, Nothing else") 16 1.1 christos endif(NOT WIN32) 17 1.1 christos 18 1.1 christos option(ENABLE_BZIP2 "Build with bzip2 support" OFF) 19 1.1 christos set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) 20 1.1 christos 21 1.1 christos include(CheckCSourceCompiles) 22 1.1 christos include(CheckFunctionExists) 23 1.1 christos include(CheckIncludeFile) 24 1.1 christos include(CMakePackageConfigHelpers) 25 1.1 christos include(CheckTypeSize) 26 1.1 christos include(CPack) 27 1.1 christos include(GNUInstallDirs) 28 1.1 christos 29 1.1 christos if(NOT ZLIB_CONF_WRITTEN) 30 1.1 christos set(CONF_OUT_FILE ${zlib1-dll_BINARY_DIR}/zconf.h.cmakein) 31 1.1 christos file(READ ../../zconf.h ZCONF_CONTENT LIMIT 245) 32 1.1 christos file(WRITE ${CONF_OUT_FILE} ${ZCONF_CONTENT}) 33 1.1 christos file(APPEND ${CONF_OUT_FILE} "#cmakedefine Z_PREFIX 1\n") 34 1.1 christos file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_STDARG_H 1\n") 35 1.1 christos file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_UNISTD_H 1\n") 36 1.1 christos file(READ ../../zconf.h ZCONF_CONTENT OFFSET 244) 37 1.1 christos set(FIRST_ITEM TRUE) 38 1.1 christos 39 1.1 christos foreach(item IN LISTS ZCONF_CONTENT) 40 1.1 christos if(FIRST_ITEM) 41 1.1 christos string(APPEND OUT_CONTENT ${item}) 42 1.1 christos set(FIRST_ITEM FALSE) 43 1.1 christos else(FIRST_ITEM) 44 1.1 christos string(APPEND OUT_CONTENT "\;" ${item}) 45 1.1 christos endif(FIRST_ITEM) 46 1.1 christos endforeach(item IN LISTS ${ZCONF_CONTENT}) 47 1.1 christos 48 1.1 christos file(APPEND ${CONF_OUT_FILE} ${OUT_CONTENT}) 49 1.1 christos set(ZLIB_CONF_WRITTEN 50 1.1 christos TRUE 51 1.1 christos CACHE BOOL "zconf.h.cmakein was created") 52 1.1 christos mark_as_advanced(ZLIB_CONF_WRITTEN) 53 1.1 christos endif(NOT ZLIB_CONF_WRITTEN) 54 1.1 christos 55 1.1 christos if(ENABLE_BZIP2) 56 1.1 christos find_package(BZip2 REQUIRED) 57 1.1 christos endif(ENABLE_BZIP2) 58 1.1 christos 59 1.1 christos # 60 1.1 christos # Check for fopen64 61 1.1 christos # 62 1.1 christos check_function_exists(fopen64 HAVE_FOPEN64) 63 1.1 christos 64 1.1 christos # 65 1.1 christos # Check to see if we have large file support 66 1.1 christos # 67 1.1 christos set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) 68 1.1 christos check_type_size(off64_t OFF64_T) 69 1.1 christos unset(CMAKE_REQUIRED_DEFINITIONS) # clear variable 70 1.1 christos 71 1.1 christos # 72 1.1 christos # Check for fseeko 73 1.1 christos # 74 1.1 christos check_function_exists(fseeko HAVE_FSEEKO) 75 1.1 christos 76 1.1 christos # 77 1.1 christos # Check for stdarg.h 78 1.1 christos # 79 1.1 christos check_include_file(stdarg.h HAVE_STDARG_H) 80 1.1 christos 81 1.1 christos # 82 1.1 christos # Check for unistd.h 83 1.1 christos # 84 1.1 christos check_include_file(unistd.h HAVE_UNISTD_H) 85 1.1 christos 86 1.1 christos # 87 1.1 christos # Check visibility attribute is supported 88 1.1 christos # 89 1.1 christos if(MSVC) 90 1.1 christos set(CMAKE_REQUIRED_FLAGS "-WX") 91 1.1 christos else(MSVC) 92 1.1 christos set(CMAKE_REQUIRED_FLAGS "-Werror") 93 1.1 christos endif(MSVC) 94 1.1 christos 95 1.1 christos check_c_source_compiles( 96 1.1 christos " 97 1.1 christos #include <stdlib.h> 98 1.1 christos static void f(void) __attribute__ ((visibility(\"hidden\"))); 99 1.1 christos int main(void) {return 0;} 100 1.1 christos " 101 1.1 christos HAVE___ATTR__VIS_HIDDEN) 102 1.1 christos 103 1.1 christos unset(CMAKE_COMPILE_FLAGS) 104 1.1 christos configure_file(${zlib1-dll_BINARY_DIR}/zconf.h.cmakein ${zlib1-dll_BINARY_DIR}/zconf.h) 105 1.1 christos 106 1.1 christos # ============================================================================ 107 1.1 christos # zlib1-dll 108 1.1 christos # ============================================================================ 109 1.1 christos set(ZLIB1-DLL_PUBLIC_HDRS 110 1.1 christos ${zlib1-dll_BINARY_DIR}/zconf.h 111 1.1 christos ../../zlib.h 112 1.1 christos ../minizip/crypt.h 113 1.1 christos ../minizip/ints.h 114 1.1 christos ../minizip/ioapi.h 115 1.1 christos ../minizip/mztools.h 116 1.1 christos ../minizip/unzip.h 117 1.1 christos ../minizip/zip.h) 118 1.1 christos 119 1.1 christos set(ZLIB1-DLL_PRIVATE_HDRS 120 1.1 christos ../../crc32.h 121 1.1 christos ../../deflate.h 122 1.1 christos ../../gzguts.h 123 1.1 christos ../../inffast.h 124 1.1 christos ../../inffixed.h 125 1.1 christos ../../inflate.h 126 1.1 christos ../../inftrees.h 127 1.1 christos ../../trees.h 128 1.1 christos ../../zutil.h) 129 1.1 christos 130 1.1 christos set(ZLIB1-DLL_SRCS 131 1.1 christos ../../adler32.c 132 1.1 christos ../../compress.c 133 1.1 christos ../../crc32.c 134 1.1 christos ../../deflate.c 135 1.1 christos ../../gzclose.c 136 1.1 christos ../../gzlib.c 137 1.1 christos ../../gzread.c 138 1.1 christos ../../gzwrite.c 139 1.1 christos ../../inflate.c 140 1.1 christos ../../infback.c 141 1.1 christos ../../inftrees.c 142 1.1 christos ../../inffast.c 143 1.1 christos ../../trees.c 144 1.1 christos ../../uncompr.c 145 1.1 christos ../../win32/zlib1.rc 146 1.1 christos ../../zutil.c 147 1.1 christos ../minizip/ioapi.c 148 1.1 christos ../minizip/mztools.c 149 1.1 christos ../minizip/unzip.c 150 1.1 christos ../minizip/zip.c) 151 1.1 christos 152 1.1 christos add_library(zlib1 SHARED ${ZLIB1-DLL_SRCS} 153 1.1 christos ${ZLIB1-DLL_PUBLIC_HDRS} 154 1.1 christos ${ZLIB1-DLL_PRIVATE_HDRS}) 155 1.1 christos 156 1.1 christos #taget_include_directories doesn't like relative paths 157 1.1 christos include_directories(../../ 158 1.1 christos ../minizip 159 1.1 christos ${CMAKE_CURRENT_BINARY_DIR}) 160 1.1 christos 161 1.1 christos target_compile_definitions(zlib1 162 1.1 christos PRIVATE ZLIB_BUILD 163 1.1 christos $<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO> 164 1.1 christos $<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1> 165 1.1 christos $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> 166 1.1 christos $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE> 167 1.1 christos $<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE> 168 1.1 christos PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1> 169 1.1 christos $<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1> 170 1.1 christos $<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>) 171 1.1 christos 172 1.1 christos target_link_libraries(zlib1 173 1.1 christos PUBLIC $<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2>) 174 1.1 christos 175 1.1 christos if(NOT CYGWIN) 176 1.1 christos set_target_properties(zlib1 PROPERTIES 177 1.1 christos SOVERSION ${zlib1-dll_VERSION_MAJOR} 178 1.1 christos VERSION ${zlib1-dll_VERSION}) 179 1.1 christos endif(NOT CYGWIN) 180 1.1 christos 181 1.1 christos set_target_properties(zlib1 PROPERTIES 182 1.1 christos DEFINE_SYMBOL ZLIB_DLL) 183 1.1 christos 184 1.1 christos install( 185 1.1 christos TARGETS zlib1 186 1.1 christos ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" 187 1.1 christos RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" 188 1.1 christos LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") 189 1.1 christos 190 1.1 christos install( 191 1.1 christos FILES ${ZLIB1-DLL_PUBLIC_HDRS} 192 1.1 christos DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") 193 1.1 christos 194 1.1 christos install( 195 1.1 christos FILES ../../LICENSE 196 1.1 christos DESTINATION "${CMAKE_INSTALL_DOCDIR}/zlib1-dll") 197