You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-libs/miniz/files/miniz-2.1.0-export-cmake-bu...

178 lines
6.4 KiB

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,15 @@
-PROJECT(miniz C)
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.12)
+
+project(miniz)
+
+include(GNUInstallDirs)
+
+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
# differentiation between debug and release builds.
@@ -8,45 +18,120 @@
CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif ()
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
+option(BUILD_EXAMPLES "Build examples" ON)
+option(BUILD_SHARED_LIBS "Build shared library instead of static" ON)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
+include(GenerateExportHeader)
+
+set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
set(miniz_SOURCE miniz.c miniz_zip.c miniz_tinfl.c miniz_tdef.c)
+add_library(${PROJECT_NAME} ${miniz_SOURCE})
+generate_export_header(${PROJECT_NAME})
+
+if(NOT BUILD_SHARED_LIBS)
+string(TOUPPER ${PROJECT_NAME} PROJECT_UPPER)
+set_target_properties(${PROJECT_NAME}
+ PROPERTIES INTERFACE_COMPILE_DEFINITIONS ${PROJECT_UPPER}_STATIC_DEFINE)
+endif()
+
+set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${MINIZ_VERSION})
+set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${MINIZ_API_VERSION})
+
+file(GLOB INSTALL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
+
+target_compile_definitions(${PROJECT_NAME}
+ PRIVATE $<$<C_COMPILER_ID:GNU>:_GNU_SOURCE>)
-add_library(miniz ${miniz_SOURCE})
-target_include_directories(miniz PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
+# pkg-config file
+configure_file(miniz.pc.in ${CMAKE_BINARY_DIR}/miniz.pc @ONLY)
-set(EXAMPLE1_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example1.c")
-set(EXAMPLE2_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example2.c")
-set(EXAMPLE3_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example3.c")
-set(EXAMPLE4_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example4.c")
-set(EXAMPLE5_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example5.c")
-set(EXAMPLE6_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example6.c")
-set(MINIZ_TESTER_SRC_LIST
- "${CMAKE_CURRENT_SOURCE_DIR}/tests/miniz_tester.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/tests/timer.cpp")
+install(FILES
+ ${CMAKE_BINARY_DIR}/miniz.pc
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig)
+
+
+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 ${CMAKE_INSTALL_BINDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ # users can use <miniz.h> or <miniz/miniz.h>
+ INCLUDES DESTINATION include ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
+)
+
+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 ${CMAKE_INSTALL_LIBDIR}/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")
+ set(EXAMPLE3_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example3.c")
+ set(EXAMPLE4_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example4.c")
+ set(EXAMPLE5_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example5.c")
+ set(EXAMPLE6_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example6.c")
+ set(MINIZ_TESTER_SRC_LIST
+ "${CMAKE_CURRENT_SOURCE_DIR}/tests/miniz_tester.cpp"
+ "${CMAKE_CURRENT_SOURCE_DIR}/tests/timer.cpp")
-add_executable(example1 ${EXAMPLE1_SRC_LIST})
-target_link_libraries(example1 miniz)
-add_executable(example2 ${EXAMPLE2_SRC_LIST})
-target_link_libraries(example2 miniz)
-add_executable(example3 ${EXAMPLE3_SRC_LIST})
-target_link_libraries(example3 miniz)
-add_executable(example4 ${EXAMPLE4_SRC_LIST})
-target_link_libraries(example4 miniz)
-add_executable(example5 ${EXAMPLE5_SRC_LIST})
-target_link_libraries(example5 miniz)
-add_executable(example6 ${EXAMPLE6_SRC_LIST})
-target_link_libraries(example6 miniz)
-if(${UNIX})
- target_link_libraries(example6 m)
-endif()
+ add_executable(example1 ${EXAMPLE1_SRC_LIST})
+ target_link_libraries(example1 miniz)
+ add_executable(example2 ${EXAMPLE2_SRC_LIST})
+ target_link_libraries(example2 miniz)
+ add_executable(example3 ${EXAMPLE3_SRC_LIST})
+ target_link_libraries(example3 miniz)
+ add_executable(example4 ${EXAMPLE4_SRC_LIST})
+ target_link_libraries(example4 miniz)
+ add_executable(example5 ${EXAMPLE5_SRC_LIST})
+ target_link_libraries(example5 miniz)
+ add_executable(example6 ${EXAMPLE6_SRC_LIST})
+ target_link_libraries(example6 miniz)
+ if(${UNIX})
+ target_link_libraries(example6 m)
+ endif()
-# add_executable(miniz_tester ${MINIZ_TESTER_SRC_LIST})
-# target_link_libraries(miniz_tester miniz)
+ # add_executable(miniz_tester ${MINIZ_TESTER_SRC_LIST})
+ # target_link_libraries(miniz_tester miniz)
+endif(BUILD_EXAMPLES)
-install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
- )
-file(GLOB INSTALL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
-install(FILES ${INSTALL_HEADERS} DESTINATION include/${PROJECT_NAME})
\ No newline at end of file
+set(INCLUDE_INSTALL_DIR "include")
+
+install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})