Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[scripts-audit] vcpkg_fail_port_install #18054

Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 34 additions & 35 deletions scripts/cmake/vcpkg_fail_port_install.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -40,60 +40,59 @@ Library linkage for which the build should fail early.
#]===]

function(vcpkg_fail_port_install)
# parse parameters such that semicolons in options arguments to COMMAND don't get erased
cmake_parse_arguments(PARSE_ARGV 0 _csc "ALWAYS" "MESSAGE" "ON_TARGET;ON_ARCH;ON_CRT_LINKAGE;ON_LIBRARY_LINKAGE")
if(DEFINED _csc_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown arguments passed to vcpkg_fail_port_install. Please correct the portfile!")
cmake_parse_arguments(PARSE_ARGV 0 "arg" "ALWAYS" "MESSAGE" "ON_TARGET;ON_ARCH;ON_CRT_LINKAGE;ON_LIBRARY_LINKAGE")
if(DEFINED arg_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "vcpkg_fail_port_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
endif()
if(DEFINED _csc_MESSAGE)
set(_csc_MESSAGE "${_csc_MESSAGE}\n")
if(DEFINED arg_MESSAGE)
string(APPEND arg_MESSAGE "\n")
else()
set(_csc_MESSAGE "")
set(arg_MESSAGE "")
endif()

unset(_fail_port)
#Target fail check
if(DEFINED _csc_ON_TARGET)
foreach(_target ${_csc_ON_TARGET})
string(TOUPPER ${_target} _target_upper)
if(VCPKG_TARGET_IS_${_target_upper})
set(_fail_port TRUE)
set(_csc_MESSAGE "${_csc_MESSAGE}Target '${_target}' not supported by ${PORT}!\n")
set(fail_port)
# Target fail check
if(DEFINED arg_ON_TARGET)
foreach(target IN LISTS arg_ON_TARGET)
string(TOUPPER "${target}" target_upper)
if(VCPKG_TARGET_IS_${target_upper})
set(fail_port TRUE)
string(APPEND arg_MESSAGE "Target '${target}' not supported by ${PORT}!\n")
endif()
endforeach()
endif()

#Architecture fail check
if(DEFINED _csc_ON_ARCH)
foreach(_arch ${_csc_ON_ARCH})
if(${VCPKG_TARGET_ARCHITECTURE} MATCHES ${_arch})
set(_fail_port TRUE)
set(_csc_MESSAGE "${_csc_MESSAGE}Architecture '${_arch}' not supported by ${PORT}!\n")
# Architecture fail check
if(DEFINED arg_ON_ARCH)
foreach(arch IN LISTS arg_ON_ARCH)
if(VCPKG_TARGET_ARCHITECTURE STREQUAL arch)
set(fail_port TRUE)
string(APPEND arg_MESSAGE "Architecture '${arch}' not supported by ${PORT}!\n")
endif()
endforeach()
endif()

#CRT linkage fail check
if(DEFINED _csc_ON_CRT_LINKAGE)
foreach(_crt_link ${_csc_ON_CRT_LINKAGE})
if("${VCPKG_CRT_LINKAGE}" MATCHES "${_crt_link}")
set(_fail_port TRUE)
set(_csc_MESSAGE "${_csc_MESSAGE}CRT linkage '${VCPKG_CRT_LINKAGE}' not supported by ${PORT}!\n")
# CRT linkage fail check
if(DEFINED arg_ON_CRT_LINKAGE)
foreach(crt_linkage IN LISTS arg_ON_CRT_LINKAGE)
if(VCPKG_CRT_LINKAGE STREQUAL crt_linkage)
set(fail_port TRUE)
string(APPEND arg_MESSAGE "CRT linkage '${VCPKG_CRT_LINKAGE}' not supported by ${PORT}!\n")
endif()
endforeach()
endif()

#Library linkage fail check
if(DEFINED _csc_ON_LIBRARY_LINKAGE)
foreach(_lib_link ${_csc_ON_LIBRARY_LINKAGE})
if("${VCPKG_LIBRARY_LINKAGE}" MATCHES "${_lib_link}")
set(_fail_port TRUE)
set(_csc_MESSAGE "${_csc_MESSAGE}Library linkage '${VCPKG_LIBRARY_LINKAGE}' not supported by ${PORT}!\n")
# Library linkage fail check
if(DEFINED arg_ON_LIBRARY_LINKAGE)
foreach(library_linkage IN LISTS arg_ON_LIBRARY_LINKAGE)
if(VCPKG_LIBRARY_LINKAGE STREQUAL library_linkage)
set(fail_port TRUE)
string(APPEND arg_MESSAGE "Library linkage '${VCPKG_LIBRARY_LINKAGE}' not supported by ${PORT}!\n")
endif()
endforeach()
endif()

if(_fail_port OR _csc_ALWAYS)
message(FATAL_ERROR ${_csc_MESSAGE})
if(fail_port OR arg_ALWAYS)
message(FATAL_ERROR ${arg_MESSAGE})
endif()
endfunction()