Skip to content

Commit 5b7548b

Browse files
committed
tests: Check specifying FunctionsOnly component works as expected
1 parent 6b3a829 commit 5b7548b

File tree

1 file changed

+78
-29
lines changed

1 file changed

+78
-29
lines changed

tests/CMakeLists.txt

Lines changed: 78 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ list(INSERT CMAKE_MODULE_PATH 0 "@FindVcvars_MODULE_PATH@")
2929

3030
# Check expected defined variables
3131
set(expected_vars
32+
FIND_VCVARS_COMPONENTS
3233
EXPECTED_MSVC_ARCH
3334
EXPECTED_MSVC_VERSION
3435
EXPECTED_BATCH_FILENAME
@@ -40,10 +41,16 @@ foreach(var_name IN LISTS expected_vars)
4041
endif()
4142
endforeach()
4243

44+
if("FunctionsOnly" IN_LIST FIND_VCVARS_COMPONENTS)
45+
set(FUNCTIONS_ONLY_COMPONENT_REQUESTED TRUE)
46+
else()
47+
set(FUNCTIONS_ONLY_COMPONENT_REQUESTED FALSE)
48+
endif()
49+
4350
# Set Vcvars_<varname> based of REQUESTED_<varname>
4451
set(requested_vars)
4552

46-
if(DEFINED REQUESTED_MSVC_ARCH)
53+
if(DEFINED REQUESTED_MSVC_ARCH AND NOT FUNCTIONS_ONLY_COMPONENT_REQUESTED)
4754
if(REQUESTED_MSVC_ARCH STREQUAL "64")
4855
set(CMAKE_SIZEOF_VOID_P 8)
4956
elseif(REQUESTED_MSVC_ARCH STREQUAL "32")
@@ -54,7 +61,7 @@ if(DEFINED REQUESTED_MSVC_ARCH)
5461
list(APPEND requested_vars REQUESTED_MSVC_ARCH)
5562
endif()
5663

57-
if(DEFINED REQUESTED_MSVC_VERSION)
64+
if(DEFINED REQUESTED_MSVC_VERSION AND NOT FUNCTIONS_ONLY_COMPONENT_REQUESTED)
5865
set(Vcvars_MSVC_VERSION ${REQUESTED_MSVC_VERSION})
5966
list(APPEND requested_vars REQUESTED_MSVC_VERSION)
6067
endif()
@@ -78,16 +85,32 @@ endforeach()
7885

7986
message(STATUS "")
8087

81-
find_package(Vcvars REQUIRED)
88+
if(FUNCTIONS_ONLY_COMPONENT_REQUESTED)
89+
find_package(Vcvars COMPONENTS FunctionsOnly REQUIRED)
90+
else()
91+
find_package(Vcvars ${components_arg} REQUIRED)
92+
endif()
8293

8394
message(STATUS "")
8495

96+
function(check_function_defined func_name)
97+
if(NOT COMMAND "${func_name}")
98+
message(FATAL_ERROR "Function ${func_name} is not defined in the calling scope")
99+
endif()
100+
endfunction()
101+
85102
function(check_var_defined var_name)
86-
if(NOT DEFINED ${var_name})
103+
if(NOT DEFINED "${var_name}")
87104
message(FATAL_ERROR "Variable ${var_name} is not defined in the calling scope")
88105
endif()
89106
endfunction()
90107

108+
function(check_var_not_defined var_name)
109+
if(DEFINED "${var_name}")
110+
message(FATAL_ERROR "Variable ${var_name} is defined in the calling scope")
111+
endif()
112+
endfunction()
113+
91114
function(check_var_equals var_name expected_value)
92115
check_var_defined(${var_name})
93116

@@ -130,14 +153,26 @@ endforeach()
130153
# Check output values
131154
message(STATUS "")
132155

133-
check_var_equals("Vcvars_MSVC_ARCH" "${EXPECTED_MSVC_ARCH}")
134-
check_var_equals("Vcvars_MSVC_VERSION" "${EXPECTED_MSVC_VERSION}")
156+
check_var_equals("Vcvars_FOUND" "TRUE")
157+
158+
check_function_defined("Vcvars_ConvertMsvcVersionToVsVersion")
159+
check_function_defined("Vcvars_GetVisualStudioPaths")
135160

136-
check_file_exists("Vcvars_BATCH_FILE")
137-
check_filename_matches("Vcvars_BATCH_FILE" "${EXPECTED_BATCH_FILENAME}")
161+
if(FUNCTIONS_ONLY_COMPONENT_REQUESTED)
162+
check_var_not_defined("Vcvars_MSVC_ARCH")
163+
check_var_not_defined("Vcvars_MSVC_VERSION")
164+
check_var_not_defined("Vcvars_LAUNCHER")
165+
check_var_not_defined("Vcvars_LAUNCHER")
166+
else()
167+
check_var_equals("Vcvars_MSVC_ARCH" "${EXPECTED_MSVC_ARCH}")
168+
check_var_equals("Vcvars_MSVC_VERSION" "${EXPECTED_MSVC_VERSION}")
138169

139-
check_file_exists("Vcvars_LAUNCHER")
140-
check_filename_matches("Vcvars_LAUNCHER" "${EXPECTED_LAUNCHER_FILENAME}")
170+
check_file_exists("Vcvars_BATCH_FILE")
171+
check_filename_matches("Vcvars_BATCH_FILE" "${EXPECTED_BATCH_FILENAME}")
172+
173+
check_file_exists("Vcvars_LAUNCHER")
174+
check_filename_matches("Vcvars_LAUNCHER" "${EXPECTED_LAUNCHER_FILENAME}")
175+
endif()
141176
]==]
142177
)
143178

