@@ -29,6 +29,7 @@ list(INSERT CMAKE_MODULE_PATH 0 "@FindVcvars_MODULE_PATH@")
2929
3030# Check expected defined variables
3131set(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()
4142endforeach()
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>
4451set(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)
5562endif()
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)
6067endif()
@@ -78,16 +85,32 @@ endforeach()
7885
7986message(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
8394message(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+
85102function(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()
89106endfunction()
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+
91114function(check_var_equals var_name expected_value)
92115 check_var_defined(${var_name})
93116
@@ -130,14 +153,26 @@ endforeach()
130153# Check output values
131154message(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" )
191240endfunction ()
192241
193242add_find_vcvars_test(
0 commit comments