Skip to content

Commit 85f42ff

Browse files
committed
Enhance Windows dependency discovery and mapping
Add robust Windows dependency handling and import target mapping for static builds. Introduces helper functions (rawgl_add_imported_interface_alias, rawgl_map_imported_config_targets) and expands platform logic to discover Zlib, WebP, Brotli, BZip2, ICU, EXPAT and other libs under multiple package-name variants. Add RAWGL_WINDOWS_PREFIX_ONLY_FIND and RAWGL_WINDOWS_CONFIGURATION_TYPES options and enforce prefix-based search behavior and configuration mapping for multi-config generators. Improve rawgl_windows_static_link to search CMAKE_PREFIX_PATH and RAWGL_WINDOWS_DEPS_ROOT for prefixed .lib files and auto-detect DNG/XMP SDK libs; update vendor library append/patch routines to use the new prefix search. Wire mapped/imported targets into platform files and target linking (RAWGL_EXTRA_WINDOWS_LIBS), and expose new options in the config summary. Also replace global PNG ignore with bld_* in .gitignore and add several example PNGs.
1 parent 58b34e8 commit 85f42ff

12 files changed

Lines changed: 336 additions & 23 deletions

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,4 @@ logs
4545
*.vcxproj.user
4646
__pycache__
4747
/examples/Sequence/BitshiftSequence_frames
48-
*.png
48+
/bld_*

cmake/rawgl_dependencies.cmake

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,28 @@ find_path(RAWGL_JXL_INCLUDE_DIR
9393
HINTS ${rawgl_dependency_include_hints})
9494

