mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
Support targeting Windows XP with MSVC 2015
This commit is contained in:
parent
1e2961f7ef
commit
948ff8562d
@ -143,12 +143,22 @@ SectionGroup "Panda3D Libraries"
|
|||||||
SetOutPath "$INSTDIR"
|
SetOutPath "$INSTDIR"
|
||||||
File "${BUILT}\LICENSE"
|
File "${BUILT}\LICENSE"
|
||||||
File /r /x CVS "${BUILT}\ReleaseNotes"
|
File /r /x CVS "${BUILT}\ReleaseNotes"
|
||||||
SetOutPath $INSTDIR\bin
|
|
||||||
File /r /x libpandagl.dll /x libpandadx9.dll /x cgD3D*.dll /x python*.dll /x libpandaode.dll /x libp3fmod_audio.dll /x fmodex*.dll /x libp3ffmpeg.dll /x av*.dll /x postproc*.dll /x swscale*.dll /x swresample*.dll /x NxCharacter*.dll /x cudart*.dll /x PhysX*.dll /x libpandaphysx.dll /x libp3rocket.dll /x boost_python*.dll /x Rocket*.dll /x _rocket*.pyd /x libpandabullet.dll /x OpenAL32.dll /x *_oal.dll /x libp3openal_audio.dll "${BUILT}\bin\*.dll"
|
|
||||||
File /nonfatal /r "${BUILT}\bin\Microsoft.*.manifest"
|
|
||||||
SetOutPath $INSTDIR\etc
|
SetOutPath $INSTDIR\etc
|
||||||
File /r "${BUILT}\etc\*"
|
File /r "${BUILT}\etc\*"
|
||||||
|
|
||||||
|
SetOutPath $INSTDIR\bin
|
||||||
|
File /r /x api-ms-win-*.dll /x ucrtbase.dll /x libpandagl.dll /x libpandadx9.dll /x cgD3D*.dll /x python*.dll /x libpandaode.dll /x libp3fmod_audio.dll /x fmodex*.dll /x libp3ffmpeg.dll /x av*.dll /x postproc*.dll /x swscale*.dll /x swresample*.dll /x NxCharacter*.dll /x cudart*.dll /x PhysX*.dll /x libpandaphysx.dll /x libp3rocket.dll /x boost_python*.dll /x Rocket*.dll /x _rocket*.pyd /x libpandabullet.dll /x OpenAL32.dll /x *_oal.dll /x libp3openal_audio.dll "${BUILT}\bin\*.dll"
|
||||||
|
File /nonfatal /r "${BUILT}\bin\Microsoft.*.manifest"
|
||||||
|
|
||||||
|
; Before Windows 10, we need these stubs for the UCRT as well.
|
||||||
|
ReadRegDWORD $0 HKLM "Software\Microsoft\Windows NT\CurrentVersion" "CurrentMajorVersionNumber"
|
||||||
|
${If} $0 < 10
|
||||||
|
ClearErrors
|
||||||
|
File /nonfatal /r "${BUILT}\bin\api-ms-win-*.dll"
|
||||||
|
File /nonfatal "${BUILT}\bin\ucrtbase.dll"
|
||||||
|
${Endif}
|
||||||
|
|
||||||
SetDetailsPrint both
|
SetDetailsPrint both
|
||||||
DetailPrint "Installing models..."
|
DetailPrint "Installing models..."
|
||||||
SetDetailsPrint listonly
|
SetDetailsPrint listonly
|
||||||
|
@ -1060,6 +1060,10 @@ def CompileCxx(obj,src,opts):
|
|||||||
cmd += "/DWINVER=0x601 "
|
cmd += "/DWINVER=0x601 "
|
||||||
else:
|
else:
|
||||||
cmd += "/DWINVER=0x501 "
|
cmd += "/DWINVER=0x501 "
|
||||||
|
# Work around a WinXP/2003 bug when using VS 2015+.
|
||||||
|
if SDK.get("VISUALSTUDIO_VERSION") == '14.0':
|
||||||
|
cmd += "/Zc:threadSafeInit- "
|
||||||
|
|
||||||
cmd += "/Fo" + obj + " /nologo /c"
|
cmd += "/Fo" + obj + " /nologo /c"
|
||||||
if GetTargetArch() != 'x64' and (not PkgSkip("SSE2") or 'SSE2' in opts):
|
if GetTargetArch() != 'x64' and (not PkgSkip("SSE2") or 'SSE2' in opts):
|
||||||
cmd += " /arch:SSE2"
|
cmd += " /arch:SSE2"
|
||||||
@ -2884,22 +2888,72 @@ if tp_dir is not None:
|
|||||||
|
|
||||||
if GetTarget() == 'windows':
|
if GetTarget() == 'windows':
|
||||||
CopyAllFiles(GetOutputDir() + "/bin/", tp_dir + "extras/bin/")
|
CopyAllFiles(GetOutputDir() + "/bin/", tp_dir + "extras/bin/")
|
||||||
if not PkgSkip("PYTHON"):
|
|
||||||
pydll = "/" + SDK["PYTHONVERSION"].replace(".", "")
|
|
||||||
if (GetOptimize() <= 2): pydll += "_d.dll"
|
|
||||||
else: pydll += ".dll"
|
|
||||||
CopyFile(GetOutputDir() + "/bin" + pydll, SDK["PYTHON"] + pydll)
|
|
||||||
|
|
||||||
for fn in glob.glob(SDK["PYTHON"] + "/vcruntime*.dll"):
|
if not PkgSkip("PYTHON") and not RTDIST:
|
||||||
CopyFile(GetOutputDir() + "/bin/", fn)
|
#XXX rdb I don't think we need to copy over the Python DLL, do we?
|
||||||
|
#pydll = "/" + SDK["PYTHONVERSION"].replace(".", "")
|
||||||
|
#if (GetOptimize() <= 2): pydll += "_d.dll"
|
||||||
|
#else: pydll += ".dll"
|
||||||
|
#CopyFile(GetOutputDir() + "/bin" + pydll, SDK["PYTHON"] + pydll)
|
||||||
|
|
||||||
if not RTDIST:
|
#for fn in glob.glob(SDK["PYTHON"] + "/vcruntime*.dll"):
|
||||||
CopyTree(GetOutputDir() + "/python", SDK["PYTHON"])
|
# CopyFile(GetOutputDir() + "/bin/", fn)
|
||||||
if not os.path.isfile(SDK["PYTHON"] + "/ppython.exe") and os.path.isfile(SDK["PYTHON"] + "/python.exe"):
|
|
||||||
CopyFile(GetOutputDir() + "/python/ppython.exe", SDK["PYTHON"] + "/python.exe")
|
# Copy the whole Python directory.
|
||||||
if not os.path.isfile(SDK["PYTHON"] + "/ppythonw.exe") and os.path.isfile(SDK["PYTHON"] + "/pythonw.exe"):
|
CopyTree(GetOutputDir() + "/python", SDK["PYTHON"])
|
||||||
CopyFile(GetOutputDir() + "/python/ppythonw.exe", SDK["PYTHON"] + "/pythonw.exe")
|
|
||||||
ConditionalWriteFile(GetOutputDir() + "/python/panda.pth", "..\n../bin\n")
|
# NB: Python does not always ship with the correct manifest/dll.
|
||||||
|
# Figure out the correct one to ship, and grab it from WinSxS dir.
|
||||||
|
manifest = GetOutputDir() + '/tmp/python.manifest'
|
||||||
|
if os.path.isfile(manifest):
|
||||||
|
os.unlink(manifest)
|
||||||
|
oscmd('mt -inputresource:"%s\\python.exe";#1 -out:"%s" -nologo' % (SDK["PYTHON"], manifest), True)
|
||||||
|
|
||||||
|
if os.path.isfile(manifest):
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
tree = ET.parse(manifest)
|
||||||
|
idents = tree.findall('./{urn:schemas-microsoft-com:asm.v1}dependency/{urn:schemas-microsoft-com:asm.v1}dependentAssembly/{urn:schemas-microsoft-com:asm.v1}assemblyIdentity')
|
||||||
|
else:
|
||||||
|
idents = ()
|
||||||
|
|
||||||
|
for ident in tree.findall('./{urn:schemas-microsoft-com:asm.v1}dependency/{urn:schemas-microsoft-com:asm.v1}dependentAssembly/{urn:schemas-microsoft-com:asm.v1}assemblyIdentity'):
|
||||||
|
sxs_name = '_'.join([
|
||||||
|
ident.get('processorArchitecture'),
|
||||||
|
ident.get('name').lower(),
|
||||||
|
ident.get('publicKeyToken'),
|
||||||
|
ident.get('version'),
|
||||||
|
])
|
||||||
|
|
||||||
|
# Find the manifest matching these parameters.
|
||||||
|
pattern = os.path.join('C:' + os.sep, 'Windows', 'WinSxS', 'Manifests', sxs_name + '_*.manifest')
|
||||||
|
manifests = glob.glob(pattern)
|
||||||
|
if not manifests:
|
||||||
|
print("%sWARNING:%s Could not locate manifest %s. You may need to reinstall the Visual C++ Redistributable." % (GetColor("red"), GetColor(), pattern))
|
||||||
|
continue
|
||||||
|
|
||||||
|
CopyFile(GetOutputDir() + "/python/" + ident.get('name') + ".manifest", manifests[0])
|
||||||
|
|
||||||
|
# Also copy the corresponding msvcr dll.
|
||||||
|
pattern = os.path.join('C:' + os.sep, 'Windows', 'WinSxS', sxs_name + '_*', 'msvcr*.dll')
|
||||||
|
for file in glob.glob(pattern):
|
||||||
|
CopyFile(GetOutputDir() + "/python/", file)
|
||||||
|
|
||||||
|
# Copy python.exe to ppython.exe.
|
||||||
|
if not os.path.isfile(SDK["PYTHON"] + "/ppython.exe") and os.path.isfile(SDK["PYTHON"] + "/python.exe"):
|
||||||
|
CopyFile(GetOutputDir() + "/python/ppython.exe", SDK["PYTHON"] + "/python.exe")
|
||||||
|
if not os.path.isfile(SDK["PYTHON"] + "/ppythonw.exe") and os.path.isfile(SDK["PYTHON"] + "/pythonw.exe"):
|
||||||
|
CopyFile(GetOutputDir() + "/python/ppythonw.exe", SDK["PYTHON"] + "/pythonw.exe")
|
||||||
|
ConditionalWriteFile(GetOutputDir() + "/python/panda.pth", "..\n../bin\n")
|
||||||
|
|
||||||
|
# Copy over the MSVC runtime.
|
||||||
|
if GetTarget() == 'windows' and "VISUALSTUDIO" in SDK:
|
||||||
|
vcver = SDK["VISUALSTUDIO_VERSION"].replace('.', '')
|
||||||
|
crtname = "Microsoft.VC%s.CRT" % (vcver)
|
||||||
|
dir = os.path.join(SDK["VISUALSTUDIO"], "VC", "redist", GetTargetArch(), crtname)
|
||||||
|
|
||||||
|
if os.path.isdir(dir):
|
||||||
|
CopyFile(GetOutputDir() + "/bin/", os.path.join(dir, "vcruntime" + vcver + ".dll"))
|
||||||
|
CopyFile(GetOutputDir() + "/bin/", os.path.join(dir, "msvcp" + vcver + ".dll"))
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
##
|
##
|
||||||
|
@ -512,6 +512,7 @@ def oscmd(cmd, ignoreError = False):
|
|||||||
exit("Cannot find "+exe+" on search path")
|
exit("Cannot find "+exe+" on search path")
|
||||||
res = os.spawnl(os.P_WAIT, exe_path, cmd)
|
res = os.spawnl(os.P_WAIT, exe_path, cmd)
|
||||||
else:
|
else:
|
||||||
|
cmd = cmd.replace(';', '\\;')
|
||||||
res = subprocess.call(cmd, shell=True)
|
res = subprocess.call(cmd, shell=True)
|
||||||
sig = res & 0x7F
|
sig = res & 0x7F
|
||||||
if (GetVerbose() and res != 0):
|
if (GetVerbose() and res != 0):
|
||||||
@ -2068,6 +2069,10 @@ def SdkLocateWindows(version = '7.1'):
|
|||||||
# Choose the latest version of the Windows 10 SDK.
|
# Choose the latest version of the Windows 10 SDK.
|
||||||
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot10")
|
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot10")
|
||||||
|
|
||||||
|
# Fallback in case we can't read the registry.
|
||||||
|
if not platsdk or not os.path.isdir(platsdk):
|
||||||
|
platsdk = "C:\\Program Files (x86)\\Windows Kits\\10\\"
|
||||||
|
|
||||||
if platsdk and os.path.isdir(platsdk):
|
if platsdk and os.path.isdir(platsdk):
|
||||||
incdirs = glob.glob(os.path.join(platsdk, 'Include', version + '.*.*'))
|
incdirs = glob.glob(os.path.join(platsdk, 'Include', version + '.*.*'))
|
||||||
max_version = ()
|
max_version = ()
|
||||||
@ -2100,6 +2105,10 @@ def SdkLocateWindows(version = '7.1'):
|
|||||||
# We chose a specific version of the Windows 10 SDK. Verify it exists.
|
# We chose a specific version of the Windows 10 SDK. Verify it exists.
|
||||||
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot10")
|
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot10")
|
||||||
|
|
||||||
|
# Fallback in case we can't read the registry.
|
||||||
|
if not platsdk or not os.path.isdir(platsdk):
|
||||||
|
platsdk = "C:\\Program Files (x86)\\Windows Kits\\10\\"
|
||||||
|
|
||||||
if version.count('.') == 2:
|
if version.count('.') == 2:
|
||||||
version += '.0'
|
version += '.0'
|
||||||
|
|
||||||
@ -2109,6 +2118,10 @@ def SdkLocateWindows(version = '7.1'):
|
|||||||
elif version == '8.1':
|
elif version == '8.1':
|
||||||
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot81")
|
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot81")
|
||||||
|
|
||||||
|
# Fallback in case we can't read the registry.
|
||||||
|
if not platsdk or not os.path.isdir(platsdk):
|
||||||
|
platsdk = "C:\\Program Files (x86)\\Windows Kits\\8.1\\"
|
||||||
|
|
||||||
elif version == '8.0':
|
elif version == '8.0':
|
||||||
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot")
|
platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot")
|
||||||
|
|
||||||
@ -2414,9 +2427,19 @@ def SetupVisualStudioEnviron():
|
|||||||
# with Visual Studio 2015 requires use of the Universal CRT.
|
# with Visual Studio 2015 requires use of the Universal CRT.
|
||||||
if winsdk_ver == '7.1' and SDK["VISUALSTUDIO_VERSION"] == '14.0':
|
if winsdk_ver == '7.1' and SDK["VISUALSTUDIO_VERSION"] == '14.0':
|
||||||
win_kit = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot10")
|
win_kit = GetRegistryKey("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots", "KitsRoot10")
|
||||||
|
|
||||||
|
# Fallback in case we can't read the registry.
|
||||||
|
if not win_kit or not os.path.isdir(win_kit):
|
||||||
|
win_kit = "C:\\Program Files (x86)\\Windows Kits\\10\\"
|
||||||
|
elif not win_kit.endswith('\\'):
|
||||||
|
win_kit += '\\'
|
||||||
|
|
||||||
AddToPathEnv("LIB", win_kit + "Lib\\10.0.10150.0\\ucrt\\" + arch)
|
AddToPathEnv("LIB", win_kit + "Lib\\10.0.10150.0\\ucrt\\" + arch)
|
||||||
AddToPathEnv("INCLUDE", win_kit + "Include\\10.0.10150.0\\ucrt")
|
AddToPathEnv("INCLUDE", win_kit + "Include\\10.0.10150.0\\ucrt")
|
||||||
|
|
||||||
|
# Copy the DLLs to the bin directory.
|
||||||
|
CopyAllFiles(GetOutputDir() + "/bin/", win_kit + "Redist\\ucrt\\DLLs\\" + arch + "\\")
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
#
|
#
|
||||||
# Include and Lib directories.
|
# Include and Lib directories.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user