]> git.lizzy.rs Git - zlib.git/blob - CMakeLists.txt
zlib 1.2.3.9
[zlib.git] / CMakeLists.txt
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)
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)
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 #
56 # Check for errno.h
57 check_include_file(errno.h HAVE_ERRNO_H)
58 if(NOT HAVE_ERRNO_H)
59    add_definitions(-DNO_ERRNO_H)
60 endif()
61
62 if(MSVC)
63     set(CMAKE_DEBUG_POSTFIX "d")
64     add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
65     add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
66 endif()
67
68 if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
69   # If we're doing an out of source build and the user has a zconf.h
70   # in their source tree...
71   if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
72      message(FATAL_ERROR "You must remove zconf.h from the source tree.  This f
73 ile is generated by the ./configure script shipped with zlib.  CMake generates t
74 his file for you automatically in the build directory")
75   endif()
76 endif()
77
78 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.in
79                ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h @ONLY)
80 include_directories(${CMAKE_CURRENT_BINARY_DIR})
81
82
83 #============================================================================
84 # zlib
85 #============================================================================
86
87 set(ZLIB_PUBLIC_HDRS
88     zconf.h
89     zlib.h
90 )
91 set(ZLIB_PRIVATE_HDRS
92     crc32.h
93     deflate.h
94     gzguts.h
95     inffast.h
96     inffixed.h
97     inflate.h
98     inftrees.h
99     trees.h
100     zutil.h
101 )
102 set(ZLIB_SRCS
103     adler32.c
104     compress.c
105     crc32.c
106     deflate.c
107     gzclose.c
108     gzlib.c
109     gzread.c
110     gzwrite.c
111     inflate.c
112     infback.c
113     inftrees.c
114     inffast.c
115     trees.c
116     uncompr.c
117     zutil.c
118     win32/zlib1.rc
119 )
120
121 # parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
122 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
123 string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*"
124     "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
125
126 if(MINGW)
127     # This gets us DLL resource information when compiling on MinGW.
128     add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
129                        COMMAND windres.exe
130                             -D GCC_WINDRES
131                             -I ${CMAKE_CURRENT_SOURCE_DIR}
132                             -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
133                             -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
134     set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
135 endif(MINGW)
136
137 add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
138 set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
139
140 set_target_properties(zlib PROPERTIES SOVERSION 1)
141
142 if(NOT CYGWIN)
143     # This property causes shared libraries on Linux to have the full version
144     # encoded into their final filename.  We disable this on Cygwin because
145     # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll
146     # seems to be the default.
147     #
148     # This has no effect with MSVC, on that platform the version info for
149     # the DLL comes from the resource file win32/zlib1.rc
150     set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
151 endif()
152
153 if(UNIX)
154     # On unix-like platforms the library is almost always called libz
155    set_target_properties(zlib PROPERTIES OUTPUT_NAME z)
156 elseif(BUILD_SHARED_LIBS AND WIN32)
157     # Creates zlib1.dll when building shared library version
158     set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
159 endif()
160
161 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
162     install(TARGETS zlib
163         RUNTIME DESTINATION bin
164         ARCHIVE DESTINATION lib
165         LIBRARY DESTINATION lib )
166 endif()
167 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
168     install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include)
169 endif()
170 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
171     install(FILES zlib.3 DESTINATION share/man/man3)
172 endif()
173
174 #============================================================================
175 # Example binaries
176 #============================================================================
177
178 add_executable(example example.c)
179 target_link_libraries(example zlib)
180 add_test(example example)
181
182 add_executable(minigzip minigzip.c)
183 target_link_libraries(minigzip zlib)
184
185 if(HAVE_OFF64_T)
186     add_executable(example64 example.c)
187     target_link_libraries(example64 zlib)
188     set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
189     add_test(example64 example64)
190
191     add_executable(minigzip64 minigzip.c)
192     target_link_libraries(minigzip64 zlib)
193     set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
194 endif()