@@ -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)
386389endfunction ()
387390
388391if (_Vcvars_FUNCTIONS_ONLY)
@@ -424,63 +427,50 @@ if(NOT DEFINED Vcvars_FIND_VCVARSALL)
424427 set (Vcvars_FIND_VCVARSALL FALSE )
425428endif ()
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
436431if (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} `" )
438433endif ()
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)
452436if (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)
480471endif ()
481472
482473# configure wrapper script
483- set (Vcvars_LAUNCHER)
484474if (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" )
506498endif ()
507499
508- # cleanup
509- unset (_Vcvars_SCRIPTS)
510500
511501# outputs
512502include (FindPackageHandleStandardArgs)
0 commit comments