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