Index: win_toolchain/package_from_installed.py |
diff --git a/win_toolchain/package_from_installed.py b/win_toolchain/package_from_installed.py |
index e1bea2afc5183fcd9b4654cebe8983d675b13518..e2785d722003ee44c3bc68f793fbc1bc72a441fe 100644 |
--- a/win_toolchain/package_from_installed.py |
+++ b/win_toolchain/package_from_installed.py |
@@ -201,45 +201,71 @@ def GenerateSetEnvCmd(target_dir): |
This is normally generated by a full install of the SDK, but we |
do it here manually since we do not do a full install.""" |
- with open(os.path.join( |
- target_dir, r'win_sdk\bin\SetEnv.cmd'), 'w') as f: |
+ # All these paths are relative to the directory containing SetEnv.cmd. |
+ include_dirs = [ |
+ ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'um'], |
+ ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'shared'], |
+ ['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'winrt'], |
+ ] |
+ if VS_VERSION == '2015': |
+ include_dirs.append(['..', '..', 'win_sdk', 'Include', WIN_VERSION, 'ucrt']) |
+ include_dirs.extend([ |
+ ['..', '..', 'VC', 'include'], |
+ ['..', '..', 'VC', 'atlmfc', 'include'], |
+ ]) |
+ # Common to x86 and x64 |
+ env = [ |
+ # Yuck: These two have a trailing \ character. No good way to represent this |
+ # in an OS-independent way. |
+ ('VSINSTALLDIR', [['..', '..\\']]), |
+ ('VCINSTALLDIR', [['..', '..', 'VC\\']]), |
+ ('INCLUDE', include_dirs), |
+ ] |
+ # x86. Always use amd64_x86 cross, not x86 on x86. |
+ env_x86 = [ |
+ ('PATH', [ |
+ ['..', '..', 'win_sdk', 'bin', 'x86'], |
+ ['..', '..', 'VC', 'bin', 'amd64_x86'], |
+ ['..', '..', 'VC', 'bin', 'amd64'], # Needed for mspdb1x0.dll. |
+ ]), |
+ ('LIB', [ |
+ ['..', '..', 'VC', 'lib'], |
+ ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'um', 'x86'], |
+ ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'ucrt', 'x86'], # VS 2015 |
+ ['..', '..', 'VC', 'atlmfc', 'lib'], |
+ ]), |
+ ] |
+ # x64. |
+ env_x64 = [ |
+ ('PATH', [ |
+ ['..', '..', 'win_sdk', 'bin', 'x64'], |
+ ['..', '..', 'VC', 'bin', 'amd64'], |
+ ]), |
+ ('LIB', [ |
+ ['..', '..', 'VC', 'lib', 'amd64'], |
+ ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'um', 'x64'], |
+ ['..', '..', 'win_sdk', 'Lib', WIN_VERSION, 'ucrt', 'x64'], # VS 2015 |
+ ['..', '..', 'VC', 'atlmfc', 'lib', 'amd64'], |
+ ]), |
+ ] |
+ def BatDirs(dirs): |
+ return ';'.join(['%~dp0' + os.path.join(*d) for d in dirs]) |
+ with open(os.path.join(target_dir, r'win_sdk\bin\SetEnv.cmd'), 'w') as f: |
f.write('@echo off\n' |
- ':: Generated by win_toolchain\\package_from_installed.py.\n' |
- # Common to x86 and x64 |
- 'set VSINSTALLDIR=%~dp0..\\..\\\n' |
- 'set VCINSTALLDIR=%~dp0..\\..\\VC\\\n' |
- 'set INCLUDE=%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\um;' |
- '%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\shared;' |
- '%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\winrt;'.replace( |
- 'WINVERSION', WIN_VERSION)) |
- if VS_VERSION == '2015': |
- f.write('%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\ucrt;'.replace( |
- 'WINVERSION', WIN_VERSION)) |
- f.write('%~dp0..\\..\\VC\\include;' |
- '%~dp0..\\..\\VC\\atlmfc\\include\n' |
- 'if "%1"=="/x64" goto x64\n') |
- |
- # x86. Always use amd64_x86 cross, not x86 on x86. |
- f.write('set PATH=%~dp0..\\..\\win_sdk\\bin\\x86;' |
- '%~dp0..\\..\\VC\\bin\\amd64_x86;' |
- '%~dp0..\\..\\VC\\bin\\amd64;' # Needed for mspdb1x0.dll. |
- '%PATH%\n') |
- f.write('set LIB=%~dp0..\\..\\VC\\lib;' |
- '%~dp0..\\..\\win_sdk\\Lib\\WINVERSION\\um\\x86;' |
- '%~dp0..\\..\\win_sdk\\Lib\\WINVERSION\\ucrt\\x86;' # VS 2015 |
- '%~dp0..\\..\\VC\\atlmfc\\lib\n' |
- 'goto :EOF\n'.replace('WINVERSION', WIN_VERSION)) |
- |
- # x64. |
- f.write(':x64\n' |
- 'set PATH=%~dp0..\\..\\win_sdk\\bin\\x64;' |
- '%~dp0..\\..\\VC\\bin\\amd64;' |
- '%PATH%\n') |
- f.write('set LIB=%~dp0..\\..\\VC\\lib\\amd64;' |
- '%~dp0..\\..\\win_sdk\\Lib\\WINVERSION\\um\\x64;' |
- '%~dp0..\\..\\win_sdk\\Lib\\WINVERSION\\ucrt\\x64;' # VS 2015 |
- '%~dp0..\\..\\VC\\atlmfc\\lib\\amd64\n' |
- .replace('WINVERSION', WIN_VERSION)) |
+ ':: Generated by win_toolchain\\package_from_installed.py.\n') |
+ for var, dirs in env: |
+ f.write('set %s=%s\n' % (var, BatDirs(dirs))) |
+ f.write('if "%1"=="/x64" goto x64\n') |
+ |
+ for var, dirs in env_x86: |
+ f.write('set %s=%s%s\n' % ( |
+ var, BatDirs(dirs), ';%PATH%' if var == 'PATH' else '')) |
+ f.write('goto :EOF\n') |
+ |
+ f.write(':x64\n') |
+ for var, dirs in env_x64: |
+ f.write('set %s=%s%s\n' % ( |
+ var, BatDirs(dirs), ';%PATH%' if var == 'PATH' else '')) |
def AddEnvSetup(files): |