CMakeLists.txt 7.0 KB
Newer Older
M
Mark Adler 已提交
1 2 3 4 5
cmake_minimum_required(VERSION 2.4.4)
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)

project(zlib C)

6 7
set(VERSION "1.2.7")

8 9 10 11
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
12
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
13

M
Mark Adler 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26
include(CheckTypeSize)
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckCSourceCompiles)
enable_testing()

check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(stdint.h    HAVE_STDINT_H)
check_include_file(stddef.h    HAVE_STDDEF_H)

#
# Check to see if we have large file support
#
M
Mark Adler 已提交
27
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)
M
Mark Adler 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41
# We add these other definitions here because CheckTypeSize.cmake
# in CMake 2.4.x does not automatically do so and we want
# compatibility with CMake 2.4.x.
if(HAVE_SYS_TYPES_H)
    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H)
endif()
if(HAVE_STDINT_H)
    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H)
endif()
if(HAVE_STDDEF_H)
    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H)
endif()
check_type_size(off64_t OFF64_T)
if(HAVE_OFF64_T)
M
Mark Adler 已提交
42
   add_definitions(-D_LARGEFILE64_SOURCE=1)
M
Mark Adler 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56
endif()
set(CMAKE_REQUIRED_DEFINITIONS) # clear variable

#
# Check for fseeko
#
check_function_exists(fseeko HAVE_FSEEKO)
if(NOT HAVE_FSEEKO)
    add_definitions(-DNO_FSEEKO)
endif()

#
# Check for unistd.h
#
M
Mark Adler 已提交
57
check_include_file(unistd.h Z_HAVE_UNISTD_H)
M
Mark Adler 已提交
58 59

if(MSVC)
M
Mark Adler 已提交
60
    set(CMAKE_DEBUG_POSTFIX "d")
M
Mark Adler 已提交
61 62
    add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
    add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
63
    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
M
Mark Adler 已提交
64 65
endif()

M
Mark Adler 已提交
66
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
M
Mark Adler 已提交
67 68 69
    # If we're doing an out of source build and the user has a zconf.h
    # in their source tree...
    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
70 71 72 73 74
        message(STATUS "Renaming")
        message(STATUS "    ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h")
        message(STATUS "to 'zconf.h.included' because this file is included with zlib")
        message(STATUS "but CMake generates it automatically in the build directory.")
        file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included)
M
Mark Adler 已提交
75 76 77
  endif()
endif()

78 79 80 81
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
		${CMAKE_CURRENT_BINARY_DIR}/zlib.pc @ONLY)
configure_file(	${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
		${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
M
Mark Adler 已提交
82 83 84
include_directories(${CMAKE_CURRENT_BINARY_DIR})


M
Mark Adler 已提交
85 86 87 88 89
#============================================================================
# zlib
#============================================================================

set(ZLIB_PUBLIC_HDRS
M
Mark Adler 已提交
90
    ${CMAKE_CURRENT_BINARY_DIR}/zconf.h
M
Mark Adler 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
    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
)

122 123 124 125 126 127
if(NOT MINGW)
    set(ZLIB_SRCS ${ZLIB_SRCS}
        win32/zlib1.rc # If present will override custom build rule below.
    )
endif()

M
Mark Adler 已提交
128 129 130 131 132 133 134
# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*"
    "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})

if(MINGW)
    # This gets us DLL resource information when compiling on MinGW.
135 136 137 138
    if(NOT CMAKE_RC_COMPILER)
        SET(CMAKE_RC_COMPILER windres.exe)
    endif()

M
Mark Adler 已提交
139
    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
140
                       COMMAND ${CMAKE_RC_COMPILER}
M
Mark Adler 已提交
141 142
                            -D GCC_WINDRES
                            -I ${CMAKE_CURRENT_SOURCE_DIR}
M
Mark Adler 已提交
143
                            -I ${CMAKE_CURRENT_BINARY_DIR}
M
Mark Adler 已提交
144 145 146 147 148
                            -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
                            -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
    set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
endif(MINGW)

149 150
add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
M
Mark Adler 已提交
151 152
set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
set_target_properties(zlib PROPERTIES SOVERSION 1)
M
Mark Adler 已提交
153 154 155 156 157 158 159 160 161 162 163 164

if(NOT CYGWIN)
    # 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_FULL_VERSION})
endif()

M
Mark Adler 已提交
165
if(UNIX)
M
Mark Adler 已提交
166
    # On unix-like platforms the library is almost always called libz
167
   set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)
168
   set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,zlib.map")
M
Mark Adler 已提交
169 170 171
elseif(BUILD_SHARED_LIBS AND WIN32)
    # Creates zlib1.dll when building shared library version
    set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
M
Mark Adler 已提交
172 173 174
endif()

if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
175
    install(TARGETS zlib zlibstatic
176 177 178
        RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
        ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
        LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
M
Mark Adler 已提交
179 180
endif()
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
181
    install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}")
M
Mark Adler 已提交
182 183
endif()
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
184
    install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3")
M
Mark Adler 已提交
185
endif()
186 187 188
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
    install(FILES zlib.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}")
endif()
M
Mark Adler 已提交
189 190 191 192 193

#============================================================================
# Example binaries
#============================================================================

194
add_executable(example test/example.c)
M
Mark Adler 已提交
195 196 197
target_link_libraries(example zlib)
add_test(example example)

198
add_executable(minigzip test/minigzip.c)
M
Mark Adler 已提交
199 200 201
target_link_libraries(minigzip zlib)

if(HAVE_OFF64_T)
202
    add_executable(example64 test/example.c)
M
Mark Adler 已提交
203 204 205 206
    target_link_libraries(example64 zlib)
    set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
    add_test(example64 example64)

207
    add_executable(minigzip64 test/minigzip.c)
M
Mark Adler 已提交
208 209 210
    target_link_libraries(minigzip64 zlib)
    set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
endif()