From f0281bf749f6b7c39418b57a60ae91c5f5d65b0f Mon Sep 17 00:00:00 2001 From: nicole mazzuca Date: Mon, 27 Sep 2021 13:27:44 -0700 Subject: [scripts-audit] vcpkg_fixup_pkgconfig (#19658) * [scripts-audit] vcpkg_fixup_pkgconfig * Neumann-A CR, fix docs * vcpkg_fixup_pkgconfig bugs * fix group * moar fixing * be more clever around pkg_config_path * add `vcpkg_host_path_list` so that we can unit test * move stuff around a bit * fix bug in vcpkg_host_path_list.cmake * ras0219 CRs --- scripts/test_ports/unit-test-cmake/portfile.cmake | 72 +++++- .../test-vcpkg_host_path_list.cmake | 263 +++++++++++++++++++++ scripts/test_ports/unit-test-cmake/vcpkg.json | 3 + 3 files changed, 336 insertions(+), 2 deletions(-) create mode 100644 scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake (limited to 'scripts/test_ports') diff --git a/scripts/test_ports/unit-test-cmake/portfile.cmake b/scripts/test_ports/unit-test-cmake/portfile.cmake index a567c11de..497cb18a3 100644 --- a/scripts/test_ports/unit-test-cmake/portfile.cmake +++ b/scripts/test_ports/unit-test-cmake/portfile.cmake @@ -23,6 +23,56 @@ endmacro() set(Z_VCPKG_UNIT_TEST_HAS_ERROR OFF CACHE BOOL "" FORCE) unset_fatal_error() +# in order to allow namespacing +function(unit_test_match namespace value regex) + if("${value}" MATCHES "${regex}") + set("${namespace}_MATCHED" ON PARENT_SCOPE) + if("${CMAKE_MATCH_COUNT}" EQUAL "0") + return() + endif() + + foreach(match RANGE 1 "${CMAKE_MATCH_COUNT}") + set("${namespace}_CMAKE_MATCH_${match}" "${CMAKE_MATCH_${match}}" PARENT_SCOPE) + endforeach() + else() + set("${namespace}_MATCHED" OFF PARENT_SCOPE) + endif() +endfunction() + +function(unit_test_check_variable_unset utcvu_test utcvu_variable) + cmake_language(EVAL CODE "${utcvu_test}") + if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + unset_fatal_error() + set_has_error() + message(STATUS "${utcvu_test} had an unexpected FATAL_ERROR; + expected: \"${utcvu_value}\"") + message(STATUS "FATAL_ERROR: ${Z_VCPKG_UNIT_TEST_FATAL_ERROR}") + return() + endif() + + unit_test_match(utcvu "${utcvu_variable}" [[^(ENV|CACHE)\{(.*)\}$]]) + if(utcvu_MATCHED) + message(STATUS "utcvu_variable: ${utcvu_CMAKE_MATCH_2}") + if("${utcvu_CMAKE_MATCH_1}" STREQUAL "ENV") + set(utcvu_actual_value "$ENV{${utcvu_CMAKE_MATCH_2}}") + elseif("${utcvu_CMAKE_MATCH_1}" STREQUAL "CACHE") + set(utcvu_actual_value "$CACHE{${utcvu_CMAKE_MATCH_2}}") + else() + _message(FATAL_ERROR "unexpected value for CMAKE_MATCH_1: ${utcvu_CMAKE_MATCH_1}") + endif() + else() + set(utcvu_actual_value "${${utcvu_variable}}") + endif() + + if(DEFINED "${utcvu_variable}") + message(STATUS "${utcvu_test} set ${utcvu_variable}; + expected: \"${utcvu_variable}\" unset + actual : \"${utcvu_actual_value}\"") + set_has_error() + return() + endif() +endfunction() + function(unit_test_check_variable_equal utcve_test utcve_variable utcve_value) cmake_language(EVAL CODE "${utcve_test}") if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) @@ -40,10 +90,25 @@ function(unit_test_check_variable_equal utcve_test utcve_variable utcve_value) set_has_error() return() endif() - if(NOT "${${utcve_variable}}" STREQUAL "${utcve_value}") + + unit_test_match(utcve "${utcve_variable}" [[^(ENV|CACHE)\{(.*)\}$]]) + if(utcve_MATCHED) + message(STATUS "utcve_variable: ${utcve_CMAKE_MATCH_2}") + if("${utcve_CMAKE_MATCH_1}" STREQUAL "ENV") + set(utcve_actual_value "$ENV{${utcve_CMAKE_MATCH_2}}") + elseif("${utcve_CMAKE_MATCH_1}" STREQUAL "CACHE") + set(utcve_actual_value "$CACHE{${utcve_CMAKE_MATCH_2}}") + else() + _message(FATAL_ERROR "unexpected value for CMAKE_MATCH_1: ${utcve_CMAKE_MATCH_1}") + endif() + else() + set(utcve_actual_value "${${utcve_variable}}") + endif() + + if(NOT "${utcve_actual_value}" STREQUAL "${utcve_value}") message(STATUS "${utcve_test} resulted in the wrong value for ${utcve_variable}; expected: \"${utcve_value}\" - actual : \"${${utcve_variable}}\"") + actual : \"${utcve_actual_value}\"") set_has_error() return() endif() @@ -74,6 +139,9 @@ endif() if("list" IN_LIST FEATURES) include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_list.cmake") endif() +if("add-to-path" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_host_path_list.cmake") +endif() if("function-arguments" IN_LIST FEATURES) include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_function_arguments.cmake") endif() diff --git a/scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake b/scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake new file mode 100644 index 000000000..a6322d375 --- /dev/null +++ b/scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake @@ -0,0 +1,263 @@ +# CACHE{var} is a fatal error +unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND CACHE{var})]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND CACHE{var})]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND CACHE{var} c d)]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND CACHE{var} c d)]]) + +# regular variable, HOST_PATH_SEPARATOR = ';' +set(VCPKG_HOST_PATH_SEPARATOR ";") + +unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND var "a;b")]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND var "a;b")]]) + +set(var "a;b") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND var d e)]] + var "a;b;d;e" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND var)]] + var "a;b" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND var d e)]] + var "d;e;a;b" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND var)]] + var "a;b" +) + +set(var "") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND var d e)]] + var "d;e" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND var)]] + var "" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND var d e)]] + var "d;e" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND var)]] + var "" +) + +unset(var) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND var d e)]] + var "d;e" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND var)]] + var "" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND var d e)]] + var "d;e" +) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND var)]] + var "" +) + +# regular variable, HOST_PATH_SEPARATOR = ':' +set(VCPKG_HOST_PATH_SEPARATOR ":") + +unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND var "a:b")]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND var "a:b")]]) + +set(ENV{var} "a:b") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{var} d e)]] + ENV{var} "a:b:d:e" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{var})]] + ENV{var} "a:b" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var} d e)]] + ENV{var} "d:e:a:b" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{var} "a:b" +) + +set(ENV{var} "") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{var} d e)]] + ENV{var} "d:e" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{var})]] + ENV{var} "" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var} d e)]] + ENV{var} "d:e" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{var} "" +) + +unset(ENV{var}) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{var} d e)]] + ENV{var} "d:e" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{var})]] + ENV{var} "" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var} d e)]] + ENV{var} "d:e" +) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{var} "" +) + +# environment ENV{var}iable, HOST_PATH_SEPARATOR = ';' +set(VCPKG_HOST_PATH_SEPARATOR ";") + +unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND ENV{ENV{var}} "a;b")]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND ENV{ENV{var}} "a;b")]]) + +set(ENV{ENV{var}} "a;b") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{ENV{var}} d e)]] + ENV{ENV{var}} "a;b;d;e" +) +set(ENV{ENV{var}} "a;b") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{ENV{var}})]] + ENV{ENV{var}} "a;b" +) +set(ENV{ENV{var}} "a;b") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{ENV{var}} d e)]] + ENV{ENV{var}} "d;e;a;b" +) +set(ENV{ENV{var}} "a;b") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{ENV{var}})]] + ENV{ENV{var}} "a;b" +) + +set(ENV{ENV{var}} "") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{ENV{var}} d e)]] + ENV{ENV{var}} "d;e" +) +set(ENV{ENV{var}} "") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{ENV{var}})]] + ENV{ENV{var}} "" +) +set(ENV{ENV{var}} "") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{ENV{var}} d e)]] + ENV{ENV{var}} "d;e" +) +set(ENV{ENV{var}} "") +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{ENV{var}} "" +) + +unset(ENV{ENV{var}}) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{ENV{var}} d e)]] + ENV{ENV{var}} "d;e" +) +unset(ENV{ENV{var}}) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(APPEND ENV{ENV{var}})]] + ENV{ENV{var}} "" +) +unset(ENV{ENV{var}}) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{ENV{var}} d e)]] + ENV{ENV{var}} "d;e" +) +unset(ENV{ENV{var}}) +unit_test_check_ENV{var}iable_equal( + [[vcpkg_host_path_list(PREPEND ENV{ENV{var}})]] + ENV{ENV{var}} "" +) + +# regular ENV{var}iable, HOST_PATH_SEPARATOR = ':' +set(VCPKG_HOST_PATH_SEPARATOR ":") + +unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND ENV{var} "a:b")]]) +unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND ENV{var} "a:b")]]) + +set(ENV{var} "a:b") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND ENV{var} d e)]] + ENV{var} "a:b:d:e" +) +set(ENV{var} "a:b") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND ENV{var})]] + ENV{var} "a:b" +) +set(ENV{var} "a:b") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var} d e)]] + ENV{var} "d:e:a:b" +) +set(ENV{var} "a:b") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{var} "a:b" +) + +set(ENV{var} "") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND ENV{var} d e)]] + ENV{var} "d:e" +) +set(ENV{var} "") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND ENV{var})]] + ENV{var} "" +) +set(ENV{var} "") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var} d e)]] + ENV{var} "d:e" +) +set(ENV{var} "") +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{var} "" +) + +unset(ENV{var}) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND ENV{var} d e)]] + ENV{var} "d:e" +) +unset(ENV{var}) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(APPEND ENV{var})]] + ENV{var} "" +) +unset(ENV{var}) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var} d e)]] + ENV{var} "d:e" +) +unset(ENV{var}) +unit_test_check_variable_equal( + [[vcpkg_host_path_list(PREPEND ENV{var})]] + ENV{var} "" +) diff --git a/scripts/test_ports/unit-test-cmake/vcpkg.json b/scripts/test_ports/unit-test-cmake/vcpkg.json index c20cf2c6c..366d1d7a9 100644 --- a/scripts/test_ports/unit-test-cmake/vcpkg.json +++ b/scripts/test_ports/unit-test-cmake/vcpkg.json @@ -9,6 +9,9 @@ "minimum-required" ], "features": { + "host-path-list": { + "description": "Test the vcpkg_host_path_list function" + }, "function-arguments": { "description": "Test the z_vcpkg_function_arguments function" }, -- cgit v1.2.3