annotate src/zlib-1.2.7/CMakeLists.txt @ 169:223a55898ab9 tip default

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