@@ -1229,7 +1229,10 @@ def vswhere_freeze_env(cls, env):
1229
1229
# external use
1230
1230
1231
1231
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
+ )
1233
1236
_VSWhereExecutable .register_vswhere_executable (vswhere_exe , priority = priority )
1234
1237
if freeze :
1235
1238
_VSWhereExecutable .freeze_vswhere_executable ()
@@ -2525,6 +2528,8 @@ def msvc_toolset_versions(msvc_version=None, full: bool=True, sxs: bool=False, v
2525
2528
repr (msvc_version ), repr (full ), repr (sxs ), repr (vswhere_exe )
2526
2529
)
2527
2530
2531
+ _VSWhereExecutable .vswhere_freeze_executable (vswhere_exe )
2532
+
2528
2533
rval = []
2529
2534
2530
2535
if not msvc_version :
@@ -2549,6 +2554,8 @@ def msvc_toolset_versions(msvc_version=None, full: bool=True, sxs: bool=False, v
2549
2554
def msvc_toolset_versions_spectre (msvc_version = None , vswhere_exe = None ):
2550
2555
debug ('msvc_version=%s, vswhere_exe=%s' , repr (msvc_version ), repr (vswhere_exe ))
2551
2556
2557
+ _VSWhereExecutable .vswhere_freeze_executable (vswhere_exe )
2558
+
2552
2559
rval = []
2553
2560
2554
2561
if not msvc_version :
@@ -2570,33 +2577,70 @@ def msvc_toolset_versions_spectre(msvc_version=None, vswhere_exe=None):
2570
2577
rval = MSVC .ScriptArguments ._msvc_toolset_versions_spectre_internal (msvc_version , vc_dir )
2571
2578
return rval
2572
2579
2573
- def get_installed_vcs_toolsets_components (env = None ):
2580
+ _InstalledVersionToolset = namedtuple ('_InstalledVersionToolset' , [
2581
+ 'msvc_version_def' ,
2582
+ 'toolset_version_def' ,
2583
+ ])
2574
2584
2575
- vcs = get_installed_vcs (env )
2585
+ _InstalledVCSToolsetsComponents = namedtuple ('_InstalledVCSToolsetComponents' , [
2586
+ 'sxs_map' ,
2587
+ 'toolset_vcs' ,
2588
+ 'msvc_toolset_component_defs' ,
2589
+ ])
2576
2590
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 ()
2577
2598
msvc_toolset_component_defs = []
2578
2599
2600
+ vcs = get_installed_vcs ()
2579
2601
for msvc_version in vcs :
2602
+
2603
+ vc_dir = _find_vc_pdir (msvc_version , vswhere_exe )
2604
+ if not vc_dir :
2605
+ continue
2606
+
2580
2607
msvc_version_def = MSVC .Util .msvc_version_components (msvc_version )
2608
+ toolset_vcs .add (msvc_version_def .msvc_version )
2609
+
2581
2610
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
+
2591
2619
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 :
2594
2624
debug ('msvc_version=%s, toolset_version=%s' , repr (msvc_version ), repr (toolset_version ))
2625
+
2595
2626
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
+ )
2597
2635
msvc_toolset_component_defs .append (rval )
2598
2636
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
2600
2644
2601
2645
def msvc_query_version_toolset (version = None , prefer_newest : bool = True , vswhere_exe = None ):
2602
2646
"""
@@ -2642,7 +2686,10 @@ def msvc_query_version_toolset(version=None, prefer_newest: bool=True, vswhere_e
2642
2686
MSVCToolsetVersionNotFound: when the specified version is not found.
2643
2687
MSVCArgumentError: when argument validation fails.
2644
2688
"""
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
+ )
2646
2693
2647
2694
_VSWhereExecutable .vswhere_freeze_executable (vswhere_exe )
2648
2695
0 commit comments