@@ -169,25 +204,39 @@ function(add_find_vcvars_test)
169204
"${options}" "${oneValueArgs}" "${multiValueArgs}"
170205
)
171206

172-
# script-mode
173-
add_test(
174-
NAME "script-mode-${arg_NAME}"
175-
COMMAND ${CMAKE_COMMAND} ${arg_OPTIONS} -P ${script_mode_script}
176-
)
177-
178-
# project-mode
179-
set(src_dir "${project_mode_src_dir}")
180-
set(bld_dir "${project_mode_src_dir}-${arg_NAME}-build")
181-
add_test(
182-
NAME "project-mode-${arg_NAME}"
183-
COMMAND ${CMAKE_COMMAND} ${arg_OPTIONS} -S ${src_dir} -B ${bld_dir}
184-
)
185-
set_tests_properties("project-mode-${arg_NAME}" PROPERTIES FIXTURES_REQUIRED "fixture-${arg_NAME}")
186-
add_test(
187-
NAME "project-mode-${arg_NAME}-setup"
188-
COMMAND ${CMAKE_COMMAND} -E rm -rf ${bld_dir}
189-
)
190-
set_tests_properties("project-mode-${arg_NAME}-setup" PROPERTIES FIXTURES_SETUP "fixture-${arg_NAME}")
207+
function(_add_find_vcvars_test component)
208+
if(component)
209+
set(test_name_suffix "${component}-${arg_NAME}")
210+
else()
211+
set(test_name_suffix "${arg_NAME}")
212+
endif()
213+
list(APPEND arg_OPTIONS
214+
-DFIND_VCVARS_COMPONENTS=${component}
215+
)
216+
217+
# script-mode
218+
add_test(
219+
NAME "script-mode-${test_name_suffix}"
220+
COMMAND ${CMAKE_COMMAND} ${arg_OPTIONS} -P ${script_mode_script}
221+
)
222+
223+
# project-mode
224+
set(src_dir "${project_mode_src_dir}")
225+
set(bld_dir "${project_mode_src_dir}-${test_name_suffix}-build")
226+
add_test(
227+
NAME "project-mode-${test_name_suffix}"
228+
COMMAND ${CMAKE_COMMAND} ${arg_OPTIONS} -S ${src_dir} -B ${bld_dir}
229+
)
230+
set_tests_properties("project-mode-${test_name_suffix}" PROPERTIES FIXTURES_REQUIRED "fixture-${test_name_suffix}")
231+
add_test(
232+
NAME "project-mode-${test_name_suffix}-setup"
233+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${bld_dir}
234+
)
235+
set_tests_properties("project-mode${suffix}-${test_name_suffix}-setup" PROPERTIES FIXTURES_SETUP "fixture-${test_name_suffix}")
236+
endfunction()
237+
238+
_add_find_vcvars_test("")
239+
_add_find_vcvars_test("FunctionsOnly")
191240
endfunction()
192241

193242
add_find_vcvars_test(

0 commit comments

Comments
 (0)