Skip to content

Commit be6848e

Browse files
committed
Refactor FindKTX.cmake to fix FetchContent fallback and improve cross-platform compatibility
Move FindPackageHandleStandardArgs call after FetchContent fallback to ensure KTX_FOUND is properly set when fetching from GitHub. Remove premature error messages and debug output, and restructure target creation to work correctly with both system-installed and fetched KTX libraries.
1 parent df8f35e commit be6848e

2 files changed

Lines changed: 58 additions & 50 deletions

File tree

attachments/CMake/FindKTX.cmake

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ else()
2424
pkg_check_modules(PC_KTX QUIET ktx libktx ktx2 libktx2)
2525
endif()
2626

27-
# Try to find KTX using standard find_package
27+
# Try to find KTX using standard find_path/find_library
2828
find_path(KTX_INCLUDE_DIR
2929
NAMES ktx.h
3030
PATH_SUFFIXES include ktx KTX ktx2 KTX2
@@ -51,35 +51,18 @@ 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

67-
if(KTX_FOUND)
68-
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
69-
set(KTX_LIBRARIES ${KTX_LIBRARY})
70-
71-
if(NOT TARGET KTX::ktx)
72-
add_library(KTX::ktx UNKNOWN IMPORTED)
73-
set_target_properties(KTX::ktx PROPERTIES
74-
IMPORTED_LOCATION "${KTX_LIBRARIES}"
75-
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
76-
)
77-
endif()
78-
else()
79-
# If not found, use FetchContent to download and build
61+
# If not found, use FetchContent to download and build
62+
if(NOT KTX_FOUND)
8063
include(FetchContent)
8164

82-
# Only show the message on non-Linux platforms
65+
# Only show the message on non-Linux platforms (on Linux we expect to fetch)
8366
if(NOT (UNIX AND NOT APPLE))
8467
message(STATUS "KTX not found, fetching from GitHub...")
8568
endif()
@@ -104,3 +87,24 @@ else()
10487

10588
set(KTX_FOUND TRUE)
10689
endif()
90+
91+
# Finalize the variables and targets
92+
include(FindPackageHandleStandardArgs)
93+
find_package_handle_standard_args(KTX
94+
REQUIRED_VARS KTX_FOUND
95+
)
96+
97+
if(KTX_FOUND)
98+
if(KTX_INCLUDE_DIR AND KTX_LIBRARY)
99+
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
100+
set(KTX_LIBRARIES ${KTX_LIBRARY})
101+
102+
if(NOT TARGET KTX::ktx)
103+
add_library(KTX::ktx UNKNOWN IMPORTED)
104+
set_target_properties(KTX::ktx PROPERTIES
105+
IMPORTED_LOCATION "${KTX_LIBRARIES}"
106+
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
107+
)
108+
endif()
109+
endif()
110+
endif()

attachments/simple_engine/CMake/FindKTX.cmake

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ else()
2424
pkg_check_modules(PC_KTX QUIET ktx libktx ktx2 libktx2)
2525
endif()
2626

27-
# Try to find KTX using standard find_package
27+
# Try to find KTX using standard find_path/find_library
2828
find_path(KTX_INCLUDE_DIR
2929
NAMES ktx.h
3030
PATH_SUFFIXES include ktx KTX ktx2 KTX2
@@ -51,35 +51,18 @@ 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

67-
if(KTX_FOUND)
68-
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
69-
set(KTX_LIBRARIES ${KTX_LIBRARY})
70-
71-
if(NOT TARGET KTX::ktx)
72-
add_library(KTX::ktx UNKNOWN IMPORTED)
73-
set_target_properties(KTX::ktx PROPERTIES
74-
IMPORTED_LOCATION "${KTX_LIBRARIES}"
75-
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
76-
)
77-
endif()
78-
else()
79-
# If not found, use FetchContent to download and build
61+
# If not found, use FetchContent to download and build
62+
if(NOT KTX_FOUND)
8063
include(FetchContent)
8164

82-
# Only show the message on non-Linux platforms
65+
# Only show the message on non-Linux platforms (on Linux we expect to fetch)
8366
if(NOT (UNIX AND NOT APPLE))
8467
message(STATUS "KTX not found, fetching from GitHub...")
8568
endif()
@@ -104,3 +87,24 @@ else()
10487

10588
set(KTX_FOUND TRUE)
10689
endif()
90+
91+
# Finalize the variables and targets
92+
include(FindPackageHandleStandardArgs)
93+
find_package_handle_standard_args(KTX
94+
REQUIRED_VARS KTX_FOUND
95+
)
96+
97+
if(KTX_FOUND)
98+
if(KTX_INCLUDE_DIR AND KTX_LIBRARY)
99+
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
100+
set(KTX_LIBRARIES ${KTX_LIBRARY})
101+
102+
if(NOT TARGET KTX::ktx)
103+
add_library(KTX::ktx UNKNOWN IMPORTED)
104+
set_target_properties(KTX::ktx PROPERTIES
105+
IMPORTED_LOCATION "${KTX_LIBRARIES}"
106+
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
107+
)
108+
endif()
109+
endif()
110+
endif()

0 commit comments

Comments
 (0)