Skip to content

Commit

Permalink
[scripts-audit] vcpkg_fail_port_install (microsoft#18054)
Browse files Browse the repository at this point in the history
Note that this change allows existing failures;
it changes MATCHES to STREQUAL, meaning that
vcpkg_fail_port_install(ON_ARCH "arm") now succeeds on arm64;
this change in behavior is fine (IMO) since it strictly succeeds
when it used to fail.
  • Loading branch information
strega-nil authored and Nicole Mazzuca committed May 25, 2021
1 parent 2633e63 commit 588466b
Showing 1 changed file with 34 additions and 35 deletions.
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()

0 comments on commit 588466b

Please sign in to comment.