1- # Findtinygltf .cmake
1+ # FindTinyGLTF .cmake
22#
3- # Finds the tinygltf library
3+ # Finds the TinyGLTF library
44#
55# This will define the following variables
66#
7- # tinygltf_FOUND
8- # tinygltf_INCLUDE_DIRS
7+ # TinyGLTF_FOUND
8+ # TinyGLTF_INCLUDE_DIRS
99#
1010# and the following imported targets
1111#
@@ -25,101 +25,89 @@ if(NOT nlohmann_json_FOUND)
2525 FetchContent_MakeAvailable(nlohmann_json)
2626endif ()
2727
28- # Try to find tinygltf using standard find_package
29- find_path (tinygltf_INCLUDE_DIR
28+ # Try to find TinyGLTF using standard find_package
29+ find_path (TinyGLTF_INCLUDE_DIR
3030 NAMES tiny_gltf.h
31- PATHS
32- ${PC_tinygltf_INCLUDE_DIRS}
33- /usr/include
34- /usr/local/include
35- $ENV{VULKAN_SDK} /include
36- ${ANDROID_NDK} /sources /third_party
37- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../external
38- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../third_party
39- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../attachments/external
40- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../attachments/third_party
41- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../attachments/include
42- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../../external
43- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../../third_party
44- ${CMAKE_CURRENT_SOURCE_DIR} /../../../../../../../include
45- PATH_SUFFIXES tinygltf include
31+ PATH_SUFFIXES include tinygltf
4632)
4733
48- # If not found, use FetchContent to download and build
49- if (NOT tinygltf_INCLUDE_DIR)
50- # If not found, use FetchContent to download and build
51- include (FetchContent)
52-
53- message (STATUS "tinygltf not found, fetching from GitHub..." )
54- FetchContent_Declare(
55- tinygltf
56- GIT_REPOSITORY https://github.com/syoyo/tinygltf.git
57- GIT_TAG v2.8.18 # Use a specific tag for stability
58- )
59-
60- # Set policy to suppress the deprecation warning
61- if (POLICY CMP0169)
62- cmake_policy (SET CMP0169 OLD)
63- endif ()
64-
65- # Populate the content but don't configure it yet
66- FetchContent_GetProperties(tinygltf)
67- if (NOT tinygltf_POPULATED)
68- FetchContent_Populate(tinygltf)
69-
70- # Update the minimum required CMake version to avoid deprecation warning
71- file (READ "${tinygltf_SOURCE_DIR} /CMakeLists.txt" TINYGLTF_CMAKE_CONTENT)
72- string (REPLACE "cmake_minimum_required(VERSION 3.6)"
73- "cmake_minimum_required(VERSION 3.10)"
74- TINYGLTF_CMAKE_CONTENT "${TINYGLTF_CMAKE_CONTENT} " )
75- file (WRITE "${tinygltf_SOURCE_DIR} /CMakeLists.txt" "${TINYGLTF_CMAKE_CONTENT} " )
76-
77- # Create a symbolic link to make nlohmann/json.hpp available
78- if (EXISTS "${tinygltf_SOURCE_DIR} /json.hpp" )
79- file (MAKE_DIRECTORY "${tinygltf_SOURCE_DIR} /nlohmann" )
80- file (CREATE_LINK "${tinygltf_SOURCE_DIR} /json.hpp" "${tinygltf_SOURCE_DIR} /nlohmann/json.hpp" SYMBOLIC )
81- endif ()
82-
83- # Set tinygltf to header-only mode
84- set (TINYGLTF_HEADER_ONLY ON CACHE BOOL "Use header only version" FORCE)
85- set (TINYGLTF_INSTALL OFF CACHE BOOL "Do not install tinygltf" FORCE)
86-
87- # Add the subdirectory after modifying the CMakeLists.txt
88- add_subdirectory (${tinygltf_SOURCE_DIR} ${tinygltf_BINARY_DIR} )
89- else ()
90- # If already populated, just make it available
91- FetchContent_MakeAvailable(tinygltf)
92- endif ()
93-
94- # Get the include directory from the target
95- get_target_property (tinygltf_INCLUDE_DIR tinygltf INTERFACE_INCLUDE_DIRECTORIES )
96- if (NOT tinygltf_INCLUDE_DIR)
97- # If we can't get the include directory from the target, use the source directory
98- FetchContent_GetProperties(tinygltf SOURCE_DIR tinygltf_SOURCE_DIR)
99- set (tinygltf_INCLUDE_DIR ${tinygltf_SOURCE_DIR} )
100- endif ()
101- endif ()
102-
10334include (FindPackageHandleStandardArgs)
10435find_package_handle_standard_args(tinygltf
105- REQUIRED_VARS tinygltf_INCLUDE_DIR
36+ REQUIRED_VARS TinyGLTF_INCLUDE_DIR
37+ FAIL_MESSAGE "" # Suppress the error message to allow our fallback
10638)
10739
108- if (tinygltf_FOUND )
109- set (tinygltf_INCLUDE_DIRS ${tinygltf_INCLUDE_DIR } )
40+ if (TinyGLTF_FOUND )
41+ set (TinyGLTF_INCLUDE_DIRS ${TinyGLTF_INCLUDE_DIR } )
11042
11143 if (NOT TARGET tinygltf::tinygltf)
11244 add_library (tinygltf::tinygltf INTERFACE IMPORTED )
11345 set_target_properties (tinygltf::tinygltf PROPERTIES
114- INTERFACE_INCLUDE_DIRECTORIES "${tinygltf_INCLUDE_DIRS } "
46+ INTERFACE_INCLUDE_DIRECTORIES "${TinyGLTF_INCLUDE_DIRS } "
11547 INTERFACE_COMPILE_DEFINITIONS "TINYGLTF_IMPLEMENTATION;TINYGLTF_NO_EXTERNAL_IMAGE;TINYGLTF_NO_STB_IMAGE;TINYGLTF_NO_STB_IMAGE_WRITE"
11648 )
11749 if (TARGET nlohmann_json::nlohmann_json)
11850 target_link_libraries (tinygltf::tinygltf INTERFACE nlohmann_json::nlohmann_json)
11951 endif ()
12052 endif ()
121- elseif (TARGET tinygltf)
122- # If find_package_handle_standard_args failed but we have a tinygltf target from FetchContent
53+ else ()
54+ # If not found, create a custom tinygltf implementation
55+ message (STATUS "TinyGLTF not found, creating a custom implementation..." )
56+
57+ # Create a directory for our custom tinygltf implementation
58+ set (TINYGLTF_DIR "${CMAKE_CURRENT_BINARY_DIR} /tinygltf" )
59+ file (REMOVE_RECURSE "${TINYGLTF_DIR} " )
60+ file (MAKE_DIRECTORY "${TINYGLTF_DIR} " )
61+
62+ # Download the necessary files directly
63+ file (DOWNLOAD
64+ "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/tiny_gltf.h"
65+ "${TINYGLTF_DIR} /tiny_gltf.h"
66+ SHOW_PROGRESS
67+ )
68+
69+ file (DOWNLOAD
70+ "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/json.hpp"
71+ "${TINYGLTF_DIR} /json.hpp"
72+ SHOW_PROGRESS
73+ )
74+
75+ file (DOWNLOAD
76+ "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/stb_image.h"
77+ "${TINYGLTF_DIR} /stb_image.h"
78+ SHOW_PROGRESS
79+ )
80+
81+ file (DOWNLOAD
82+ "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/stb_image_write.h"
83+ "${TINYGLTF_DIR} /stb_image_write.h"
84+ SHOW_PROGRESS
85+ )
86+
87+ # Create a symbolic link to make nlohmann/json.hpp available
88+ file (MAKE_DIRECTORY "${TINYGLTF_DIR} /nlohmann" )
89+ file (CREATE_LINK "${TINYGLTF_DIR} /json.hpp" "${TINYGLTF_DIR} /nlohmann/json.hpp" SYMBOLIC )
90+
91+ # Create a simple CMakeLists.txt file
92+ file (WRITE "${TINYGLTF_DIR} /CMakeLists.txt" "
93+ cmake_minimum_required(VERSION 3.10...3.29)
94+ project(tinygltf)
95+
96+ if(NOT TARGET tinygltf)
97+ add_library(tinygltf INTERFACE)
98+ target_include_directories(tinygltf INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} )
99+ target_compile_definitions(tinygltf INTERFACE
100+ TINYGLTF_IMPLEMENTATION
101+ TINYGLTF_NO_EXTERNAL_IMAGE
102+ TINYGLTF_NO_STB_IMAGE
103+ TINYGLTF_NO_STB_IMAGE_WRITE
104+ )
105+ endif()
106+ " )
107+
108+ # Add the subdirectory
109+ add_subdirectory (${TINYGLTF_DIR} ${CMAKE_CURRENT_BINARY_DIR} /tinygltf-build )
110+
123111 # Create an alias for the tinygltf target
124112 if (NOT TARGET tinygltf::tinygltf)
125113 add_library (tinygltf_wrapper INTERFACE )
@@ -136,27 +124,5 @@ elseif(TARGET tinygltf)
136124 add_library (tinygltf::tinygltf ALIAS tinygltf_wrapper)
137125 endif ()
138126
139- # Set variables to indicate that tinygltf was found
140- set (tinygltf_FOUND TRUE )
141- set (TINYGLTF_FOUND TRUE )
142-
143- # Set include directories
144- get_target_property (tinygltf_INCLUDE_DIR tinygltf INTERFACE_INCLUDE_DIRECTORIES )
145- if (tinygltf_INCLUDE_DIR)
146- set (tinygltf_INCLUDE_DIRS ${tinygltf_INCLUDE_DIR} )
147- else ()
148- # If we can't get the include directory from the target, use the source directory
149- FetchContent_GetProperties(tinygltf SOURCE_DIR tinygltf_SOURCE_DIR)
150- set (tinygltf_INCLUDE_DIR ${tinygltf_SOURCE_DIR} )
151- set (tinygltf_INCLUDE_DIRS ${tinygltf_INCLUDE_DIR} )
152-
153- # Explicitly set the include directory on the target
154- if (TARGET tinygltf)
155- set_target_properties (tinygltf PROPERTIES
156- INTERFACE_INCLUDE_DIRECTORIES "${tinygltf_INCLUDE_DIR} "
157- )
158- endif ()
159- endif ()
127+ set (TinyGLTF_FOUND TRUE )
160128endif ()
161-
162- mark_as_advanced (tinygltf_INCLUDE_DIR)
0 commit comments