diff options
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 |