123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- cmake_minimum_required(VERSION 3.4)
- project(zip
- LANGUAGES C
- VERSION "0.1.19")
- set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
- set(CMAKE_VERBOSE_MAKEFILE ON)
- option(CMAKE_DISABLE_TESTING "Disable test creation" OFF)
- # zip
- set(SRC src/miniz.h src/zip.h src/zip.c)
- # this is the "object library" target: compiles the sources only once
- add_library(OBJLIB OBJECT ${SRC})
- # shared libraries need PIC
- set_property(TARGET OBJLIB PROPERTY POSITION_INDEPENDENT_CODE 1)
- # static and shared libraries built from the same object files
- if (BUILD_SHARED_LIBS)
- add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:OBJLIB>)
- include(GenerateExportHeader)
- generate_export_header(${PROJECT_NAME})
- else()
- add_library(${PROJECT_NAME} STATIC $<TARGET_OBJECTS:OBJLIB>)
- endif()
- target_include_directories(${PROJECT_NAME} PUBLIC
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
- $<INSTALL_INTERFACE:include>
- )
- # test
- if (NOT CMAKE_DISABLE_TESTING)
- enable_testing()
- add_subdirectory(test)
- find_package(Sanitizers)
- add_sanitizers(${PROJECT_NAME} ${test_out})
- endif()
- if (MSVC)
- # Use secure functions by default and suppress warnings about "deprecated" functions
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1")
- elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR
- "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR
- "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wall -Wextra -Werror -pedantic -Wno-deprecated")
- endif (MSVC)
- ####
- # Installation (https://github.com/forexample/package-example) {
- set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
- set(INCLUDE_INSTALL_DIR "include")
- set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
- # Configuration
- set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
- set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
- set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
- set(NAMESPACE "${PROJECT_NAME}::")
- # Include module with fuction 'write_basic_package_version_file'
- include(CMakePackageConfigHelpers)
- # Note: PROJECT_VERSION is used as a VERSION
- write_basic_package_version_file(
- "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion
- )
- # Use variables:
- # * TARGETS_EXPORT_NAME
- # * PROJECT_NAME
- configure_package_config_file(
- "cmake/Config.cmake.in"
- "${PROJECT_CONFIG}"
- INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
- )
- install(
- FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
- DESTINATION "${CONFIG_INSTALL_DIR}"
- )
- install(
- EXPORT "${TARGETS_EXPORT_NAME}"
- NAMESPACE "${NAMESPACE}"
- DESTINATION "${CONFIG_INSTALL_DIR}"
- )
- # }
- install(TARGETS ${PROJECT_NAME}
- EXPORT ${TARGETS_EXPORT_NAME}
- RUNTIME DESTINATION bin
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
- INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}
- )
- install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip)
- # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake)
- if(NOT TARGET uninstall)
- configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake"
- IMMEDIATE @ONLY)
- add_custom_target(uninstall
- COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)
- endif()
- find_package(Doxygen)
- if(DOXYGEN_FOUND)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
- add_custom_target(doc
- ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Generating API documentation with Doxygen" VERBATIM)
- endif()
|