1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
From: =?utf-8?q?Timo_R=C3=B6hling?= <timo@gaussglocke.de>
Date: Fri, 16 Jun 2023 23:41:46 +0200
Subject: Fix CMake build system
Forwarded: not-needed
---
CMakeLists.txt | 122 ++++++++++++++++++-------------------------------
tinyexrConfig.cmake.in | 2 +
2 files changed, 47 insertions(+), 77 deletions(-)
create mode 100644 tinyexrConfig.cmake.in
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b7f97b0..d429a54 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,78 +1,46 @@
-# this cmake file is for compile tests.
-# Not usable for your cmake app.
-cmake_minimum_required(VERSION 3.5)
+cmake_minimum_required(VERSION 3.14)
+project(tinyexr VERSION ${TINYEXR_VERSION} LANGUAGES C CXX)
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+find_package(ZLIB REQUIRED)
+
+add_library(tinyexr SHARED tinyexr.cc)
+target_include_directories(tinyexr PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+)
+target_compile_features(tinyexr PRIVATE cxx_auto_type)
+target_link_libraries(tinyexr PRIVATE ZLIB::ZLIB)
+set_target_properties(tinyexr PROPERTIES
+ VERSION ${PROJECT_VERSION} SOVERSION ${TINYEXR_SOVERSION}
+ CXX_VISIBILITY_PRESET hidden
+ VISIBILITY_INLINES_HIDDEN ON
+)
+
+add_library(tinyexr::tinyexr ALIAS tinyexr)
+
+configure_package_config_file(
+ tinyexrConfig.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/tinyexrConfig.cmake
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tinyexr
+ NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO
+)
+write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/tinyexrConfigVersion.cmake
+ COMPATIBILITY SameMinorVersion
+ ARCH_INDEPENDENT
+)
+
+install(FILES tinyexr.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/tinyexrConfig.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/tinyexrConfigVersion.cmake
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tinyexr
+)
+install(TARGETS tinyexr EXPORT tinyexrTargets DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(EXPORT tinyexrTargets
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tinyexr
+ NAMESPACE tinyexr::
+)
-set(BUILD_TARGET "tinyexr")
-set(SAMPLE_TARGET "test_tinyexr")
-
-project(${BUILD_TARGET} CXX)
-
-# options
-option(TINYEXR_BUILD_SAMPLE "Build a sample" ON)
-option(TINYEXR_USE_MINIZ "Use miniz" ON)
-
-# cmake modules
-list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
-list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/sanitizers)
-find_package(Sanitizers) # Address sanitizer (-DSANITIZE_ADDRESS=ON)
-
-# Require strict C++11 mode(e.g. `-std=c++11`)
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
-
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
-set(TINYEXR_SOURCES
- ${PROJECT_SOURCE_DIR}/tinyexr.cc
- )
-
-if(TINYEXR_USE_MINIZ)
- enable_language(C)
- add_library(miniz STATIC deps/miniz/miniz.c)
- target_include_directories(miniz PUBLIC deps/miniz)
- set_target_properties(miniz PROPERTIES FOLDER "deps")
- list(APPEND TINYEXR_EXT_LIBRARIES miniz)
-endif()
-
-add_library(${BUILD_TARGET} ${TINYEXR_SOURCES} ${TINYEXR_DEP_SOURCES})
-add_sanitizers(${BUILD_TARGET})
-
-target_include_directories(${BUILD_TARGET} PRIVATE ${PROJECT_SOURCE_DIR})
-target_link_libraries(${BUILD_TARGET} ${TINYEXR_EXT_LIBRARIES} ${CMAKE_DL_LIBS})
-
-# Increase warning level for clang.
-if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT MSVC)
- set(CLANG_COMPILE_FLAGS "-Weverything -Werror -Wno-padded -Wno-c++98-compat-pedantic -Wno-documentation -Wno-unused-member-function")
- if (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 16)
- set(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS} -Wno-unsafe-buffer-usage")
- endif()
- set_source_files_properties(${TINYEXR_SOURCES} PROPERTIES COMPILE_FLAGS ${CLANG_COMPILE_FLAGS})
-endif ()
-
-if (TINYEXR_BUILD_SAMPLE)
-
- set(TINYEXR_SAMPLE_SOURCES
- ${PROJECT_SOURCE_DIR}/test_tinyexr.cc
- )
-
- add_executable(${SAMPLE_TARGET} ${TINYEXR_SAMPLE_SOURCES})
- target_link_libraries(${SAMPLE_TARGET} ${TINYEXR_EXT_LIBRARIES})
- add_sanitizers(${SAMPLE_TARGET})
- if (WIN32)
- target_compile_definitions(${SAMPLE_TARGET} PUBLIC UNICODE)
- target_compile_definitions(${SAMPLE_TARGET} PUBLIC _UNICODE)
-
- # Set ${SAMPLE_TARGET} as a startup project for VS IDE
- set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${SAMPLE_TARGET})
-
- # For easier debugging in VS IDE(cmake 3.8.0 or later required) Set working
- # directory to ${BUILD_TARGET} git repo root.
- if(CMAKE_VERSION VERSION_GREATER 3.8.0)
- set_target_properties(${SAMPLE_TARGET}
- PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY
- "${CMAKE_CURRENT_SOURCE_DIR}")
- endif()
- endif(WIN32)
-
-endif (TINYEXR_BUILD_SAMPLE)
diff --git a/tinyexrConfig.cmake.in b/tinyexrConfig.cmake.in
new file mode 100644
index 0000000..c44831b
--- /dev/null
+++ b/tinyexrConfig.cmake.in
@@ -0,0 +1,2 @@
+@PACKAGE_INIT@
+include(${CMAKE_CURRENT_LIST_DIR}/tinyexrTargets.cmake)
|