Skip to content

Commit 56e1769

Browse files
committed
Update vswhere function api and update MSCommon/README.rst
Changes: * add vswhere_exe argument to msvc_quert_version_toolset function in MSCommon/README.rst * fix: pass normalized path for vswhere_norm in vswhere binary named tuple constructor * add freeze argument for vswhere_register_executable
1 parent 15206e4 commit 56e1769

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

SCons/Tool/MSCommon/README.rst

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,15 @@ The following issues are known to exist:
207207
Experimental Features
208208
=====================
209209

210-
msvc_query_version_toolset(version=None, prefer_newest=True)
211-
------------------------------------------------------------
210+
msvc_query_version_toolset(version=None, prefer_newest=True, vswhere_exe=None)
211+
------------------------------------------------------------------------------
212212

213213
The experimental function ``msvc_query_version_toolset`` was added to ``MSCommon/vc.py``
214-
and is available via the ``SCons.Tool.MSCommon`` namespace. This function takes a version
215-
specification or a toolset version specification and a product preference as arguments and
216-
returns the msvc version and the msvc toolset version for the corresponding version specification.
214+
and is available via the ``SCons.Tool.MSCommon`` namespace.
215+
216+
This function takes a version specification or a toolset version specification, an optional product
217+
preference, and an optional vswhere executable location as arguments and returns the msvc version and
218+
the msvc toolset version for the corresponding version specification.
217219

218220
This is a proxy for using the toolset version for selection until that functionality can be added.
219221

SCons/Tool/MSCommon/vc.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ def factory(cls, vswhere_exe):
978978

979979
vswhere_binary = cls(
980980
vswhere_exe=vswhere_exe,
981-
vswhere_norm=vswhere_exe,
981+
vswhere_norm=vswhere_norm,
982982
)
983983

984984
cls._cache_vswhere_paths[vswhere_exe] = vswhere_binary
@@ -1103,6 +1103,11 @@ def _vswhere_all_executables(cls):
11031103
vswhere_exe_list.append(vswhere_binary.vswhere_exe)
11041104
return vswhere_exe_list
11051105

1106+
@classmethod
1107+
def is_frozen(cls) -> bool:
1108+
rval = bool(cls.vswhere_frozen_flag)
1109+
return rval
1110+
11061111
@classmethod
11071112
def freeze_vswhere_binary(cls):
11081113
if not cls.vswhere_frozen_flag:
@@ -1141,7 +1146,7 @@ def _vswhere_priority_group(cls, priority):
11411146
return group
11421147

11431148
@classmethod
1144-
def register_vswhere_executable(cls, vswhere_exe, priority=None) -> bool:
1149+
def register_vswhere_executable(cls, vswhere_exe, priority=None):
11451150

11461151
vswhere_binary = cls.UNDEFINED_VSWHERE_BINARY
11471152

@@ -1222,11 +1227,27 @@ def vswhere_freeze_env(cls, env):
12221227
return frozen_binary, vswhere_binary
12231228

12241229
# external use
1225-
vswhere_register_executable = _VSWhereExecutable.register_vswhere_executable
1226-
vswhere_get_executable = _VSWhereExecutable.get_vswhere_executable
1227-
vswhere_freeze_executable = _VSWhereExecutable.freeze_vswhere_executable
12281230

1229-
# internal use
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))
1233+
_VSWhereExecutable.register_vswhere_executable(vswhere_exe, priority=priority)
1234+
if freeze:
1235+
_VSWhereExecutable.freeze_vswhere_executable()
1236+
rval = _VSWhereExecutable.get_vswhere_executable()
1237+
debug('current vswhere_exe=%s, is_frozen=%s', repr(rval), _VSWhereExecutable.is_frozen())
1238+
return vswhere_exe
1239+
1240+
def vswhere_get_executable():
1241+
debug('')
1242+
vswhere_exe = _VSWhereExecutable.get_vswhere_executable()
1243+
return vswhere_exe
1244+
1245+
def vswhere_freeze_executable():
1246+
debug('')
1247+
vswhere_exe = _VSWhereExecutable.freeze_vswhere_executable()
1248+
return vswhere_exe
1249+
1250+
# internal use only
12301251
vswhere_freeze_env = _VSWhereExecutable.vswhere_freeze_env
12311252

12321253
def msvc_find_vswhere():

0 commit comments

Comments
 (0)