CMake: Refactor _qt_internal_get_apple_sdk_version

Introduce two new functions _qt_internal_get_apple_xcrun_output
and _qt_internal_get_apple_sdk_name, to allow reusing them in the
future.

Make sure to set the output variables to empty even
outside Apple platforms.

Show an error when xcrun is called when targeting a non-Apple
platform.

Pick-to: 6.8 6.9
Change-Id: Ic3895f74cfcac337bff069f8e6ec1517aec6c8d0
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Alexandru Croitor 2025-04-08 17:44:06 +02:00
parent 87f4f0af6e
commit c0f0a275b3

View File

@ -811,7 +811,8 @@ endif()")
set(${out_var} "${assignments}" PARENT_SCOPE)
endfunction()
function(_qt_internal_get_apple_sdk_version out_var)
function(_qt_internal_get_apple_sdk_name out_var)
set(sdk_name "")
if(APPLE)
if(CMAKE_SYSTEM_NAME STREQUAL iOS)
set(sdk_name "iphoneos")
@ -821,28 +822,74 @@ function(_qt_internal_get_apple_sdk_version out_var)
# Default to macOS
set(sdk_name "macosx")
endif()
set(xcrun_version_arg "--show-sdk-version")
execute_process(COMMAND xcrun --sdk ${sdk_name} ${xcrun_version_arg}
OUTPUT_VARIABLE sdk_version
ERROR_VARIABLE xcrun_error)
endif()
set(${out_var} "${sdk_name}" PARENT_SCOPE)
endfunction()
function(_qt_internal_execute_xcrun out_var)
set(opt_args "")
set(single_args "")
set(multi_args
XCRUN_ARGS
OUT_ERROR_VAR
)
cmake_parse_arguments(PARSE_ARGV 1 arg "${opt_args}" "${single_args}" "${multi_args}")
set(output "")
set(xcrun_error "")
if(NOT APPLE)
message(FATAL_ERROR
"Executing xcrun should only happen happen when targeting Apple plaforms")
endif()
find_program(QT_XCRUN xcrun)
if(NOT QT_XCRUN)
message(FATAL_ERROR "Can't find xcrun in PATH")
endif()
execute_process(COMMAND "${QT_XCRUN}" ${arg_XCRUN_ARGS}
OUTPUT_VARIABLE output
ERROR_VARIABLE xcrun_error)
if(arg_OUT_ERROR_VAR)
set(${arg_OUT_ERROR_VAR} "${xcrun_error}" PARENT_SCOPE)
endif()
set(${out_var} "${output}" PARENT_SCOPE)
endfunction()
function(_qt_internal_get_apple_sdk_version out_var)
set(sdk_version "")
if(APPLE)
_qt_internal_get_apple_sdk_name(sdk_name)
_qt_internal_execute_xcrun(sdk_version
XCRUN_ARGS --sdk ${sdk_name} --show-sdk-version
OUT_ERROR_VAR xcrun_error
)
if(NOT sdk_version)
message(FATAL_ERROR
"Can't determine darwin ${sdk_name} SDK version. Error: ${xcrun_error}")
endif()
string(STRIP "${sdk_version}" sdk_version)
set(${out_var} "${sdk_version}" PARENT_SCOPE)
endif()
set(${out_var} "${sdk_version}" PARENT_SCOPE)
endfunction()
function(_qt_internal_get_xcode_version_raw out_var)
set(xcode_version "")
if(APPLE)
execute_process(COMMAND xcrun xcodebuild -version
OUTPUT_VARIABLE xcode_version
ERROR_VARIABLE xcrun_error)
_qt_internal_execute_xcrun(xcode_version
XCRUN_ARGS xcodebuild -version
OUT_ERROR_VAR xcrun_error
)
string(REPLACE "\n" " " xcode_version "${xcode_version}")
string(STRIP "${xcode_version}" xcode_version)
set(${out_var} "${xcode_version}" PARENT_SCOPE)
endif()
set(${out_var} "${xcode_version}" PARENT_SCOPE)
endfunction()
function(_qt_internal_get_xcode_version out_var)