aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authornicole mazzuca <mazzucan@outlook.com>2021-07-30 12:57:07 -0700
committerGitHub <noreply@github.com>2021-07-30 12:57:07 -0700
commita5a70c7c3eadcc8a48b5f513b0ec361e40a5aeca (patch)
treec566f37f8dba7c0fa032bb1da97ed0d51a11a91b /scripts
parentfa1bbe097b26678e3fd992173b62279c071c422b (diff)
downloadvcpkg-a5a70c7c3eadcc8a48b5f513b0ec361e40a5aeca.tar.gz
vcpkg-a5a70c7c3eadcc8a48b5f513b0ec361e40a5aeca.zip
[vcpkg_minimum_required] fix, add unit tests (#19257)
* fix vcpkg_minimum_required drive-by scripts audit * initial unit tests * finish unit tests
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/vcpkg_minimum_required.cmake23
-rw-r--r--scripts/test_ports/unit-test-cmake/portfile.cmake30
-rw-r--r--scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake49
-rw-r--r--scripts/test_ports/unit-test-cmake/vcpkg.json6
4 files changed, 86 insertions, 22 deletions
diff --git a/scripts/cmake/vcpkg_minimum_required.cmake b/scripts/cmake/vcpkg_minimum_required.cmake
index 44777875e..a8f3a1265 100644
--- a/scripts/cmake/vcpkg_minimum_required.cmake
+++ b/scripts/cmake/vcpkg_minimum_required.cmake
@@ -15,31 +15,32 @@ The date-version to check against.
function(vcpkg_minimum_required)
cmake_parse_arguments(PARSE_ARGV 0 arg "" "VERSION" "")
- if (NOT DEFINED VCPKG_BASE_VERSION)
- message(FATAL_ERROR
- "Your vcpkg executable is outdated and is not compatible with the current CMake scripts. "
- "Please re-acquire vcpkg by running bootstrap-vcpkg."
+ if(NOT DEFINED VCPKG_BASE_VERSION)
+ message(FATAL_ERROR "Your vcpkg executable is outdated and is not compatible with the current CMake scripts.
+ Please re-acquire vcpkg by running bootstrap-vcpkg."
)
endif()
+ if(NOT DEFINED arg_VERSION)
+ message(FATAL_ERROR "VERSION must be specified")
+ endif()
set(vcpkg_date_regex "^[12][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]$")
- if (NOT VCPKG_BASE_VERSION MATCHES "${vcpkg_date_regex}")
+ if(NOT "${VCPKG_BASE_VERSION}" MATCHES "${vcpkg_date_regex}")
message(FATAL_ERROR
"vcpkg internal failure; VCPKG_BASE_VERSION (${VCPKG_BASE_VERSION}) was not a valid date."
- )
+ )
endif()
- if (NOT arg_VERSION MATCHES "${vcpkg_date_regex}")
+ if(NOT "${arg_VERSION}" MATCHES "${vcpkg_date_regex}")
message(FATAL_ERROR
- "VERSION parameter to vcpkg_minimum_required was not a valid date. "
- "Comparing with vcpkg tool version ${VCPKG_BASE_VERSION}"
- )
+ "VERSION (${arg_VERSION}) was not a valid date - expected something of the form 'YYYY-MM-DD'"
+ )
endif()
string(REPLACE "-" "." VCPKG_BASE_VERSION_as_dotted "${VCPKG_BASE_VERSION}")
string(REPLACE "-" "." arg_VERSION_as_dotted "${arg_VERSION}")
- if (VCPKG_BASE_VERSION_as_dotted VERSION_LESS vcpkg_VERSION_as_dotted)
+ if("${VCPKG_BASE_VERSION_as_dotted}" VERSION_LESS "${arg_VERSION_as_dotted}")
message(FATAL_ERROR
"Your vcpkg executable is from ${VCPKG_BASE_VERSION} which is older than required by the caller "
"of vcpkg_minimum_required(VERSION ${arg_VERSION}). "
diff --git a/scripts/test_ports/unit-test-cmake/portfile.cmake b/scripts/test_ports/unit-test-cmake/portfile.cmake
index 638b15974..a567c11de 100644
--- a/scripts/test_ports/unit-test-cmake/portfile.cmake
+++ b/scripts/test_ports/unit-test-cmake/portfile.cmake
@@ -1,10 +1,9 @@
-function(set_fatal_error)
- if(ARGC EQUAL 0)
- set(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR "OFF" CACHE BOOL "" FORCE)
- else()
- set(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR "ON" CACHE BOOL "" FORCE)
- set(Z_VCPKG_UNIT_TEST_FATAL_ERROR "${ARGV0}" CACHE STRING "" FORCE)
- endif()
+function(set_fatal_error err)
+ set(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR "ON" CACHE BOOL "" FORCE)
+ set(Z_VCPKG_UNIT_TEST_FATAL_ERROR "${err}" CACHE STRING "" FORCE)
+endfunction()
+function(unset_fatal_error)
+ set(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR "OFF" CACHE BOOL "" FORCE)
endfunction()
function(set_has_error)
set(Z_VCPKG_UNIT_TEST_HAS_ERROR ON CACHE BOOL "" FORCE)
@@ -22,12 +21,12 @@ macro(message level msg)
endmacro()
set(Z_VCPKG_UNIT_TEST_HAS_ERROR OFF CACHE BOOL "" FORCE)
-set_fatal_error()
+unset_fatal_error()
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)
- set_fatal_error()
+ unset_fatal_error()
set_has_error()
message(STATUS "${utcve_test} had an unexpected FATAL_ERROR;
expected: \"${utcve_value}\"")
@@ -50,17 +49,28 @@ function(unit_test_check_variable_equal utcve_test utcve_variable utcve_value)
endif()
endfunction()
+function(unit_test_ensure_success utcve_test)
+ cmake_language(EVAL CODE "${utcve_test}")
+ if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR)
+ set_has_error()
+ message(STATUS "${utcve_test} was expected to be successful.")
+ endif()
+ unset_fatal_error()
+endfunction()
function(unit_test_ensure_fatal_error utcve_test)
cmake_language(EVAL CODE "${utcve_test}")
if(NOT Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR)
set_has_error()
message(STATUS "${utcve_test} was expected to be a FATAL_ERROR.")
endif()
- set_fatal_error()
+ unset_fatal_error()
endfunction()
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+if("minimum-required" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_minimum_required.cmake")
+endif()
if("list" IN_LIST FEATURES)
include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_list.cmake")
endif()
diff --git a/scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake b/scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake
new file mode 100644
index 000000000..93bfbcfaa
--- /dev/null
+++ b/scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake
@@ -0,0 +1,49 @@
+# -- error cases --
+# VCPKG_BASE_VERSION not set - vcpkg version is too old
+set(VCPKG_BASE_VERSION_backup "${VCPKG_BASE_VERSION}")
+unset(VCPKG_BASE_VERSION)
+unset(VCPKG_BASE_VERSION CACHE)
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-01-01)]])
+unit_test_ensure_fatal_error([[vcpkg_minimum_required()]])
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "")]])
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "2021.01.01")]])
+
+set(VCPKG_BASE_VERSION 2021-02-02)
+
+# VERSION not passed
+unit_test_ensure_fatal_error([[vcpkg_minimum_required()]])
+# VERSION weird - empty
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "")]])
+# VERSION weird - dotted
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021.01.01)]])
+# VERSION weird - not a valid year
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 3000-01-01)]])
+# VERSION weird - list
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "2021-01-01;2021-01-02")]])
+# VERSION weird - small year
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 21-01-01)]])
+# VERSION weird - small month
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-1-01)]])
+# VERSION weird - small day
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-01-1)]])
+# VERSION too-new - later year, earlier month, earlier day
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2022-01-01)]])
+# VERSION too-new - same year, later month, earlier day
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-03-01)]])
+# VERSION too-new - same year, same month, later day
+unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-02-03)]])
+
+# -- successes --
+# same date
+unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2021-02-02)]])
+
+# VERSION old - earlier year, later month, later day
+unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2020-03-03)]])
+# VERSION old - same year, earlier month, later day
+unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2021-01-03)]])
+# VERSION old - same year, same month, earlier day
+unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2021-02-01)]])
+
+# reset to backup
+unset(VCPKG_BASE_VERSION)
+set(VCPKG_BASE_VERSION "${VCPKG_BASE_VERSION_backup}" CACHE STRING "")
diff --git a/scripts/test_ports/unit-test-cmake/vcpkg.json b/scripts/test_ports/unit-test-cmake/vcpkg.json
index 5079f9e73..c20cf2c6c 100644
--- a/scripts/test_ports/unit-test-cmake/vcpkg.json
+++ b/scripts/test_ports/unit-test-cmake/vcpkg.json
@@ -5,7 +5,8 @@
"supports": "x64",
"default-features": [
"function-arguments",
- "list"
+ "list",
+ "minimum-required"
],
"features": {
"function-arguments": {
@@ -13,6 +14,9 @@
},
"list": {
"description": "Test the vcpkg_list function"
+ },
+ "minimum-required": {
+ "description": "Test the vcpkg_minimum_required function"
}
}
}