diff options
author | Joseph Brill <48932340+jcbrill@users.noreply.github.com> | 2022-07-18 07:17:42 (GMT) |
---|---|---|
committer | Joseph Brill <48932340+jcbrill@users.noreply.github.com> | 2022-07-18 07:17:42 (GMT) |
commit | 32bfd79a27f2c28f8b8feea396e1636c55fa0f28 (patch) | |
tree | 009731e798d2942191580cdb2289f247c6e4cf69 /SCons/Tool/MSCommon/MSVC/ScriptArguments.py | |
parent | d7664eb17d902d3540cfcdda226bd55e9c86cdf0 (diff) | |
download | SCons-32bfd79a27f2c28f8b8feea396e1636c55fa0f28.zip SCons-32bfd79a27f2c28f8b8feea396e1636c55fa0f28.tar.gz SCons-32bfd79a27f2c28f8b8feea396e1636c55fa0f28.tar.bz2 |
Add special case for msvc 14.0 and store/uwp specified via script args and sdk specified via construction variable or forced. Revise forced default toolset handling (may have passed default toolset as an argument inadvertently). Add more tests.
Diffstat (limited to 'SCons/Tool/MSCommon/MSVC/ScriptArguments.py')
-rw-r--r-- | SCons/Tool/MSCommon/MSVC/ScriptArguments.py | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/SCons/Tool/MSCommon/MSVC/ScriptArguments.py b/SCons/Tool/MSCommon/MSVC/ScriptArguments.py index 390e93a..b4191de 100644 --- a/SCons/Tool/MSCommon/MSVC/ScriptArguments.py +++ b/SCons/Tool/MSCommon/MSVC/ScriptArguments.py @@ -157,7 +157,6 @@ if CONFIG_CACHE_FORCE_DEFAULT_ARGUMENTS: @enum.unique class SortOrder(enum.IntEnum): - ARCH = 0 # arch UWP = 1 # MSVC_UWP_APP SDK = 2 # MSVC_SDK_VERSION TOOLSET = 3 # MSVC_TOOLSET_VERSION @@ -232,7 +231,7 @@ def _user_script_argument_uwp(env, uwp, user_argstr): matches = [m for m in re_vcvars_uwp.finditer(user_argstr)] if not matches: - return None + return False if len(matches) > 1: debug('multiple uwp declarations: MSVC_SCRIPT_ARGS=%s', repr(user_argstr)) @@ -240,7 +239,7 @@ def _user_script_argument_uwp(env, uwp, user_argstr): raise MSVCArgumentError(err_msg) if not uwp: - return None + return True env_argstr = env.get('MSVC_UWP_APP','') debug('multiple uwp declarations: MSVC_UWP_APP=%s, MSVC_SCRIPT_ARGS=%s', repr(env_argstr), repr(user_argstr)) @@ -686,7 +685,7 @@ def _msvc_script_argument_toolset(env, msvc, vc_dir, arglist): return toolset_vcvars -def _msvc_script_default_toolset(env, msvc, vc_dir, arglist): +def _msvc_script_default_toolset(env, msvc, vc_dir, arglist, force_toolset): if msvc.vs_def.vc_buildtools_def.vc_version_numeric < VS2017.vc_buildtools_def.vc_version_numeric: return None @@ -697,8 +696,9 @@ def _msvc_script_default_toolset(env, msvc, vc_dir, arglist): debug('MSVC_VERSION=%s, toolset_default=%s', repr(msvc.version), repr(toolset_default)) - argpair = (SortOrder.TOOLSET, '-vcvars_ver={}'.format(toolset_default)) - arglist.append(argpair) + if force_toolset: + argpair = (SortOrder.TOOLSET, '-vcvars_ver={}'.format(toolset_default)) + arglist.append(argpair) return toolset_default @@ -874,11 +874,10 @@ def _msvc_process_construction_variables(env): def msvc_script_arguments(env, version, vc_dir, arg): - arglist = [] + arguments = [arg] if arg else [] - if arg: - argpair = (SortOrder.ARCH, arg) - arglist.append(argpair) + arglist = [] + arglist_reverse = False msvc = _msvc_version(version) @@ -897,7 +896,9 @@ def msvc_script_arguments(env, version, vc_dir, arg): uwp = None if user_argstr: - _user_script_argument_uwp(env, uwp, user_argstr) + user_uwp = _user_script_argument_uwp(env, uwp, user_argstr) + else: + user_uwp = None is_uwp = True if uwp else False platform_def = WinSDK.get_msvc_platform(is_uwp) @@ -915,14 +916,10 @@ def msvc_script_arguments(env, version, vc_dir, arg): user_toolset = None if not toolset_version and not user_toolset: - default_toolset = _msvc_script_default_toolset(env, msvc, vc_dir, arglist) + default_toolset = _msvc_script_default_toolset(env, msvc, vc_dir, arglist, _MSVC_FORCE_DEFAULT_TOOLSET) else: default_toolset = None - if _MSVC_FORCE_DEFAULT_TOOLSET: - if default_toolset: - toolset_version = default_toolset - if user_toolset: toolset = None elif toolset_version: @@ -958,11 +955,18 @@ def msvc_script_arguments(env, version, vc_dir, arg): if user_argstr: _user_script_argument_spectre(env, spectre, user_argstr) - if arglist: + if msvc.vs_def.vc_buildtools_def.vc_version == '14.0': + if user_uwp and sdk_version and len(arglist) == 2: + # VS2015 toolset argument order issue: SDK store => store SDK + arglist_reverse = True + + if len(arglist) > 1: arglist.sort() - argstr = ' '.join([argpair[-1] for argpair in arglist]).strip() - else: - argstr = '' + if arglist_reverse: + arglist.reverse() + + arguments.extend([argpair[-1] for argpair in arglist]) + argstr = ' '.join(arguments).strip() debug('arguments: %s', repr(argstr)) return argstr |