Skip to content

Commit 031c0e1

Browse files
authored
Merge pull request #388 from gpx1000/permission-issues-for-tinygltf
fix #387
2 parents 4780b51 + c79f56c commit 031c0e1

5 files changed

Lines changed: 224 additions & 14 deletions

File tree

attachments/simple_engine/CMake/FindKTX.cmake

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,10 @@ else()
5151
${CMAKE_SOURCE_DIR}/external/ktx/lib
5252
)
5353

54-
include(FindPackageHandleStandardArgs)
55-
find_package_handle_standard_args(KTX
56-
REQUIRED_VARS KTX_INCLUDE_DIR KTX_LIBRARY
57-
FAIL_MESSAGE "" # Suppress the error message to allow our fallback
58-
)
59-
60-
# Debug output if KTX is not found (only on non-Linux platforms)
61-
if(NOT KTX_FOUND)
62-
message(STATUS "KTX include directory search paths: ${PC_KTX_INCLUDEDIR}, /usr/include, /usr/local/include, $ENV{KTX_DIR}/include, $ENV{VULKAN_SDK}/include, ${CMAKE_SOURCE_DIR}/external/ktx/include")
63-
message(STATUS "KTX library search paths: ${PC_KTX_LIBDIR}, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64, $ENV{KTX_DIR}/lib, $ENV{VULKAN_SDK}/lib, ${CMAKE_SOURCE_DIR}/external/ktx/lib")
54+
if (KTX_INCLUDE_DIR AND KTX_LIBRARY)
55+
set(KTX_FOUND TRUE)
56+
else ()
57+
set(KTX_FOUND FALSE)
6458
endif()
6559
endif()
6660

@@ -102,5 +96,16 @@ else()
10296
add_library(KTX::ktx ALIAS ktx)
10397
endif()
10498