9595
find_package(OpenMeta CONFIG QUIET)
96+
if(WIN32)
97+
if(NOT TARGET EXPAT::EXPAT)
98+
find_package(EXPAT QUIET)
99+
endif()
100+
if(NOT TARGET expat::expat)
101+
find_package(expat CONFIG QUIET)
102+
endif()
103+
if(TARGET expat::expat AND NOT TARGET EXPAT::EXPAT)
104+
rawgl_add_imported_interface_alias(EXPAT::EXPAT expat::expat)
105+
endif()
106+
rawgl_map_imported_config_targets(
107+
Brotli::common
108+
Brotli::decoder
109+
Brotli::encoder
110+
Brotli::brotlicommon
111+
Brotli::brotlidec
112+
Brotli::brotlienc
113+
EXPAT::EXPAT
114+
expat::expat
115+
OpenMeta::openmeta_static
116+
OpenMeta::openmeta_shared)
117+
endif()
96118
find_path(RAWGL_OPENMETA_INCLUDE_DIR
97119
NAMES openmeta/simple_meta.h
98120
HINTS ${rawgl_dependency_prefix_hints}

cmake/rawgl_helpers.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,62 @@ function(rawgl_windows_config_library_expr out_var release_path debug_path)
8989
set(${out_var} "${rawgl_expr}" PARENT_SCOPE)
9090
endfunction()
9191

92+
function(rawgl_add_imported_interface_alias alias_target target_name)
93+
if(TARGET ${alias_target} OR NOT TARGET ${target_name})
94+
return()
95+
endif()
96+
97+
add_library(${alias_target} INTERFACE IMPORTED)
98+
set_target_properties(${alias_target} PROPERTIES
99+
INTERFACE_LINK_LIBRARIES "${target_name}")
100+
endfunction()
101+
102+
function(rawgl_map_imported_config_targets)
103+
foreach(rawgl_target_name ${ARGN})
104+
if(TARGET ${rawgl_target_name})
105+
set(rawgl_fallback_location)
106+
set(rawgl_fallback_implib)
107+
foreach(rawgl_config_name IN ITEMS RELEASE RELWITHDEBINFO MINSIZEREL NOCONFIG DEBUG)
108+
if(NOT rawgl_fallback_location)
109+
get_target_property(rawgl_config_location ${rawgl_target_name} IMPORTED_LOCATION_${rawgl_config_name})
110+
if(rawgl_config_location)
111+
set(rawgl_fallback_location "${rawgl_config_location}")
112+
endif()
113+
endif()
114+
if(NOT rawgl_fallback_implib)
115+
get_target_property(rawgl_config_implib ${rawgl_target_name} IMPORTED_IMPLIB_${rawgl_config_name})
116+
if(rawgl_config_implib)
117+
set(rawgl_fallback_implib "${rawgl_config_implib}")
118+
endif()
119+
endif()
120+
endforeach()
121+
if(NOT rawgl_fallback_location)
122+
get_target_property(rawgl_fallback_location ${rawgl_target_name} IMPORTED_LOCATION)
123+
endif()
124+
if(NOT rawgl_fallback_implib)
125+
get_target_property(rawgl_fallback_implib ${rawgl_target_name} IMPORTED_IMPLIB)
126+
endif()
127+
128+
set_target_properties(${rawgl_target_name} PROPERTIES
129+
MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release
130+
MAP_IMPORTED_CONFIG_MINSIZEREL Release)
131+
132+
if(rawgl_fallback_location)
133+
set_target_properties(${rawgl_target_name} PROPERTIES
134+
IMPORTED_LOCATION_RELEASE "${rawgl_fallback_location}"
135+
IMPORTED_LOCATION_RELWITHDEBINFO "${rawgl_fallback_location}"
136+
IMPORTED_LOCATION_MINSIZEREL "${rawgl_fallback_location}")
137+
endif()
138+
if(rawgl_fallback_implib)
139+
set_target_properties(${rawgl_target_name} PROPERTIES
140+
IMPORTED_IMPLIB_RELEASE "${rawgl_fallback_implib}"
141+
IMPORTED_IMPLIB_RELWITHDEBINFO "${rawgl_fallback_implib}"
142+
IMPORTED_IMPLIB_MINSIZEREL "${rawgl_fallback_implib}")
143+
endif()
144+
endif()
145+
endforeach()
146+
endfunction()
147+
92148
function(rawgl_apply_windows_debug_suffix target_name)
93149
if(NOT WIN32)
94150
return()

cmake/rawgl_options.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ set(RAWGL_WINDOWS_XMP_CORE_LIBRARY_RELEASE "" CACHE FILEPATH "Windows release XM
1010
set(RAWGL_WINDOWS_XMP_CORE_LIBRARY_DEBUG "" CACHE FILEPATH "Windows debug XMP core library")
1111
set(RAWGL_WINDOWS_XMP_FILES_LIBRARY_RELEASE "" CACHE FILEPATH "Windows release XMP files library")
1212
set(RAWGL_WINDOWS_XMP_FILES_LIBRARY_DEBUG "" CACHE FILEPATH "Windows debug XMP files library")
13+
set(RAWGL_WINDOWS_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Windows multi-config generator configurations. Leave empty to keep the generator default.")
1314
set(RAWGL_MINIPLY_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/miniply" CACHE PATH "Directory containing miniply.h")
1415
option(RAWGL_WINDOWS_UTF8 "Compile all Windows/MSVC targets with /utf-8." ON)
16+
option(RAWGL_WINDOWS_PREFIX_ONLY_FIND "Restrict Windows third-party dependency discovery to CMake/package prefix paths and explicit hints." ON)
1517
set(RAWGL_WINDOWS_DEBUG_SUFFIX "d" CACHE STRING "Suffix applied to Windows Debug target output names.")
1618
option(RAWGL_BUILD_APP "Build the RawGL command-line application." ON)
1719
option(RAWGL_BUILD_DOCS "Build Doxygen documentation targets." OFF)
@@ -80,7 +82,12 @@ endfunction()
8082

8183
if(WIN32)
8284
rawgl_cache_prepend_prefix_path("${RAWGL_WINDOWS_DEPS_ROOT}")
85+
if(CMAKE_CONFIGURATION_TYPES AND RAWGL_WINDOWS_CONFIGURATION_TYPES)
86+
set(CMAKE_CONFIGURATION_TYPES "${RAWGL_WINDOWS_CONFIGURATION_TYPES}" CACHE STRING "RawGL Windows generator configurations." FORCE)
87+
endif()
8388
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON CACHE BOOL "Prefer package config files over Find modules on Windows static builds." FORCE)
89+
set(CMAKE_FIND_USE_PACKAGE_REGISTRY OFF CACHE BOOL "Do not use the user package registry for RawGL Windows dependency discovery." FORCE)
90+
set(CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY OFF CACHE BOOL "Do not use the system package registry for RawGL Windows dependency discovery." FORCE)
8491
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release CACHE STRING "Map RelWithDebInfo imports to Release on Windows static builds." FORCE)
8592
set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL Release CACHE STRING "Map MinSizeRel imports to Release on Windows static builds." FORCE)
8693
set(CMAKE_MSVC_RUNTIME_LIBRARY

cmake/rawgl_platform_windows.cmake

Lines changed: 137 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,35 @@
1-
find_package(OpenGL REQUIRED)
2-
find_package(ZLIB QUIET)
3-
41
set(GLEW_USE_STATIC_LIBS ON)
52
set(ZLIB_USE_STATIC_LIBS ON)
63

4+
find_package(OpenGL REQUIRED)
5+
if(RAWGL_WINDOWS_PREFIX_ONLY_FIND)
6+
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF CACHE BOOL "Do not use PATH/system environment for RawGL Windows dependency discovery." FORCE)
7+
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH OFF CACHE BOOL "Do not use CMake system prefixes for RawGL Windows dependency discovery." FORCE)
8+
endif()
9+
find_path(RAWGL_ZLIB_INCLUDE_DIR
10+
NAMES zlib.h)
11+
find_library(RAWGL_ZLIB_LIBRARY_RELEASE
12+
NAMES zlibstatic zlib z)
13+
find_library(RAWGL_ZLIB_LIBRARY_DEBUG
14+
NAMES zlibstaticd zlibd zd z_d)
15+
rawgl_add_windows_imported_library(ZLIB::ZLIBSTATIC
16+
INCLUDE_DIR "${RAWGL_ZLIB_INCLUDE_DIR}"
17+
RELEASE "${RAWGL_ZLIB_LIBRARY_RELEASE}"
18+
DEBUG "${RAWGL_ZLIB_LIBRARY_DEBUG}")
19+
rawgl_add_windows_imported_library(ZLIB::ZLIB
20+
INCLUDE_DIR "${RAWGL_ZLIB_INCLUDE_DIR}"
21+
RELEASE "${RAWGL_ZLIB_LIBRARY_RELEASE}"
22+
DEBUG "${RAWGL_ZLIB_LIBRARY_DEBUG}")
23+
if(TARGET ZLIB::ZLIB AND NOT TARGET ZLIB::ZLIBSTATIC)
24+
rawgl_add_imported_interface_alias(ZLIB::ZLIBSTATIC ZLIB::ZLIB)
25+
endif()
26+
if(NOT TARGET ZLIB::ZLIB)
27+
find_package(ZLIB MODULE QUIET)
28+
endif()
29+
if(TARGET ZLIB::ZLIB AND NOT TARGET ZLIB::ZLIBSTATIC)
30+
rawgl_add_imported_interface_alias(ZLIB::ZLIBSTATIC ZLIB::ZLIB)
31+
endif()
32+
733
if(RAWGL_WINDOWS_DEPS_ROOT AND NOT TARGET ZLIB::ZLIB)
834
rawgl_add_windows_imported_library(ZLIB::ZLIB
935
INCLUDE_DIR "${RAWGL_WINDOWS_DEPS_ROOT}/include"
@@ -124,6 +150,10 @@ find_package(PNG CONFIG QUIET)
124150
find_package(libjpeg-turbo CONFIG QUIET)
125151
find_package(JPEG QUIET)
126152
find_package(TIFF CONFIG QUIET)
153+
find_package(WebP CONFIG QUIET)
154+
if(NOT TARGET WebP::webp)
155+
find_package(webp CONFIG QUIET)
156+
endif()
127157
find_package(GIFLIB CONFIG QUIET)
128158
if(NOT TARGET GIF::GIF)
129159
if(TARGET GIFLIB::gif)
@@ -147,6 +177,44 @@ endif()
147177
find_package(Ptex CONFIG QUIET)
148178
find_package(OpenJPEG CONFIG QUIET)
149179
find_package(AOM CONFIG QUIET)
180+
find_package(Brotli CONFIG QUIET)
181+
find_package(brotli CONFIG QUIET)
182+
find_path(RAWGL_BZIP2_INCLUDE_DIR
183+
NAMES bzlib.h)
184+
find_library(RAWGL_BZIP2_LIBRARY_RELEASE
185+
NAMES bz2_static bz2 bzip2 libbz2)
186+
find_library(RAWGL_BZIP2_LIBRARY_DEBUG
187+
NAMES bz2_staticd bz2d bzip2d libbz2d bz2_d)
188+
rawgl_add_windows_imported_library(BZip2::BZip2
189+
INCLUDE_DIR "${RAWGL_BZIP2_INCLUDE_DIR}"
190+
RELEASE "${RAWGL_BZIP2_LIBRARY_RELEASE}"
191+
DEBUG "${RAWGL_BZIP2_LIBRARY_DEBUG}")
192+
find_path(RAWGL_ICU_INCLUDE_DIR
193+
NAMES unicode/utypes.h)
194+
find_library(RAWGL_ICU_UC_LIBRARY_RELEASE
195+
NAMES icuuc)
196+
find_library(RAWGL_ICU_UC_LIBRARY_DEBUG
197+
NAMES icuucd icuuc_d)
198+
find_library(RAWGL_ICU_I18N_LIBRARY_RELEASE
199+
NAMES icuin icui18n)
200+
find_library(RAWGL_ICU_I18N_LIBRARY_DEBUG
201+
NAMES icuind icui18nd icuin_d icui18n_d)
202+
find_library(RAWGL_ICU_DATA_LIBRARY_RELEASE
203+
NAMES icudt icudata)
204+
find_library(RAWGL_ICU_DATA_LIBRARY_DEBUG
205+
NAMES icudtd icudatad icudt_d icudata_d)
206+
rawgl_add_windows_imported_library(ICU::uc
207+
INCLUDE_DIR "${RAWGL_ICU_INCLUDE_DIR}"
208+
RELEASE "${RAWGL_ICU_UC_LIBRARY_RELEASE}"
209+
DEBUG "${RAWGL_ICU_UC_LIBRARY_DEBUG}")
210+
rawgl_add_windows_imported_library(ICU::i18n
211+
INCLUDE_DIR "${RAWGL_ICU_INCLUDE_DIR}"
212+
RELEASE "${RAWGL_ICU_I18N_LIBRARY_RELEASE}"
213+
DEBUG "${RAWGL_ICU_I18N_LIBRARY_DEBUG}")
214+
rawgl_add_windows_imported_library(ICU::data
215+
INCLUDE_DIR "${RAWGL_ICU_INCLUDE_DIR}"
216+
RELEASE "${RAWGL_ICU_DATA_LIBRARY_RELEASE}"
217+
DEBUG "${RAWGL_ICU_DATA_LIBRARY_DEBUG}")
150218
find_package(harfbuzz CONFIG QUIET)
151219
find_package(freetype CONFIG QUIET)
152220
find_package(libheif CONFIG QUIET)
@@ -161,6 +229,12 @@ find_package(pugixml CONFIG QUIET)
161229
find_package(yaml-cpp CONFIG QUIET)
162230
find_package(minizip-ng CONFIG QUIET)
163231
find_package(expat CONFIG QUIET)
232+
if(NOT TARGET EXPAT::EXPAT)
233+
find_package(EXPAT QUIET)
234+
endif()
235+
if(TARGET expat::expat AND NOT TARGET EXPAT::EXPAT)
236+
rawgl_add_imported_interface_alias(EXPAT::EXPAT expat::expat)
237+
endif()
164238
find_package(glew CONFIG QUIET)
165239
if(NOT TARGET GLEW::GLEW
166240
AND NOT TARGET GLEW::glew_s
@@ -197,6 +271,17 @@ if(TARGET libjpeg-turbo::jpeg-static AND NOT TARGET JPEG::JPEG)
197271
set_target_properties(JPEG::JPEG PROPERTIES
198272
INTERFACE_LINK_LIBRARIES "libjpeg-turbo::jpeg-static")
199273
endif()
274+
rawgl_add_imported_interface_alias(WebP::webp WebP::WebP)
275+
rawgl_add_imported_interface_alias(WebP::webp webp::webp)
276+
rawgl_add_imported_interface_alias(WebP::webp webp)
277+
rawgl_add_imported_interface_alias(WebP::webp libwebp)
278+
rawgl_add_imported_interface_alias(WebP::webp libwebp::webp)
279+
rawgl_add_imported_interface_alias(WebP::webpdemux webpdemux)
280+
rawgl_add_imported_interface_alias(WebP::webpdemux libwebpdemux)
281+
rawgl_add_imported_interface_alias(WebP::webpdemux libwebp::webpdemux)
282+
rawgl_add_imported_interface_alias(WebP::libwebpmux webpmux)
283+
rawgl_add_imported_interface_alias(WebP::libwebpmux libwebpmux)
284+
rawgl_add_imported_interface_alias(WebP::libwebpmux libwebp::webpmux)
200285
if(TARGET Ptex::Ptex AND NOT TARGET Ptex::Ptex_static)
201286
add_library(Ptex::Ptex_static ALIAS Ptex::Ptex)
202287
elseif(TARGET Ptex AND NOT TARGET Ptex::Ptex_static)
@@ -249,6 +334,55 @@ if(NOT TARGET libuhdr::libuhdr
249334
DEBUG "${RAWGL_WINDOWS_DEPS_ROOT}/lib/uhdrd.lib")
250335
endif()
251336

337+
if(NOT TARGET WebP::webp)
338+
find_path(RAWGL_WEBP_INCLUDE_DIR
339+
NAMES webp/decode.h)
340+
find_library(RAWGL_WEBP_LIBRARY_RELEASE
341+
NAMES webp libwebp)
342+
find_library(RAWGL_WEBP_LIBRARY_DEBUG
343+
NAMES webpd libwebpd webp_d)
344+
rawgl_add_windows_imported_library(WebP::webp
345+
INCLUDE_DIR "${RAWGL_WEBP_INCLUDE_DIR}"
346+
RELEASE "${RAWGL_WEBP_LIBRARY_RELEASE}"
347+
DEBUG "${RAWGL_WEBP_LIBRARY_DEBUG}")
348+
endif()
349+
if(NOT TARGET WebP::webpdemux)
350+
find_library(RAWGL_WEBPDEMUX_LIBRARY_RELEASE
351+
NAMES webpdemux libwebpdemux)
352+
find_library(RAWGL_WEBPDEMUX_LIBRARY_DEBUG
353+
NAMES webpdemuxd libwebpdemuxd webpdemux_d)
354+
rawgl_add_windows_imported_library(WebP::webpdemux
355+
INCLUDE_DIR "${RAWGL_WEBP_INCLUDE_DIR}"
356+
RELEASE "${RAWGL_WEBPDEMUX_LIBRARY_RELEASE}"
357+
DEBUG "${RAWGL_WEBPDEMUX_LIBRARY_DEBUG}")
358+
endif()
359+
if(NOT TARGET WebP::libwebpmux)
360+
find_library(RAWGL_WEBPMUX_LIBRARY_RELEASE
361+
NAMES webpmux libwebpmux)
362+
find_library(RAWGL_WEBPMUX_LIBRARY_DEBUG
363+
NAMES webpmuxd libwebpmuxd webpmux_d)
364+
rawgl_add_windows_imported_library(WebP::libwebpmux
365+
INCLUDE_DIR "${RAWGL_WEBP_INCLUDE_DIR}"
366+
RELEASE "${RAWGL_WEBPMUX_LIBRARY_RELEASE}"
367+
DEBUG "${RAWGL_WEBPMUX_LIBRARY_DEBUG}")
368+
endif()
369+
370+
rawgl_map_imported_config_targets(
371+
GIF::GIF
372+
GIFLIB::gif
373+
GIFLIB::GIFLIB
374+
Brotli::common
375+
Brotli::decoder
376+
Brotli::encoder
377+
Brotli::brotlicommon
378+
Brotli::brotlidec
379+
Brotli::brotlienc
380+
WebP::webp
381+
WebP::webpdemux
382+
WebP::libwebpmux
383+
EXPAT::EXPAT
384+
expat::expat)
385+
252386
if(TARGET GLEW::GLEW)
253387
set(RAWGL_OPENGL_LOADER_TARGET GLEW::GLEW)
254388
elseif(TARGET GLEW::glew_s)

cmake/rawgl_report.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ function(rawgl_print_config_summary)
8686
message(STATUS " RAWGL_BUILD_SPHINX_DOCS: ${RAWGL_BUILD_SPHINX_DOCS}")
8787
message(STATUS " RAWGL_DOCS_ONLY: ${RAWGL_DOCS_ONLY}")
8888
if(WIN32)
89+
message(STATUS " RAWGL_WINDOWS_PREFIX_ONLY_FIND: ${RAWGL_WINDOWS_PREFIX_ONLY_FIND}")
90+
message(STATUS " RAWGL_WINDOWS_CONFIGURATION_TYPES: ${RAWGL_WINDOWS_CONFIGURATION_TYPES}")
8991
message(STATUS " RAWGL_WINDOWS_DEBUG_SUFFIX: ${RAWGL_WINDOWS_DEBUG_SUFFIX}")
9092
endif()
9193
message(STATUS " RAWGL_BUILD_PYTHON: ${RAWGL_BUILD_PYTHON}")

cmake/rawgl_targets.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,8 @@ endif()
212212
target_link_libraries(rawgl_io PUBLIC
213213
rawgl_support
214214
${RAWGL_OPENGL_LOADER_TARGET}
215-
${RAWGL_OIIO_TARGETS})
215+
${RAWGL_OIIO_TARGETS}
216+
${RAWGL_EXTRA_WINDOWS_LIBS})
216217

217218
if(TARGET PNG::PNG)
218219
target_link_libraries(rawgl_io PUBLIC PNG::PNG)

0 commit comments

Comments
 (0)