]> git.lizzy.rs Git - zlib.git/blob - CMakeLists.txt
zlib 1.2.3.6
[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 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 #
63 # Create the zlibdefs.h file.
64 # Note: we create it in CMAKE_CURRENT_SOURCE_DIR instead 
65 #       of CMAKE_CURRENT_BINARY_DIR because an empty zlibdefs.h
66 #       is shipped with zlib in the source tree.
67 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlibdefs.h.cmakein
68                ${CMAKE_CURRENT_SOURCE_DIR}/zlibdefs.h)
69
70 if(MSVC)
71     set(CMAKE_DEBUG_POSTFIX "d")
72     add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
73     add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
74 endif()
75
76 #============================================================================
77 # zlib
78 #============================================================================
79
80 set(ZLIB_PUBLIC_HDRS
81     zconf.h
82     zlib.h
83     zlibdefs.h
84 )
85 set(ZLIB_PRIVATE_HDRS
86     crc32.h
87     deflate.h
88     gzguts.h
89     inffast.h
90     inffixed.h
91     inflate.h
92     inftrees.h
93     trees.h
94     zutil.h
95 )
96 set(ZLIB_SRCS
97     adler32.c
98     compress.c
99     crc32.c
100     deflate.c
101     gzclose.c
102     gzio.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                             -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
128                             -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
129     set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
130 endif(MINGW)
131
132 add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
133 set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
134
135 set_target_properties(zlib PROPERTIES SOVERSION 1)
136
137 if(NOT CYGWIN)
138     # This property causes shared libraries on Linux to have the full version
139     # encoded into their final filename.  We disable this on Cygwin because
140     # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll
141     # seems to be the default.
142     #
143     # This has no effect with MSVC, on that platform the version info for
144     # the DLL comes from the resource file win32/zlib1.rc
145     set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
146 endif()
147
148 if(UNIX)
149     # On unix-like platforms the library is almost always called libz
150    set_target_properties(zlib PROPERTIES OUTPUT_NAME z)
151 elseif(BUILD_SHARED_LIBS AND WIN32)
152     # Creates zlib1.dll when building shared library version
153     set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
154 endif()
155
156 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
157     install(TARGETS zlib
158         RUNTIME DESTINATION bin
159         ARCHIVE DESTINATION lib
160         LIBRARY DESTINATION lib )
161 endif()
162 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
163     install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include)
164 endif()
165 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
166     install(FILES zlib.3 DESTINATION share/man/man3)
167 endif()
168
169 #============================================================================
170 # Example binaries
171 #============================================================================
172
173 add_executable(example example.c)
174 target_link_libraries(example zlib)
175 add_test(example example)
176
177 add_executable(minigzip minigzip.c)
178 target_link_libraries(minigzip zlib)
179
180 if(HAVE_OFF64_T)
181     add_executable(example64 example.c)
182     target_link_libraries(example64 zlib)
183     set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
184     add_test(example64 example64)
185
186     add_executable(minigzip64 minigzip.c)
187     target_link_libraries(minigzip64 zlib)
188     set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
189 endif()