Skip to content

Commit 6a4c52b

Browse files
committed
Fix bug in Config.py initialization and rework support for MsvcQueryVersionToolsetTests.
Changes: * module-level initialization index was not renamed from vc_version to msvc_version. * Add function to return toolset sxs map and versions list in ScriptArguments.py * Add additional fields to extended version components * Add data structure for installed vcs versions/toolsets for testing * Update vcTests.py to new data structure.
1 parent ddaa853 commit 6a4c52b

File tree

5 files changed

+91
-32
lines changed

5 files changed

+91
-32
lines changed

SCons/Tool/MSCommon/MSVC/Config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@
230230

231231
MSVC_BUILDTOOLS_INTERNAL[vc_buildtools] = vc_buildtools_def
232232
MSVC_BUILDTOOLS_EXTERNAL[vc_buildtools] = vc_buildtools_def
233-
MSVC_BUILDTOOLS_EXTERNAL[vc_version] = vc_buildtools_def
233+
MSVC_BUILDTOOLS_EXTERNAL[msvc_version] = vc_buildtools_def
234234

235235
for vc_buildseries_def in vc_buildseries_list:
236236
VC_BUILDTOOLS_MAP[vc_buildseries_def.vc_buildseries] = vc_buildtools_def

SCons/Tool/MSCommon/MSVC/ScriptArguments.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,14 @@ def _msvc_toolset_versions_internal(msvc_version, vc_dir, full: bool=True, sxs:
10661066

10671067
return toolset_versions
10681068

1069+
def _msvc_version_toolsets_internal(msvc_version, vc_dir):
1070+
1071+
msvc = _msvc_version(msvc_version)
1072+
1073+
toolsets_sxs, toolsets_full = _msvc_version_toolsets(msvc, vc_dir)
1074+
1075+
return toolsets_sxs, toolsets_full
1076+
10691077
def _msvc_toolset_versions_spectre_internal(msvc_version, vc_dir):
10701078

10711079
msvc = _msvc_version(msvc_version)

SCons/Tool/MSCommon/MSVC/Util.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -351,17 +351,21 @@ def msvc_version_components(vcver):
351351
return msvc_version_components_def
352352

353353
_MSVC_EXTENDED_VERSION_COMPONENTS_DEFINITION = namedtuple('MSVCExtendedVersionComponentsDefinition', [
354-
'msvc_version', # msvc version (e.g., '14.1Exp')
355-
'msvc_verstr', # msvc version numeric string (e.g., '14.1')
356-
'msvc_suffix', # msvc version component type (e.g., 'Exp')
357-
'msvc_vernum', # msvc version floating point number (e.g, 14.1)
358-
'msvc_major', # msvc major version integer number (e.g., 14)
359-
'msvc_minor', # msvc minor version integer number (e.g., 1)
360-
'msvc_comps', # msvc version components tuple (e.g., ('14', '1'))
354+
'msvc_version', # msvc version (e.g., '14.1Exp')
355+
'msvc_verstr', # msvc version numeric string (e.g., '14.1')
356+
'msvc_suffix', # msvc version component type (e.g., 'Exp')
357+
'msvc_suffix_rank', # msvc version component rank (0, 1)
358+
'msvc_vernum', # msvc version floating point number (e.g, 14.1)
359+
'msvc_major', # msvc major version integer number (e.g., 14)
360+
'msvc_minor', # msvc minor version integer number (e.g., 1)
361+
'msvc_comps', # msvc version components tuple (e.g., ('14', '1'))
361362
'msvc_buildtools', # msvc build tools
363+
'msvc_buildtools_num', # msvc build tools integer number
362364
'msvc_buildseries', # msvc build series
365+
'msvc_buildseries_num', # msvc build series floating point number
363366
'msvc_toolset_version', # msvc toolset version
364367
'msvc_toolset_comps', # msvc toolset version components
368+
'msvc_toolset_is_sxs', # msvc toolset version is sxs
365369
'version', # msvc version or msvc toolset version
366370
])
367371

@@ -386,6 +390,7 @@ def msvc_extended_version_components(version):
386390

387391
msvc_toolset_version = m.group('version')
388392
msvc_toolset_comps = tuple(msvc_toolset_version.split('.'))
393+
msvc_toolset_is_sxs = is_toolset_sxs(msvc_toolset_version)
389394

390395
vc_verstr = get_msvc_version_prefix(msvc_toolset_version)
391396
if not vc_verstr:
@@ -414,14 +419,18 @@ def msvc_extended_version_components(version):
414419
msvc_version = msvc_version,
415420
msvc_verstr = msvc_verstr,
416421
msvc_suffix = msvc_suffix,
422+
msvc_suffix_rank = 0 if not msvc_suffix else 1,
417423
msvc_vernum = msvc_vernum,
418424
msvc_major = msvc_major,
419425
msvc_minor = msvc_minor,
420426
msvc_comps = msvc_comps,
421-
msvc_buildtools = vc_buildtools_def.vc_buildtools,
427+
msvc_buildtools = vc_buildtools_def.msvc_version,
428+
msvc_buildtools_num = vc_buildtools_def.msvc_version_numeric,
422429
msvc_buildseries = vc_buildseries_def.vc_version,
430+
msvc_buildseries_num = vc_buildseries_def.vc_version_numeric,
423431
msvc_toolset_version = msvc_toolset_version,
424432
msvc_toolset_comps = msvc_toolset_comps,
433+
msvc_toolset_is_sxs = msvc_toolset_is_sxs,
425434
version = version,
426435
)
427436

