Skip to content

Commit 8e89b64

Browse files
committed
chore(Vcvars): Simplify logic for auto-discovering Vcvars_MSVC_VERSION
Refactor handling of `Vcvars_MSVC_VERSION` and `Vcvars_BATCH_FILE` to: - Avoid redundant initialization of fallback variables - Let `Vcvars_FindFirstValidMsvcVersion` always assign both outputs - Eliminate duplicate version conversion and script selection logic
1 parent 3fd94c2 commit 8e89b64

File tree

1 file changed

+36
-46
lines changed

1 file changed

+36
-46
lines changed

FindVcvars.cmake

Lines changed: 36 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,9 @@ function(Vcvars_FindFirstValidMsvcVersion msvc_arch candidate_msvc_versions msvc
362362
set(_candidate_scripts vcvars32.bat)
363363
endif()
364364
endif()
365+
# set defaults
366+
set(_batch_file "${batch_file_output_varname}-NOTFOUND")
367+
set(_msvc_version "")
365368
foreach(_candidate_msvc_version IN LISTS candidate_msvc_versions)
366369
Vcvars_GetVisualStudioPaths(${_candidate_msvc_version} "${msvc_arch}" _paths)
367370
Vcvars_ConvertMsvcVersionToVsVersion(${_candidate_msvc_version} _candidate_vs_version)
@@ -375,14 +378,14 @@ function(Vcvars_FindFirstValidMsvcVersion msvc_arch candidate_msvc_versions msvc
375378
_vcvars_message(STATUS "${_msg} - found")
376379
set(_msvc_version ${_candidate_msvc_version})
377380
_vcvars_message(STATUS "Setting ${msvc_version_output_varname} to '${_msvc_version}' as it was the newest Visual Studio installed providing vcvars scripts")
378-
# Output variables
379-
set(${msvc_version_output_varname} ${_msvc_version} PARENT_SCOPE)
380-
set(${batch_file_output_varname} ${_batch_file} PARENT_SCOPE)
381381
break()
382382
else()
383383
_vcvars_message(STATUS "${_msg} - not found")
384384
endif()
385385
endforeach()
386+
# set outputs
387+
set(${msvc_version_output_varname} ${_msvc_version} PARENT_SCOPE)
388+
set(${batch_file_output_varname} ${_batch_file} PARENT_SCOPE)
386389
endfunction()
387390

388391
if(_Vcvars_FUNCTIONS_ONLY)
@@ -424,63 +427,50 @@ if(NOT DEFINED Vcvars_FIND_VCVARSALL)
424427
set(Vcvars_FIND_VCVARSALL FALSE)
425428
endif()
426429

427-
if(NOT DEFINED Vcvars_BATCH_FILE)
428-
set(Vcvars_BATCH_FILE "Vcvars_BATCH_FILE-NOTFOUND")
429-
endif()
430-
431-
if(NOT DEFINED Vcvars_LAUNCHER)
432-
set(Vcvars_LAUNCHER "Vcvars_LAUNCHER-NOTFOUND")
433-
endif()
434-
435430
# check Vcvars_MSVC_ARCH is properly set
436431
if(NOT Vcvars_MSVC_ARCH MATCHES ${_Vcvars_MSVC_ARCH_REGEX})
437432
message(FATAL_ERROR "Vcvars_MSVC_ARCH [${Vcvars_MSVC_ARCH}] is expected to match `${_Vcvars_MSVC_ARCH_REGEX}`")
438433
endif()
439434

440-
# which vcvars script ?
441-
if(Vcvars_FIND_VCVARSALL)
442-
set(_Vcvars_SCRIPTS vcvarsall.bat)
443-
else()
444-
if(Vcvars_MSVC_ARCH STREQUAL "64")
445-
set(_Vcvars_SCRIPTS vcvarsamd64.bat vcvars64.bat)
446-
else()
447-
set(_Vcvars_SCRIPTS vcvars32.bat)
448-
endif()
449-
endif()
450-
451-
# set Vcvars_BATCH_FILE
435+
# auto-discover Vcvars_MSVC_VERSION value (and set Vcvars_BATCH_FILE as a side-effect)
452436
if(NOT DEFINED Vcvars_MSVC_VERSION)
453-
# auto-discover Vcvars_MSVC_VERSION value
454437
Vcvars_FindFirstValidMsvcVersion(
455438
"${Vcvars_MSVC_ARCH}"
456439
"${_Vcvars_SUPPORTED_MSVC_VERSIONS}"
457-
Vcvars_MSVC_VERSION
440+
_msvc_version
458441
_batch_file
459442
)
460-
Vcvars_ConvertMsvcVersionToVsVersion(${Vcvars_MSVC_VERSION} _vs_version)
461-
unset(Vcvars_BATCH_FILE)
462-
set(Vcvars_BATCH_FILE ${_batch_file}
463-
CACHE FILEPATH "Visual Studio ${_vs_version} vcvars script"
464-
)
465-
unset(_batch_file)
466-
unset(_vs_version)
467-
else()
468-
# use provided Vcvars_MSVC_VERSION value
469-
if(NOT Vcvars_MSVC_VERSION MATCHES ${_Vcvars_MSVC_VERSION_REGEX})
470-
message(FATAL_ERROR "Vcvars_MSVC_VERSION [${Vcvars_MSVC_VERSION}] is expected to match `${_Vcvars_MSVC_VERSION_REGEX}`")
443+
if(_batch_file)
444+
set(Vcvars_MSVC_VERSION ${_msvc_version})
445+
Vcvars_ConvertMsvcVersionToVsVersion(${Vcvars_MSVC_VERSION} _vs_version)
446+
set(Vcvars_BATCH_FILE ${_batch_file}
447+
CACHE FILEPATH "Visual Studio ${_vs_version} vcvars script"
448+
)
449+
unset(_vs_version)
471450
endif()
472-
Vcvars_GetVisualStudioPaths(${Vcvars_MSVC_VERSION} "${Vcvars_MSVC_ARCH}" _paths)
473-
Vcvars_ConvertMsvcVersionToVsVersion(${Vcvars_MSVC_VERSION} _vs_version)
474-
find_program(Vcvars_BATCH_FILE NAMES ${_Vcvars_SCRIPTS}
475-
DOC "Visual Studio ${_vs_version} vcvars script"
476-
PATHS ${_paths}
451+
unset(_batch_file)
452+
unset(_msvc_version)
453+
endif()
454+
455+
if(NOT DEFINED Vcvars_BATCH_FILE AND DEFINED Vcvars_MSVC_VERSION)
456+
Vcvars_FindFirstValidMsvcVersion(
457+
"${Vcvars_MSVC_ARCH}"
458+
"${Vcvars_MSVC_VERSION}"
459+
_msvc_version # Unused (Vcvars_MSVC_VERSION already set)
460+
_batch_file
477461
)
478-
unset(_paths)
479-
unset(_vs_version)
462+
if(_batch_file)
463+
Vcvars_ConvertMsvcVersionToVsVersion(${Vcvars_MSVC_VERSION} _vs_version)
464+
set(Vcvars_BATCH_FILE ${_batch_file}
465+
CACHE FILEPATH "Visual Studio ${_vs_version} vcvars script"
466+
)
467+
unset(_vs_version)
468+
endif()
469+
unset(_batch_file)
470+
unset(_msvc_version)
480471
endif()
481472

482473
# configure wrapper script
483-
set(Vcvars_LAUNCHER)
484474
if(Vcvars_BATCH_FILE)
485475

486476
set(_vcvarsall_arch )
@@ -503,10 +493,10 @@ if(Vcvars_BATCH_FILE)
503493
unset(_in)
504494
unset(_out)
505495
unset(_vcvarsall_arch)
496+
else()
497+
set(Vcvars_LAUNCHER "Vcvars_LAUNCHER-NOTFOUND")
506498
endif()
507499

508-
# cleanup
509-
unset(_Vcvars_SCRIPTS)
510500

511501
# outputs
512502
include(FindPackageHandleStandardArgs)

0 commit comments

Comments
 (0)