From: =?utf-8?q?Timo_R=C3=B6hling?= <timo@gaussglocke.de>
Date: Tue, 17 Nov 2020 17:06:36 +0100
Subject: Fix CMake build system

---
 CMakeLists.txt         | 106 +++++++++++++++++++++----------------------------
 tinyexrConfig.cmake.in |   2 +
 2 files changed, 47 insertions(+), 61 deletions(-)
 create mode 100644 tinyexrConfig.cmake.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3613642..26d73bd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,62 +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 1.0.0 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 1d
+	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)
-
-# 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(TINYEXR_SOURCES
-    ${PROJECT_SOURCE_DIR}/tinyexr.cc
-    )
-
-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")
-  set_source_files_properties(${TINYEXR_SOURCES} PROPERTIES COMPILE_FLAGS "-Weverything -Werror -Wno-padded -Wno-c++98-compat-pedantic -Wno-documentation -Wno-unused-member-function")
-ENDIF ()
-
-if (TINYEXR_BUILD_SAMPLE)
-
-  set(TINYEXR_SAMPLE_SOURCES
-      ${PROJECT_SOURCE_DIR}/test_tinyexr.cc
-      )
-
-  add_executable(${SAMPLE_TARGET} ${TINYEXR_SAMPLE_SOURCES})
-  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)
