Home | History | Annotate | Download | only in zlib
      1 cmake_minimum_required(VERSION 2.4.4)
      2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
      3 
      4 project(zlib C)
      5 
      6 if(NOT DEFINED BUILD_SHARED_LIBS)
      7     option(BUILD_SHARED_LIBS "Build a shared library form of zlib" ON)
      8 endif()
      9 
     10 include(CheckTypeSize)
     11 include(CheckFunctionExists)
     12 include(CheckIncludeFile)
     13 include(CheckCSourceCompiles)
     14 enable_testing()
     15 
     16 check_include_file(sys/types.h HAVE_SYS_TYPES_H)
     17 check_include_file(stdint.h    HAVE_STDINT_H)
     18 check_include_file(stddef.h    HAVE_STDDEF_H)
     19 
     20 #
     21 # Check to see if we have large file support
     22 #
     23 set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)
     24 # We add these other definitions here because CheckTypeSize.cmake
     25 # in CMake 2.4.x does not automatically do so and we want
     26 # compatibility with CMake 2.4.x.
     27 if(HAVE_SYS_TYPES_H)
     28     list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H)
     29 endif()
     30 if(HAVE_STDINT_H)
     31     list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H)
     32 endif()
     33 if(HAVE_STDDEF_H)
     34     list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H)
     35 endif()
     36 check_type_size(off64_t OFF64_T)
     37 if(HAVE_OFF64_T)
     38    add_definitions(-D_LARGEFILE64_SOURCE=1)
     39 endif()
     40 set(CMAKE_REQUIRED_DEFINITIONS) # clear variable
     41 
     42 #
     43 # Check for fseeko
     44 #
     45 check_function_exists(fseeko HAVE_FSEEKO)
     46 if(NOT HAVE_FSEEKO)
     47     add_definitions(-DNO_FSEEKO)
     48 endif()
     49 
     50 #
     51 # Check for unistd.h
     52 #
     53 check_include_file(unistd.h Z_HAVE_UNISTD_H)
     54 
     55 if(MSVC)
     56     set(CMAKE_DEBUG_POSTFIX "d")
     57     add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
     58     add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
     59 endif()
     60 
     61 if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
     62     # If we're doing an out of source build and the user has a zconf.h
     63     # in their source tree...
     64     if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
     65         message(FATAL_ERROR
     66             "You must remove ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h "
     67             "from the source tree.  This file is included with zlib "
     68             "but CMake generates this file for you automatically "
     69             "in the build directory.")
     70   endif()
     71 endif()
     72 
     73 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
     74                ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
     75 include_directories(${CMAKE_CURRENT_BINARY_DIR})
     76 
     77 
     78 #============================================================================
     79 # zlib
     80 #============================================================================
     81 
     82 set(ZLIB_PUBLIC_HDRS
     83     ${CMAKE_CURRENT_BINARY_DIR}/zconf.h
     84     zlib.h
     85 )
     86 set(ZLIB_PRIVATE_HDRS
     87     crc32.h
     88     deflate.h
     89     gzguts.h
     90     inffast.h
     91     inffixed.h
     92     inflate.h
     93     inftrees.h
     94     trees.h
     95     zutil.h
     96 )
     97 set(ZLIB_SRCS
     98     adler32.c
     99     compress.c
    100     crc32.c
    101     deflate.c
    102     gzclose.c
    103     gzlib.c
    104     gzread.c
    105     gzwrite.c
    106     inflate.c
    107     infback.c
    108     inftrees.c
    109     inffast.c
    110     trees.c
    111     uncompr.c
    112     zutil.c
    113     win32/zlib1.rc
    114 )
    115 
    116 # parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
    117 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
    118 string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*"
    119     "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
    120 
    121 if(MINGW)
    122     # This gets us DLL resource information when compiling on MinGW.
    123     add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
    124                        COMMAND windres.exe
    125                             -D GCC_WINDRES
    126                             -I ${CMAKE_CURRENT_SOURCE_DIR}
    127                             -I ${CMAKE_CURRENT_BINARY_DIR}
    128                             -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
    129                             -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
    130     set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
    131 endif(MINGW)
    132 
    133 add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
    134 set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
    135 
    136 set_target_properties(zlib PROPERTIES SOVERSION 1)
    137 
    138 if(NOT CYGWIN)
    139     # This property causes shared libraries on Linux to have the full version
    140     # encoded into their final filename.  We disable this on Cygwin because
    141     # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll
    142     # seems to be the default.
    143     #
    144     # This has no effect with MSVC, on that platform the version info for
    145     # the DLL comes from the resource file win32/zlib1.rc
    146     set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
    147 endif()
    148 
    149 if(UNIX)
    150     # On unix-like platforms the library is almost always called libz
    151    set_target_properties(zlib PROPERTIES OUTPUT_NAME z)
    152 elseif(BUILD_SHARED_LIBS AND WIN32)
    153     # Creates zlib1.dll when building shared library version
    154     set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
    155 endif()
    156 
    157 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
    158     install(TARGETS zlib
    159         RUNTIME DESTINATION bin
    160         ARCHIVE DESTINATION lib
    161         LIBRARY DESTINATION lib )
    162 endif()
    163 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
    164     install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include)
    165 endif()
    166 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
    167     install(FILES zlib.3 DESTINATION share/man/man3)
    168 endif()
    169 
    170 #============================================================================
    171 # Example binaries
    172 #============================================================================
    173 
    174 add_executable(example example.c)
    175 target_link_libraries(example zlib)
    176 add_test(example example)
    177 
    178 add_executable(minigzip minigzip.c)
    179 target_link_libraries(minigzip zlib)
    180 
    181 if(HAVE_OFF64_T)
    182     add_executable(example64 example.c)
    183     target_link_libraries(example64 zlib)
    184     set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
    185     add_test(example64 example64)
    186 
    187     add_executable(minigzip64 minigzip.c)
    188     target_link_libraries(minigzip64 zlib)
    189     set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
    190 endif()
    191