fix regression in vcpkg_find_acquire_program and require exact version match for meson (#21341)

This commit is contained in:
Alexander Neumann 2021-11-12 20:52:32 +01:00 committed by GitHub
parent 897ff9372f
commit 356918c4c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -49,7 +49,7 @@ Note that msys2 has a dedicated helper function: [`vcpkg_acquire_msys`](vcpkg_ac
function(z_vcpkg_find_acquire_program_version_check out_var) function(z_vcpkg_find_acquire_program_version_check out_var)
cmake_parse_arguments(PARSE_ARGV 1 arg cmake_parse_arguments(PARSE_ARGV 1 arg
"" "EXACT_VERSION_MATCH"
"MIN_VERSION;PROGRAM_NAME" "MIN_VERSION;PROGRAM_NAME"
"COMMAND" "COMMAND"
) )
@ -60,8 +60,14 @@ function(z_vcpkg_find_acquire_program_version_check out_var)
) )
string(STRIP "${program_version_output}" program_version_output) string(STRIP "${program_version_output}" program_version_output)
#TODO: REGEX MATCH case for more complex cases! #TODO: REGEX MATCH case for more complex cases!
if(NOT "${program_version_output}" VERSION_GREATER_EQUAL "${arg_MIN_VERSION}") set(version_compare VERSION_GREATER_EQUAL)
message(STATUS "Found ${arg_PROGRAM_NAME}('${program_version_output}') but at least version ${arg_MIN_VERSION} is required! Trying to use internal version if possible!") set(version_compare_msg "at least")
if(arg_EXACT_VERSION_MATCH)
set(version_compare VERSION_EQUAL)
set(version_compare_msg "exact")
endif()
if(NOT "${program_version_output}" ${version_compare} "${arg_MIN_VERSION}")
message(STATUS "Found ${arg_PROGRAM_NAME}('${program_version_output}') but ${version_compare_msg} version ${arg_MIN_VERSION} is required! Trying to use internal version if possible!")
set("${out_var}" OFF PARENT_SCOPE) set("${out_var}" OFF PARENT_SCOPE)
else() else()
message(STATUS "Found external ${arg_PROGRAM_NAME}('${program_version_output}').") message(STATUS "Found external ${arg_PROGRAM_NAME}('${program_version_output}').")
@ -71,10 +77,13 @@ endfunction()
function(z_vcpkg_find_acquire_program_find_external program) function(z_vcpkg_find_acquire_program_find_external program)
cmake_parse_arguments(PARSE_ARGV 1 arg cmake_parse_arguments(PARSE_ARGV 1 arg
"" "EXACT_VERSION_MATCH"
"INTERPRETER;MIN_VERSION;PROGRAM_NAME" "INTERPRETER;MIN_VERSION;PROGRAM_NAME"
"NAMES;VERSION_COMMAND" "NAMES;VERSION_COMMAND"
) )
if(arg_EXACT_VERSION_MATCH)
set(arg_EXACT_VERSION_MATCH EXACT_VERSION_MATCH)
endif()
if("${arg_INTERPRETER}" STREQUAL "") if("${arg_INTERPRETER}" STREQUAL "")
find_program("${program}" NAMES ${arg_NAMES}) find_program("${program}" NAMES ${arg_NAMES})
@ -84,12 +93,14 @@ function(z_vcpkg_find_acquire_program_find_external program)
vcpkg_list(SET program_tmp ${${interpreter}} ${SCRIPT_${program}}) vcpkg_list(SET program_tmp ${${interpreter}} ${SCRIPT_${program}})
set("${program}" "${program_tmp}" CACHE INTERNAL "") set("${program}" "${program_tmp}" CACHE INTERNAL "")
endif() endif()
unset(SCRIPT_${program} CACHE)
endif() endif()
if("${version_command}" STREQUAL "") if("${version_command}" STREQUAL "")
set(version_is_good ON) # can't check for the version being good, so assume it is set(version_is_good ON) # can't check for the version being good, so assume it is
else() else()
z_vcpkg_find_acquire_program_version_check(version_is_good z_vcpkg_find_acquire_program_version_check(version_is_good
${arg_EXACT_VERSION_MATCH}
COMMAND ${${program}} ${arg_VERSION_COMMAND} COMMAND ${${program}} ${arg_VERSION_COMMAND}
MIN_VERSION "${arg_MIN_VERSION}" MIN_VERSION "${arg_MIN_VERSION}"
PROGRAM_NAME "${arg_PROGRAM_NAME}" PROGRAM_NAME "${arg_PROGRAM_NAME}"
@ -98,7 +109,7 @@ function(z_vcpkg_find_acquire_program_find_external program)
if(NOT version_is_good) if(NOT version_is_good)
unset("${program}" PARENT_SCOPE) unset("${program}" PARENT_SCOPE)
set("${program}" "${program}-NOTFOUND" CACHE INTERNAL "") unset("${program}" CACHE)
endif() endif()
endfunction() endfunction()
@ -122,6 +133,7 @@ function(z_vcpkg_find_acquire_program_find_internal program)
if(SCRIPT_${program}) if(SCRIPT_${program})
set("${program}" ${${arg_INTERPRETER}} ${SCRIPT_${program}} CACHE INTERNAL "") set("${program}" ${${arg_INTERPRETER}} ${SCRIPT_${program}} CACHE INTERNAL "")
endif() endif()
unset(SCRIPT_${program} CACHE)
endif() endif()
endfunction() endfunction()
@ -352,6 +364,7 @@ function(vcpkg_find_acquire_program program)
set(download_sha512 18a012a45274dbb4582e99fd69d920f38831e788d9860f9553c64847bedb1c2010ae0b5c0ef4a4350c03f5e0f95aaa0395378e1208109b59640c1a70b1e202d2) set(download_sha512 18a012a45274dbb4582e99fd69d920f38831e788d9860f9553c64847bedb1c2010ae0b5c0ef4a4350c03f5e0f95aaa0395378e1208109b59640c1a70b1e202d2)
set(supported_on_unix ON) set(supported_on_unix ON)
set(version_command --version) set(version_command --version)
set(extra_search_args EXACT_VERSION_MATCH)
elseif(program STREQUAL "FLEX" OR program STREQUAL "BISON") elseif(program STREQUAL "FLEX" OR program STREQUAL "BISON")
if(CMAKE_HOST_WIN32) if(CMAKE_HOST_WIN32)
vcpkg_list(SET sourceforge_args vcpkg_list(SET sourceforge_args
@ -577,6 +590,7 @@ function(vcpkg_find_acquire_program program)
) )
if(NOT ${program}) if(NOT ${program})
z_vcpkg_find_acquire_program_find_external("${program}" z_vcpkg_find_acquire_program_find_external("${program}"
${extra_search_args}
PROGRAM_NAME "${program_name}" PROGRAM_NAME "${program_name}"
MIN_VERSION "${program_version}" MIN_VERSION "${program_version}"
INTERPRETER "${interpreter}" INTERPRETER "${interpreter}"
@ -665,6 +679,7 @@ function(vcpkg_find_acquire_program program)
LOGNAME "${program}-tool-post-install" LOGNAME "${program}-tool-post-install"
) )
endif() endif()
unset("${program}")
unset("${program}" CACHE) unset("${program}" CACHE)
z_vcpkg_find_acquire_program_find_internal("${program}" z_vcpkg_find_acquire_program_find_internal("${program}"
INTERPRETER "${interpreter}" INTERPRETER "${interpreter}"