99+
# Set variables to indicate that KTX was found and to satisfy find_package_handle_standard_args
105100
set(KTX_FOUND TRUE)
101+
FetchContent_GetProperties(ktx SOURCE_DIR ktx_SOURCE_DIR)
102+
set(KTX_INCLUDE_DIR "${ktx_SOURCE_DIR}/include")
103+
set(KTX_LIBRARY ktx)
104+
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
105+
set(KTX_LIBRARIES ${KTX_LIBRARY})
106106
endif()
107+
108+
include(FindPackageHandleStandardArgs)
109+
find_package_handle_standard_args(KTX
110+
REQUIRED_VARS KTX_INCLUDE_DIR KTX_LIBRARY
111+
)
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# FindOpenAL.cmake
2+
#
3+
# Finds the OpenAL library
4+
#
5+
# This will define the following variables:
6+
#
7+
# OpenAL_FOUND
8+
# OPENAL_INCLUDE_DIR
9+
# OPENAL_LIBRARY
10+
#
11+
# and the following imported targets:
12+
#
13+
# OpenAL::OpenAL
14+
#
15+
16+
# Try to find OpenAL using CONFIG mode first
17+
find_package(OpenAL CONFIG QUIET)
18+
19+
if (OpenAL_FOUND)
20+
if (NOT TARGET OpenAL::OpenAL)
21+
if (TARGET OpenAL)
22+
add_library(OpenAL::OpenAL ALIAS OpenAL)
23+
endif ()
24+
endif ()
25+
26+
# Set variables for find_package_handle_standard_args
27+
if (NOT OPENAL_INCLUDE_DIR)
28+
get_target_property(OPENAL_INCLUDE_DIR OpenAL::OpenAL INTERFACE_INCLUDE_DIRECTORIES)
29+
endif ()
30+
if (NOT OPENAL_LIBRARY)
31+
set(OPENAL_LIBRARY OpenAL)
32+
endif ()
33+
endif ()
34+
35+
if (NOT OpenAL_FOUND)
36+
# Try to find using standard find_path/find_library
37+
find_path(OPENAL_INCLUDE_DIR NAMES AL/al.h OpenAL/al.h)
38+
find_library(OPENAL_LIBRARY NAMES OpenAL al openal OpenAL32)
39+
40+
if (OPENAL_INCLUDE_DIR AND OPENAL_LIBRARY)
41+
set(OpenAL_FOUND TRUE)
42+
if (NOT TARGET OpenAL::OpenAL)
43+
add_library(OpenAL::OpenAL UNKNOWN IMPORTED)
44+
set_target_properties(OpenAL::OpenAL PROPERTIES
45+
IMPORTED_LOCATION "${OPENAL_LIBRARY}"
46+
INTERFACE_INCLUDE_DIRECTORIES "${OPENAL_INCLUDE_DIR}"
47+
)
48+
endif ()
49+
endif ()
50+
endif ()
51+
52+
if (NOT OpenAL_FOUND)
53+
# If not found, use FetchContent to download and build openal-soft
54+
include(FetchContent)
55+
56+
message(STATUS "OpenAL not found, fetching openal-soft from GitHub...")
57+
58+
FetchContent_Declare(
59+
openal-soft
60+
GIT_REPOSITORY https://github.com/kcat/openal-soft.git
61+
GIT_TAG 1.23.1
62+
)
63+
64+
# Set options to minimize OpenAL build
65+
set(ALSOFT_EXAMPLES OFF CACHE BOOL "" FORCE)
66+
set(ALSOFT_TESTS OFF CACHE BOOL "" FORCE)
67+
set(ALSOFT_UTILS OFF CACHE BOOL "" FORCE)
68+
set(ALSOFT_NO_CONFIG_UTIL ON CACHE BOOL "" FORCE)
69+
set(ALSOFT_INSTALL OFF CACHE BOOL "" FORCE)
70+
71+
# Set policy to suppress the deprecation warning
72+
if (POLICY CMP0169)
73+
cmake_policy(SET CMP0169 OLD)
74+
endif ()
75+
76+
FetchContent_GetProperties(openal-soft)
77+
if (NOT openal-soft_POPULATED)
78+
FetchContent_Populate(openal-soft)
79+
80+
# Update the minimum required CMake version to avoid errors on new CMake versions
81+
file(READ "${openal-soft_SOURCE_DIR}/CMakeLists.txt" OPENAL_CMAKE_CONTENT)
82+
string(REPLACE "cmake_minimum_required(VERSION 3.0.2)"
83+
"cmake_minimum_required(VERSION 3.5)"
84+
OPENAL_CMAKE_CONTENT "${OPENAL_CMAKE_CONTENT}")
85+
file(WRITE "${openal-soft_SOURCE_DIR}/CMakeLists.txt" "${OPENAL_CMAKE_CONTENT}")
86+
87+
add_subdirectory(${openal-soft_SOURCE_DIR} ${openal-soft_BINARY_DIR})
88+
endif ()
89+
90+
# openal-soft defines a target named 'OpenAL'
91+
if (TARGET OpenAL)
92+
set(OpenAL_FOUND TRUE)
93+
if (NOT TARGET OpenAL::OpenAL)
94+
add_library(OpenAL::OpenAL ALIAS OpenAL)
95+
endif ()
96+
# Satisfy find_package_handle_standard_args
97+
set(OPENAL_INCLUDE_DIR "${openal-soft_SOURCE_DIR}/include")
98+
set(OPENAL_LIBRARY OpenAL)
99+
endif ()
100+
endif ()
101+
102+
include(FindPackageHandleStandardArgs)
103+
find_package_handle_standard_args(OpenAL
104+
REQUIRED_VARS OPENAL_INCLUDE_DIR OPENAL_LIBRARY
105+
)
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# Findglfw3.cmake
2+
#
3+
# Finds the GLFW3 library
4+
#
5+
# This will define the following variables:
6+
#
7+
# glfw3_FOUND
8+
# GLFW3_INCLUDE_DIR
9+
# GLFW3_LIBRARY
10+
#
11+
# and the following imported targets:
12+
#
13+
# glfw
14+
#
15+
16+
# Try to find GLFW3 using CONFIG mode first (common for vcpkg)
17+
find_package(glfw3 CONFIG QUIET)
18+
19+
if (glfw3_FOUND)
20+
if (NOT TARGET glfw)
21+
if (TARGET glfw3::glfw)
22+
add_library(glfw ALIAS glfw3::glfw)
23+
endif ()
24+
endif ()
25+
26+
# Set variables for find_package_handle_standard_args
27+
if (NOT GLFW3_INCLUDE_DIR)
28+
get_target_property(GLFW3_INCLUDE_DIR glfw INTERFACE_INCLUDE_DIRECTORIES)
29+
endif ()
30+
if (NOT GLFW3_LIBRARY)
31+
set(GLFW3_LIBRARY glfw)
32+
endif ()
33+
endif ()
34+
35+
if (NOT glfw3_FOUND)
36+
# Try to find using standard find_path/find_library
37+
find_path(GLFW3_INCLUDE_DIR NAMES GLFW/glfw3.h)
38+
find_library(GLFW3_LIBRARY NAMES glfw glfw3)
39+
40+
if (GLFW3_INCLUDE_DIR AND GLFW3_LIBRARY)
41+
set(glfw3_FOUND TRUE)
42+
if (NOT TARGET glfw)
43+
add_library(glfw UNKNOWN IMPORTED)
44+
set_target_properties(glfw PROPERTIES
45+
IMPORTED_LOCATION "${GLFW3_LIBRARY}"
46+
INTERFACE_INCLUDE_DIRECTORIES "${GLFW3_INCLUDE_DIR}"
47+
)
48+
endif ()
49+
endif ()
50+
endif ()
51+
52+
if (NOT glfw3_FOUND)
53+
# If not found, use FetchContent to download and build
54+
include(FetchContent)
55+
56+
message(STATUS "glfw3 not found, fetching from GitHub...")
57+
58+
FetchContent_Declare(
59+
glfw
60+
GIT_REPOSITORY https://github.com/glfw/glfw.git
61+
GIT_TAG 3.4
62+
)
63+
64+
# Set options to minimize GLFW build
65+
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
66+
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
67+
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
68+
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
69+
70+
# Set policy to suppress the deprecation warning
71+
if (POLICY CMP0169)
72+
cmake_policy(SET CMP0169 OLD)
73+
endif ()
74+
75+
FetchContent_GetProperties(glfw)
76+
if (NOT glfw_POPULATED)
77+
FetchContent_Populate(glfw)
78+
79+
# Update the minimum required CMake version to avoid errors on new CMake versions
80+
file(READ "${glfw_SOURCE_DIR}/CMakeLists.txt" GLFW_CMAKE_CONTENT)
81+
string(REPLACE "cmake_minimum_required(VERSION 3.0)"
82+
"cmake_minimum_required(VERSION 3.5)"
83+
GLFW_CMAKE_CONTENT "${GLFW_CMAKE_CONTENT}")
84+
file(WRITE "${glfw_SOURCE_DIR}/CMakeLists.txt" "${GLFW_CMAKE_CONTENT}")
85+
86+
add_subdirectory(${glfw_SOURCE_DIR} ${glfw_BINARY_DIR})
87+
endif ()
88+
89+
# GLFW's CMakeLists.txt defines a target named 'glfw'
90+
if (TARGET glfw)
91+
set(glfw3_FOUND TRUE)
92+
# Satisfy find_package_handle_standard_args
93+
set(GLFW3_INCLUDE_DIR "${glfw_SOURCE_DIR}/include")
94+
set(GLFW3_LIBRARY glfw)
95+
endif ()
96+
endif ()
97+
98+
include(FindPackageHandleStandardArgs)
99+
find_package_handle_standard_args(glfw3
100+
REQUIRED_VARS GLFW3_INCLUDE_DIR GLFW3_LIBRARY
101+
)

