diff --git a/CMakeLists.txt b/CMakeLists.txt index a4e6b40..e6bb333 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,18 @@ -PROJECT(miniz C) -cmake_minimum_required(VERSION 3.4) +cmake_minimum_required(VERSION 3.0) -set(Upstream_VERSION 2.1.0) +if(CMAKE_MINOR_VERSION LESS 12) + project(miniz) + # see issue https://gitlab.kitware.com/cmake/cmake/merge_requests/1799 +else() + project(miniz C) +endif() + + +set(MINIZ_API_VERSION 2) +set(MINIZ_MINOR_VERSION 1) +set(MINIZ_PATCH_VERSION 0) +set(MINIZ_VERSION + ${MINIZ_API_VERSION}.${MINIZ_MINOR_VERSION}.${MINIZ_PATCH_VERSION}) if(CMAKE_BUILD_TYPE STREQUAL "") # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This screws up @@ -52,7 +63,12 @@ if(AMALGAMATE_SOURCES) "${AMAL_MINIZ_C}" "\n#endif // MINIZ_HEADER_FILE_ONLY\n") file(WRITE ${CMAKE_BINARY_DIR}/amalgamation/miniz.h "${AMAL_MINIZ_H}") add_library(${PROJECT_NAME} INTERFACE) - set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES + + target_compile_definitions(${PROJECT_NAME} + INTERFACE $<$:_GNU_SOURCE>) + + set_property(TARGET ${PROJECT_NAME} APPEND + PROPERTY INTERFACE_INCLUDE_DIRECTORIES $ $ ) @@ -81,68 +97,78 @@ else(AMALGAMATE_SOURCES) string(TOUPPER ${PROJECT_NAME} PROJECT_UPPER) set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_COMPILE_DEFINITIONS ${PROJECT_UPPER}_STATIC_DEFINE) + else() + set_property(TARGET ${PROJECT_NAME} PROPERTY C_VISIBILITY_PRESET hidden) endif() - set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${Upstream_VERSION}) - set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION 2) - set_property(TARGET ${PROJECT_NAME} PROPERTY - INTERFACE_${PROJECT_NAME}_MAJOR_VERSION 2) - set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY - COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION - ) - + set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${MINIZ_VERSION}) + set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${MINIZ_API_VERSION}) + target_include_directories(${PROJECT_NAME} PUBLIC $ $ $ ) - + file(GLOB INSTALL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h) - list(APPEND INSTALL_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h) + list(APPEND + INSTALL_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h) - install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - INCLUDES DESTINATION include - ) - - include(CMakePackageConfigHelpers) - write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake" - VERSION ${Upstream_VERSION} - COMPATIBILITY AnyNewerVersion - ) - - export(EXPORT ${PROJECT_NAME}Targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake" - NAMESPACE ${PROJECT_NAME}:: - ) - configure_file(Config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake" - @ONLY - ) - - set(ConfigPackageLocation lib/cmake/${PROJECT_NAME}) - install(EXPORT ${PROJECT_NAME}Targets - FILE - ${PROJECT_NAME}Targets.cmake - NAMESPACE - ${PROJECT_NAME}:: - DESTINATION - ${ConfigPackageLocation} - ) - install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake" - DESTINATION - ${ConfigPackageLocation} - COMPONENT - Devel - ) endif(AMALGAMATE_SOURCES) +if(NOT BUILD_HEADER_ONLY) + target_compile_definitions(${PROJECT_NAME} + PRIVATE $<$:_GNU_SOURCE>) +endif() + +set_property(TARGET ${PROJECT_NAME} PROPERTY + INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${MINIZ_API_VERSION}) +set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY + COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION +) + +install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + INCLUDES DESTINATION include + ) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${MINIZ_VERSION} + COMPATIBILITY AnyNewerVersion +) + +export(EXPORT ${PROJECT_NAME}Targets + FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake" + NAMESPACE ${PROJECT_NAME}:: +) +configure_file(Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake" + @ONLY +) + +set(ConfigPackageLocation lib/cmake/${PROJECT_NAME}) +install(EXPORT ${PROJECT_NAME}Targets + FILE + ${PROJECT_NAME}Targets.cmake + NAMESPACE + ${PROJECT_NAME}:: + DESTINATION + ${ConfigPackageLocation} +) +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION + ${ConfigPackageLocation} + COMPONENT + Devel +) + if(BUILD_EXAMPLES) set(EXAMPLE1_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example1.c") set(EXAMPLE2_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example2.c") diff --git a/miniz.h b/miniz.h index 6e160bf..3018dae 100644 --- a/miniz.h +++ b/miniz.h @@ -112,10 +112,7 @@ */ #pragma once -#include "miniz_common.h" -#include "miniz_tdef.h" -#include "miniz_tinfl.h" -#include "miniz_zip.h" +#include "miniz_export.h" /* Defines to completely disable specific portions of miniz.c: If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. */ @@ -476,3 +473,8 @@ typedef void *const voidpc; #ifdef __cplusplus } #endif + +#include "miniz_common.h" +#include "miniz_tdef.h" +#include "miniz_tinfl.h" +#include "miniz_zip.h" diff --git a/miniz_tdef.c b/miniz_tdef.c index a8a9593..64113f8 100644 --- a/miniz_tdef.c +++ b/miniz_tdef.c @@ -24,7 +24,6 @@ * **************************************************************************/ -#include "miniz_tdef.h" #include "miniz.h" #ifdef __cplusplus diff --git a/miniz_tinfl.c b/miniz_tinfl.c index 5120ba1..992de7a 100644 --- a/miniz_tinfl.c +++ b/miniz_tinfl.c @@ -24,7 +24,7 @@ * **************************************************************************/ -#include "miniz_tinfl.h" +#include "miniz.h" #ifdef __cplusplus extern "C" { diff --git a/miniz_zip.c b/miniz_zip.c index 955ee20..7358f0b 100644 --- a/miniz_zip.c +++ b/miniz_zip.c @@ -24,7 +24,7 @@ * THE SOFTWARE. * **************************************************************************/ -#include "miniz_zip.h" +#include "miniz.h" #ifndef MINIZ_NO_ARCHIVE_APIS