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)
