blob: 497cb18a383b09bb0c386a2cc4acb4692787e9e9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
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)
endfunction()
macro(message level msg)
if("${level}" STREQUAL "FATAL_ERROR")
set_fatal_error("${msg}")
return()
else()
_message("${level}" "${msg}") # note: this results in incorrect printing, but that's fine
# message(STATUS "\${asdf}") will result in
# message(STATUS "${asdf}"), since that's how macro arguments work.
endif()
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)
unset_fatal_error()
set_has_error()
message(STATUS "${utcve_test} had an unexpected FATAL_ERROR;
expected: \"${utcve_value}\"")
message(STATUS "FATAL_ERROR: ${Z_VCPKG_UNIT_TEST_FATAL_ERROR}")
return()
endif()
if(NOT DEFINED "${utcve_variable}")
message(STATUS "${utcve_test} failed to set ${utcve_variable};
expected: \"${utcve_value}\"")
set_has_error()
return()
endif()
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_actual_value}\"")
set_has_error()
return()
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()
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()
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()
if(Z_VCPKG_UNIT_TEST_HAS_ERROR)
_message(FATAL_ERROR "At least one test failed")
endif()
|