You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
58 lines
1.8 KiB
cmake_minimum_required(VERSION 3.18...3.19)
|
|
|
|
macro(returnOnError errorMsg)
|
|
if(NOT "${errorMsg}" STREQUAL "")
|
|
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}\n${errorMsg}" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
endmacro()
|
|
|
|
function(getTargetFlags mainTarget projFlagsVar flagsVar errorVar)
|
|
# The flags variables in the project file might span over multiple lines
|
|
# so we can't easily read the flags directly from there. Instead, we use
|
|
# the xcodebuild -showBuildSettings option to report it on a single line.
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND}
|
|
--build ${RunCMake_TEST_BINARY_DIR}
|
|
--target ${mainTarget}
|
|
--config Debug
|
|
--
|
|
-showBuildSettings
|
|
COMMAND grep ${projFlagsVar}
|
|
OUTPUT_VARIABLE flagsContents
|
|
RESULT_VARIABLE result
|
|
)
|
|
|
|
if(result)
|
|
set(${errorVar} "Failed to get flags for ${mainTarget}: ${result}" PARENT_SCOPE)
|
|
else()
|
|
unset(${errorVar} PARENT_SCOPE)
|
|
endif()
|
|
set(${flagsVar} "${flagsContents}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(checkFlags projFlagsVar mainTarget present absent)
|
|
getTargetFlags(${mainTarget} ${projFlagsVar} flags errorMsg)
|
|
returnOnError("${errorMsg}")
|
|
|
|
foreach(linkTo IN LISTS present)
|
|
string(REGEX MATCH "${linkTo}" result "${flags}")
|
|
if("${result}" STREQUAL "")
|
|
string(APPEND RunCMake_TEST_FAILED
|
|
"\n${mainTarget} ${projFlagsVar} is missing ${linkTo}"
|
|
)
|
|
endif()
|
|
endforeach()
|
|
|
|
foreach(linkTo IN LISTS absent)
|
|
string(REGEX MATCH "${linkTo}" result "${flags}")
|
|
if(NOT "${result}" STREQUAL "")
|
|
string(APPEND RunCMake_TEST_FAILED
|
|
"\n${mainTarget} ${projFlagsVar} unexpectedly contains ${linkTo}"
|
|
)
|
|
endif()
|
|
endforeach()
|
|
|
|
set(RunCMake_TEST_FAILED ${RunCMake_TEST_FAILED} PARENT_SCOPE)
|
|
endfunction()
|