CMakeLists.txt 7.1 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
set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc)
79
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
80
		${ZLIB_PC} @ONLY)
81 82
configure_file(	${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
		${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
83
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
M
Mark Adler 已提交
84 85


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

set(ZLIB_PUBLIC_HDRS
M
Mark Adler 已提交
91
    ${CMAKE_CURRENT_BINARY_DIR}/zconf.h
M
Mark Adler 已提交
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 122
    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
)

123
if(NOT MINGW)
124
    set(ZLIB_DLL_SRCS
125 126 127 128
        win32/zlib1.rc # If present will override custom build rule below.
    )
endif()

M
Mark Adler 已提交
129 130
# 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)
131
string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
M
Mark Adler 已提交
132 133 134 135
    "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})

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

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

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

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 已提交
166
if(UNIX)
M
Mark Adler 已提交
167
    # On unix-like platforms the library is almost always called libz
168
   set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)
169 170 171
   if(NOT APPLE)
     set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"")
   endif()
M
Mark Adler 已提交
172 173 174
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 已提交
175 176 177
endif()

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

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

197
add_executable(example test/example.c)
M
Mark Adler 已提交
198 199 200
target_link_libraries(example zlib)
add_test(example example)

201
add_executable(minigzip test/minigzip.c)
M
Mark Adler 已提交
202 203 204
target_link_libraries(minigzip zlib)

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

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