From: =?utf-8?q?Timo_R=C3=B6hling?= <timo.roehling@fkie.fraunhofer.de>
Date: Tue, 31 Mar 2020 17:05:46 +0200
Subject: Fix build system

Forwarded: not-needed
---
 CMakeLists.txt                | 68 +++++++++++++++++++++++++++++++------------
 cmake/TinyGLTFConfig.cmake    | 15 ----------
 cmake/TinyGLTFConfig.cmake.in |  9 ++++++
 tiny_gltf.cpp                 |  3 ++
 4 files changed, 61 insertions(+), 34 deletions(-)
 delete mode 100644 cmake/TinyGLTFConfig.cmake
 create mode 100644 cmake/TinyGLTFConfig.cmake.in
 create mode 100644 tiny_gltf.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 30cc854..9c3ddac 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,8 +1,13 @@
 cmake_minimum_required(VERSION 3.6)
 
-PROJECT (tinygltf)
+project(TinyGLTF VERSION 2.5.0 LANGUAGES CXX)
 
-SET(CMAKE_CXX_STANDARD 11)
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+find_package(nlohmann_json 3 REQUIRED)
+find_path(stb_INCLUDE_DIRS NAMES stb_image.h PATH_SUFFIXES stb)
+find_library(stb_LIBRARY NAMES stb)
 
 option(TINYGLTF_BUILD_LOADER_EXAMPLE "Build loader_example" ON)
 option(TINYGLTF_BUILD_GL_EXAMPLES "Build GL exampels(requires glfw, OpenGL, etc)" OFF)
@@ -22,20 +27,45 @@ endif (TINYGLTF_BUILD_GL_EXAMPLES)
 if (TINYGLTF_BUILD_VALIDATOR_EXAMPLE)
   ADD_SUBDIRECTORY ( examples/validator )
 endif (TINYGLTF_BUILD_VALIDATOR_EXAMPLE)
-#
-# TinuGLTF is a header-only library, so no library build. just install header files.
-#
-INSTALL ( FILES
-  json.hpp
-  stb_image.h
-  stb_image_write.h
-  tiny_gltf.h
-  DESTINATION
-  include
-  )
-
-INSTALL ( FILES
-  cmake/TinyGLTFConfig.cmake
-  DESTINATION
-  cmake
-  )
+
+add_library(${PROJECT_NAME} tiny_gltf.h tiny_gltf.cpp)
+target_include_directories(${PROJECT_NAME}
+	PUBLIC
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+	PRIVATE
+		${stb_INCLUDE_DIRS}
+)
+target_link_libraries(${PROJECT_NAME} PRIVATE
+	${stb_LIBRARY}
+	nlohmann_json::nlohmann_json
+)
+set_target_properties(${PROJECT_NAME} PROPERTIES
+	OUTPUT_NAME "tinygltf"
+	VERSION ${PROJECT_VERSION}
+	SOVERSION 1d
+)
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+
+install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+export(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}::)
+install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}::
+	DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+)
+install(FILES tiny_gltf.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+configure_package_config_file(cmake/${PROJECT_NAME}Config.cmake.in ${PROJECT_NAME}Config.cmake
+	INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+        NO_CHECK_REQUIRED_COMPONENTS_MACRO
+	NO_SET_AND_CHECK_MACRO
+)
+write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake COMPATIBILITY SameMinorVersion)
+install(FILES
+	${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+	${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+	DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+)
diff --git a/cmake/TinyGLTFConfig.cmake b/cmake/TinyGLTFConfig.cmake
deleted file mode 100644
index 2c2a75d..0000000
--- a/cmake/TinyGLTFConfig.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- cmake -*-
-# - Find TinyGLTF
-
-# TinyGLTF_INCLUDE_DIR      TinyGLTF's include directory
-
-
-FIND_PACKAGE ( PackageHandleStandardArgs )
-
-SET ( TinyGLTF_INCLUDE_DIR "${TinyGLTF_DIR}/../include" CACHE STRING "TinyGLTF include directory")
-
-FIND_FILE ( TinyGLTF_HEADER tiny_gltf.h PATHS ${TinyGLTF_INCLUDE_DIR} )
-
-IF (NOT TinyGLTF_HEADER)
-  MESSAGE ( FATAL_ERROR "Unable to find tiny_gltf.h, TinyGLTF_INCLUDE_DIR = ${TinyGLTF_INCLUDE_DIR}")
-ENDIF ()
diff --git a/cmake/TinyGLTFConfig.cmake.in b/cmake/TinyGLTFConfig.cmake.in
new file mode 100644
index 0000000..89f21e4
--- /dev/null
+++ b/cmake/TinyGLTFConfig.cmake.in
@@ -0,0 +1,9 @@
+@PACKAGE_INIT@
+
+include(FindPackageHandleStandardArgs)
+
+include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake)
+
+set(@PROJECT_NAME@_CONFIG ${CMAKE_CURRENT_LIST_FILE})
+find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE)
+
diff --git a/tiny_gltf.cpp b/tiny_gltf.cpp
new file mode 100644
index 0000000..43e41f4
--- /dev/null
+++ b/tiny_gltf.cpp
@@ -0,0 +1,3 @@
+#define TINYGLTF_IMPLEMENTATION
+#include "tiny_gltf.h"
+
