Fix header generation issue with multiple qt6_add_win_app_sdk calls

Use EXISTS path insead of using find_path because find_path finds the
last target's generated headers, but we want to generate headers for
each target separetely.
Ammends 95c70bbc5bed906fc3d24eebfb00592d48b30a74

Pick-to: 6.9
Fixes: QTBUG-124800
Change-Id: Ib2b9ceefbc6d11f9bf67fdc6ce25dea3366afe3d
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Morteza Jamshidi 2025-03-11 15:26:33 +01:00
parent 7ca68d0e2e
commit 1593220552

View File

@ -33,11 +33,10 @@ function(qt6_add_win_app_sdk target)
set(generated_headers_path "${CMAKE_CURRENT_BINARY_DIR}/winrt_includes") set(generated_headers_path "${CMAKE_CURRENT_BINARY_DIR}/winrt_includes")
find_path(WINAPPSDK_GENERATED_INCLUDE_DIR set(winappsdk_generated_include_dir "${generated_headers_path}/winrt")
NAMES winrt/Microsoft.UI.h
HINTS "${generated_headers_path}")
# If headers are not already generated # If headers are not already generated
if(NOT WINAPPSDK_GENERATED_INCLUDE_DIR) if(NOT EXISTS "${winappsdk_generated_include_dir}")
if(CPP_WIN_RT_PATH) if(CPP_WIN_RT_PATH)
set(cpp_win_rt_path "${CPP_WIN_RT_PATH}") set(cpp_win_rt_path "${CPP_WIN_RT_PATH}")
elseif(DEFINED ENV{CPP_WIN_RT_PATH}) elseif(DEFINED ENV{CPP_WIN_RT_PATH})
@ -53,23 +52,26 @@ function(qt6_add_win_app_sdk target)
message(FATAL_ERROR "cppwinrt.exe could not be found") message(FATAL_ERROR "cppwinrt.exe could not be found")
endif() endif()
find_path(WINAPPSDK_INCLUDE_DIR find_path(winappsdk_include_dir
NAMES MddBootstrap.h NAMES MddBootstrap.h
HINTS ${win_app_sdk_root}/include) HINTS ${win_app_sdk_root}/include
NO_CACHE)
find_library(WINAPPSDK_LIBRARY find_library(winappsdk_library
NAMES Microsoft.WindowsAppRuntime NAMES Microsoft.WindowsAppRuntime
HINTS ${WINAPPSDK_LIBRARY_DIR} "${win_app_sdk_root}" HINTS ${WINAPPSDK_LIBRARY_DIR} "${win_app_sdk_root}"
"${win_app_sdk_root}/lib" "${win_app_sdk_root}/lib"
"${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}") "${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}"
NO_CACHE)
find_library(WINAPPSDK_BOOTSTRAP_LIBRARY find_library(winappsdk_bootstrap_library
NAMES Microsoft.WindowsAppRuntime.Bootstrap NAMES Microsoft.WindowsAppRuntime.Bootstrap
HINTS ${WINAPPSDK_LIBRARY_DIR} "${win_app_sdk_root}" HINTS ${WINAPPSDK_LIBRARY_DIR} "${win_app_sdk_root}"
"${win_app_sdk_root}/lib" "${win_app_sdk_root}/lib"
"${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}") "${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}"
NO_CACHE)
if(WINAPPSDK_INCLUDE_DIR AND WINAPPSDK_LIBRARY AND WINAPPSDK_BOOTSTRAP_LIBRARY) if(winappsdk_include_dir AND winappsdk_library AND winappsdk_bootstrap_library)
execute_process(COMMAND execute_process(COMMAND
${cpp_win_rt_path} -out "${generated_headers_path}" -ref sdk ${cpp_win_rt_path} -out "${generated_headers_path}" -ref sdk
-in "${win_app_sdk_root}/lib/uap10.0" -in "${win_app_sdk_root}/lib/uap10.0"
@ -77,12 +79,8 @@ function(qt6_add_win_app_sdk target)
-in "${win_app_sdk_root}/lib/uap10.0.18362" -in "${win_app_sdk_root}/lib/uap10.0.18362"
-in "${web_view_root}/lib") -in "${web_view_root}/lib")
find_path(WINAPPSDK_GENERATED_INCLUDE_DIR if(NOT EXISTS "${winappsdk_generated_include_dir}")
NAMES winrt/Microsoft.UI.h message(FATAL_ERROR "Windows App SDK library headers generation failed.")
HINTS "${generated_headers_path}")
if(NOT WINAPPSDK_GENERATED_INCLUDE_DIR)
message(FATAL_ERROR "Windows App SDK library headers generation failed")
endif() endif()
else() else()
message(FATAL_ERROR "Windows App SDK library not found") message(FATAL_ERROR "Windows App SDK library not found")