Home | History | Annotate | Line # | Download | only in zlib1-dll
      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