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