From 54ffc534fb32eb69aa53b8bfc016441f23198e7d Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 12 Sep 2020 22:49:46 +0200 Subject: [PATCH] makepanda: Fix various issues building with Python 3.10 --- makepanda/makepackage.py | 9 ++++++--- makepanda/makepandacore.py | 32 ++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/makepanda/makepackage.py b/makepanda/makepackage.py index b79a4430d7..8e1f9bb2fa 100755 --- a/makepanda/makepackage.py +++ b/makepanda/makepackage.py @@ -225,10 +225,13 @@ def MakeInstallerNSIS(version, file, title, installdir, runtime=False, compresso # Are we shipping a version of Python? if os.path.isfile(os.path.join(outputdir, "python", "python.exe")): py_dlls = glob.glob(os.path.join(outputdir, "python", "python[0-9][0-9].dll")) \ - + glob.glob(os.path.join(outputdir, "python", "python[0-9][0-9]_d.dll")) + + glob.glob(os.path.join(outputdir, "python", "python[0-9][0-9]_d.dll")) \ + + glob.glob(os.path.join(outputdir, "python", "python[0-9][0-9][0-9].dll")) \ + + glob.glob(os.path.join(outputdir, "python", "python[0-9][0-9][0-9]_d.dll")) assert py_dlls py_dll = os.path.basename(py_dlls[0]) - pyver = py_dll[6] + "." + py_dll[7] + py_dllver = py_dll.strip(".DHLNOPTY_dhlnopty") + pyver = py_dllver[0] + '.' + py_dllver[1:] if GetTargetArch() != 'x64': pyver += '-32' @@ -864,7 +867,7 @@ def MakeInstallerFreeBSD(version, runtime=False, python_versions=[], **kwargs): oscmd("rm -f %s/tmp/python_dep" % outputdir) if "PYTHONVERSION" in SDK: - pyver_nodot = SDK["PYTHONVERSION"][6:9:2] + pyver_nodot = SDK["PYTHONVERSION"][6:].replace('.', '') else: pyver_nodot = "%d%d" % (sys.version_info[:2]) diff --git a/makepanda/makepandacore.py b/makepanda/makepandacore.py index d26bbeed9d..307115bcd0 100644 --- a/makepanda/makepandacore.py +++ b/makepanda/makepandacore.py @@ -2169,9 +2169,11 @@ def SdkLocatePython(prefer_thirdparty_python=False): # Determine which version it is by checking which dll is in the directory. if (GetOptimize() <= 2): - py_dlls = glob.glob(SDK["PYTHON"] + "/python[0-9][0-9]_d.dll") + py_dlls = glob.glob(SDK["PYTHON"] + "/python[0-9][0-9]_d.dll") + \ + glob.glob(SDK["PYTHON"] + "/python[0-9][0-9][0-9]_d.dll") else: - py_dlls = glob.glob(SDK["PYTHON"] + "/python[0-9][0-9].dll") + py_dlls = glob.glob(SDK["PYTHON"] + "/python[0-9][0-9].dll") + \ + glob.glob(SDK["PYTHON"] + "/python[0-9][0-9][0-9].dll") if len(py_dlls) == 0: exit("Could not find the Python dll in %s." % (SDK["PYTHON"])) @@ -2179,24 +2181,29 @@ def SdkLocatePython(prefer_thirdparty_python=False): exit("Found multiple Python dlls in %s." % (SDK["PYTHON"])) py_dll = os.path.basename(py_dlls[0]) - ver = py_dll[6] + "." + py_dll[7] + py_dllver = py_dll.strip(".DHLNOPTY_dhlnopty") + ver = py_dllver[0] + '.' + py_dllver[1:] SDK["PYTHONVERSION"] = "python" + ver os.environ["PYTHONHOME"] = SDK["PYTHON"] - if sys.version[:3] != ver: - Warn("running makepanda with Python %s, but building Panda3D with Python %s." % (sys.version[:3], ver)) + running_ver = '%d.%d' % sys.version_info[:2] + if ver != running_ver: + Warn("running makepanda with Python %s, but building Panda3D with Python %s." % (running_ver, ver)) elif CrossCompiling() or (prefer_thirdparty_python and os.path.isdir(os.path.join(GetThirdpartyDir(), "python"))): tp_python = os.path.join(GetThirdpartyDir(), "python") if GetTarget() == 'darwin': - py_libs = glob.glob(tp_python + "/lib/libpython[0-9].[0-9].dylib") + py_libs = glob.glob(tp_python + "/lib/libpython[0-9].[0-9].dylib") + \ + glob.glob(tp_python + "/lib/libpython[0-9].[0-9][0-9].dylib") else: - py_libs = glob.glob(tp_python + "/lib/libpython[0-9].[0-9].so") + py_libs = glob.glob(tp_python + "/lib/libpython[0-9].[0-9].so") + \ + glob.glob(tp_python + "/lib/libpython[0-9].[0-9][0-9].so") if len(py_libs) == 0: - py_libs = glob.glob(tp_python + "/lib/libpython[0-9].[0-9].a") + py_libs = glob.glob(tp_python + "/lib/libpython[0-9].[0-9].a") + \ + glob.glob(tp_python + "/lib/libpython[0-9].[0-9][0-9].a") if len(py_libs) == 0: exit("Could not find the Python library in %s." % (tp_python)) @@ -2204,7 +2211,8 @@ def SdkLocatePython(prefer_thirdparty_python=False): exit("Found multiple Python libraries in %s." % (tp_python)) py_lib = os.path.basename(py_libs[0]) - SDK["PYTHONVERSION"] = "python" + py_lib[9] + "." + py_lib[11] + py_libver = py_lib.strip('.abdhilnopsty') + SDK["PYTHONVERSION"] = "python" + py_libver SDK["PYTHONEXEC"] = tp_python + "/bin/" + SDK["PYTHONVERSION"] SDK["PYTHON"] = tp_python + "/include/" + SDK["PYTHONVERSION"] @@ -2250,9 +2258,9 @@ def SdkLocatePython(prefer_thirdparty_python=False): exit("Host Python version (%s) must be the same as target Python version (%s)!" % (host_version, SDK["PYTHONVERSION"])) if GetVerbose(): - print("Using Python %s build located at %s" % (SDK["PYTHONVERSION"][6:9], SDK["PYTHON"])) + print("Using Python %s build located at %s" % (SDK["PYTHONVERSION"][6:], SDK["PYTHON"])) else: - print("Using Python %s" % (SDK["PYTHONVERSION"][6:9])) + print("Using Python %s" % (SDK["PYTHONVERSION"][6:])) def SdkLocateVisualStudio(version=(10,0)): if (GetHost() != "windows"): return @@ -3578,7 +3586,7 @@ def GetCurrentPythonVersionInfo(): from distutils.sysconfig import get_python_lib return { - "version": SDK["PYTHONVERSION"][6:9], + "version": SDK["PYTHONVERSION"][6:], "soabi": GetPythonABI(), "ext_suffix": GetExtensionSuffix(), "executable": sys.executable,