mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -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"
|
||||
File "${BUILT}\LICENSE"
|
||||
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
|
||||
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
|
||||
DetailPrint "Installing models..."
|
||||
SetDetailsPrint listonly
|
||||
|
@ -1060,6 +1060,10 @@ def CompileCxx(obj,src,opts):
|
||||
cmd += "/DWINVER=0x601 "
|
||||
else:
|
||||
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"
|
||||
if GetTargetArch() != 'x64' and (not PkgSkip("SSE2") or 'SSE2' in opts):
|
||||
cmd += " /arch:SSE2"
|
||||
@ -2884,22 +2888,72 @@ if tp_dir is not None:
|
||||
|
||||
if GetTarget() == 'windows':
|
||||
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"):
|
||||
CopyFile(GetOutputDir() + "/bin/", fn)
|
||||
if not PkgSkip("PYTHON") and not RTDIST:
|
||||
#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:
|
||||
CopyTree(GetOutputDir() + "/python", SDK["PYTHON"])
|
||||
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")
|
||||
#for fn in glob.glob(SDK["PYTHON"] + "/vcruntime*.dll"):
|
||||
# CopyFile(GetOutputDir() + "/bin/", fn)
|
||||
|
||||
# Copy the whole Python directory.
|
||||
CopyTree(GetOutputDir() + "/python", SDK["PYTHON"])
|
||||
|
||||
# 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")
|
||||
res = os.spawnl(os.P_WAIT, exe_path, cmd)
|
||||
else:
|
||||
cmd = cmd.replace(';', '\\;')
|
||||
res = subprocess.call(cmd, shell=True)
|
||||
sig = res & 0x7F
|
||||
if (GetVerbose() and res != 0):
|
||||
@ -2068,6 +2069,10 @@ def SdkLocateWindows(version = '7.1'):
|
||||
# Choose the latest version of the Windows 10 SDK.
|
||||
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):
|
||||
incdirs = glob.glob(os.path.join(platsdk, 'Include', 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.
|
||||
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:
|
||||
version += '.0'
|
||||
|
||||
@ -2109,6 +2118,10 @@ def SdkLocateWindows(version = '7.1'):
|
||||
elif version == '8.1':
|
||||
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':
|
||||
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.
|
||||
if winsdk_ver == '7.1' and SDK["VISUALSTUDIO_VERSION"] == '14.0':
|
||||
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("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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user