attachments/simple_engine/CMake/Findnlohmann_json.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ if(NOT nlohmann_json_INCLUDE_DIR)
6060
if(NOT nlohmann_json_POPULATED)
6161
FetchContent_Populate(nlohmann_json)
6262

63-
if(ANDROID)
6463
# Update the minimum required CMake version before including the CMakeLists.txt
6564
file(READ "${nlohmann_json_SOURCE_DIR}/CMakeLists.txt" NLOHMANN_JSON_CMAKE_CONTENT)
6665
string(REPLACE "cmake_minimum_required(VERSION 3.1"
@@ -91,7 +90,6 @@ if(NOT nlohmann_json_INCLUDE_DIR)
9190
"cmake_minimum_required(VERSION 3.10"
9291
NLOHMANN_JSON_CMAKE_CONTENT "${NLOHMANN_JSON_CMAKE_CONTENT}")
9392
file(WRITE "${nlohmann_json_SOURCE_DIR}/CMakeLists.txt" "${NLOHMANN_JSON_CMAKE_CONTENT}")
94-
endif()
9593

9694
# Now add the subdirectory manually
9795
add_subdirectory(${nlohmann_json_SOURCE_DIR} ${nlohmann_json_BINARY_DIR})

attachments/simple_engine/CMake/Findtinygltf.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ if(NOT tinygltf_INCLUDE_DIR)
7474
TINYGLTF_CMAKE_CONTENT "${TINYGLTF_CMAKE_CONTENT}")
7575
file(WRITE "${tinygltf_SOURCE_DIR}/CMakeLists.txt" "${TINYGLTF_CMAKE_CONTENT}")
7676

77-
# Create a symbolic link to make nlohmann/json.hpp available
77+
# Copy json.hpp to nlohmann/json.hpp to make it available
78+
# Using COPY instead of CREATE_LINK SYMBOLIC to avoid permission issues on Windows
7879
if(EXISTS "${tinygltf_SOURCE_DIR}/json.hpp")
7980
file(MAKE_DIRECTORY "${tinygltf_SOURCE_DIR}/nlohmann")
80-
file(CREATE_LINK "${tinygltf_SOURCE_DIR}/json.hpp" "${tinygltf_SOURCE_DIR}/nlohmann/json.hpp" SYMBOLIC)
81+
file(COPY "${tinygltf_SOURCE_DIR}/json.hpp" DESTINATION "${tinygltf_SOURCE_DIR}/nlohmann")
8182
endif()
8283

8384
# Set tinygltf to header-only mode

0 commit comments

Comments
 (0)