SCons/Tool/MSCommon/vc.py

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,7 +1229,10 @@ def vswhere_freeze_env(cls, env):
12291229
# external use
12301230

12311231
def vswhere_register_executable(vswhere_exe, priority=None, freeze=False):
1232-
debug('register vswhere_exe=%s, priority=%s, freeze=%s', repr(vswhere_exe), repr(priority), repr(freeze))
1232+
debug(
1233+
'register vswhere_exe=%s, priority=%s, freeze=%s',
1234+
repr(vswhere_exe), repr(priority), repr(freeze)
1235+
)
12331236
_VSWhereExecutable.register_vswhere_executable(vswhere_exe, priority=priority)
12341237
if freeze:
12351238
_VSWhereExecutable.freeze_vswhere_executable()
@@ -2525,6 +2528,8 @@ def msvc_toolset_versions(msvc_version=None, full: bool=True, sxs: bool=False, v
25252528
repr(msvc_version), repr(full), repr(sxs), repr(vswhere_exe)
25262529
)
25272530

2531+
_VSWhereExecutable.vswhere_freeze_executable(vswhere_exe)
2532+
25282533
rval = []
25292534

25302535
if not msvc_version:
@@ -2549,6 +2554,8 @@ def msvc_toolset_versions(msvc_version=None, full: bool=True, sxs: bool=False, v
25492554
def msvc_toolset_versions_spectre(msvc_version=None, vswhere_exe=None):
25502555
debug('msvc_version=%s, vswhere_exe=%s', repr(msvc_version), repr(vswhere_exe))
25512556

2557+
_VSWhereExecutable.vswhere_freeze_executable(vswhere_exe)
2558+
25522559
rval = []
25532560

25542561
if not msvc_version:
@@ -2570,33 +2577,70 @@ def msvc_toolset_versions_spectre(msvc_version=None, vswhere_exe=None):
25702577
rval = MSVC.ScriptArguments._msvc_toolset_versions_spectre_internal(msvc_version, vc_dir)
25712578
return rval
25722579

2573-
def get_installed_vcs_toolsets_components(env=None):
2580+
_InstalledVersionToolset = namedtuple('_InstalledVersionToolset', [
2581+
'msvc_version_def',
2582+
'toolset_version_def',
2583+
])
25742584

2575-
vcs = get_installed_vcs(env)
2585+
_InstalledVCSToolsetsComponents = namedtuple('_InstalledVCSToolsetComponents', [
2586+
'sxs_map',
2587+
'toolset_vcs',
2588+
'msvc_toolset_component_defs',
2589+
])
25762590

2591+
def get_installed_vcs_toolsets_components(vswhere_exe=None):
2592+
debug('vswhere_exe=%s', repr(vswhere_exe))
2593+
2594+
_VSWhereExecutable.vswhere_freeze_executable(vswhere_exe)
2595+
2596+
sxs_map = {}
2597+
toolset_vcs = set()
25772598
msvc_toolset_component_defs = []
25782599

2600+
vcs = get_installed_vcs()
25792601
for msvc_version in vcs:
2602+
2603+
vc_dir = _find_vc_pdir(msvc_version, vswhere_exe)
2604+
if not vc_dir:
2605+
continue
2606+
25802607
msvc_version_def = MSVC.Util.msvc_version_components(msvc_version)
2608+
toolset_vcs.add(msvc_version_def.msvc_version)
2609+
25812610
if msvc_version_def.msvc_vernum > 14.0:
2582-
# VS2017 and later
2583-
toolset_all_list = msvc_toolset_versions(msvc_version=msvc_version, full=True, sxs=True)
2584-
for toolset_version in toolset_all_list:
2585-
debug('msvc_version=%s, toolset_version=%s', repr(msvc_version), repr(toolset_version))
2586-
toolset_version_def = MSVC.Util.msvc_extended_version_components(toolset_version)
2587-
if not toolset_version_def:
2588-
continue
2589-
rval = (msvc_version_def, toolset_version_def)
2590-
msvc_toolset_component_defs.append(rval)
2611+
2612+
toolsets_sxs, toolsets_full = MSVC.ScriptArguments._msvc_version_toolsets_internal(
2613+
msvc_version, vc_dir
2614+
)
2615+
2616+
debug('msvc_version=%s, toolset_sxs=%s', repr(msvc_version), repr(toolsets_sxs))
2617+
sxs_map.update(toolsets_sxs)
2618+
25912619
else:
2592-
# VS2015 and earlier
2593-
toolset_version = msvc_version_def.msvc_verstr
2620+
2621+
toolsets_full = [msvc_version_def.msvc_verstr]
2622+
2623+
for toolset_version in toolsets_full:
25942624
debug('msvc_version=%s, toolset_version=%s', repr(msvc_version), repr(toolset_version))
2625+
25952626
toolset_version_def = MSVC.Util.msvc_extended_version_components(toolset_version)
2596-
rval = (msvc_version_def, toolset_version_def)
2627+
if not toolset_version_def:
2628+
continue
2629+
toolset_vcs.add(toolset_version_def.msvc_version)
2630+
2631+
rval = _InstalledVersionToolset(
2632+
msvc_version_def=msvc_version_def,
2633+
toolset_version_def=toolset_version_def,
2634+
)
25972635
msvc_toolset_component_defs.append(rval)
25982636

2599-
return msvc_toolset_component_defs
2637+
installed_vcs_toolsets_components = _InstalledVCSToolsetsComponents(
2638+
sxs_map=sxs_map,
2639+
toolset_vcs=toolset_vcs,
2640+
msvc_toolset_component_defs=msvc_toolset_component_defs,
2641+
)
2642+
2643+
return installed_vcs_toolsets_components
26002644

26012645
def msvc_query_version_toolset(version=None, prefer_newest: bool=True, vswhere_exe=None):
26022646
"""
@@ -2642,7 +2686,10 @@ def msvc_query_version_toolset(version=None, prefer_newest: bool=True, vswhere_e
26422686
MSVCToolsetVersionNotFound: when the specified version is not found.
26432687
MSVCArgumentError: when argument validation fails.
26442688
"""
2645-
debug('version=%s, prefer_newest=%s', repr(version), repr(prefer_newest))
2689+
debug(
2690+
'version=%s, prefer_newest=%s, vswhere_exe=%s',
2691+
repr(version), repr(prefer_newest), repr(vswhere_exe)
2692+
)
26462693

26472694
_VSWhereExecutable.vswhere_freeze_executable(vswhere_exe)
26482695

SCons/Tool/MSCommon/vcTests.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,12 +236,7 @@ class Data:
236236

237237
INSTALLED_VCS = MSCommon.vc.get_installed_vcs()
238238
INSTALLED_VCS_COMPONENTS = MSCommon.vc.get_installed_vcs_components()
239-
240239
INSTALLED_VCS_TOOLSETS_COMPONENTS = MSCommon.vc.get_installed_vcs_toolsets_components()
241-
INSTALLED_VCS_TOOLSETS = set()
242-
for msvc_version_def, toolset_version_def in INSTALLED_VCS_TOOLSETS_COMPONENTS:
243-
INSTALLED_VCS_TOOLSETS.add(msvc_version_def.msvc_version)
244-
INSTALLED_VCS_TOOLSETS.add(toolset_version_def.msvc_version)
245240

246241
@classmethod
247242
def query_version_list(cls, vcver):
@@ -504,7 +499,7 @@ def test_valid_default_msvc(self) -> None:
504499

505500
def test_valid_vcver(self) -> None:
506501
for symbol in MSCommon.vc._VCVER:
507-
have_msvc = bool(symbol in Data.INSTALLED_VCS_TOOLSETS)
502+
have_msvc = bool(symbol in Data.INSTALLED_VCS_TOOLSETS_COMPONENTS.toolset_vcs)
508503
version_def = MSCommon.msvc_version_components(symbol)
509504
for prefer_newest in (True, False):
510505
if not have_msvc:

0 commit comments

Comments
 (0)