From ed4d2a228038c17c4604997082e6bc9993a93c7f Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 24 Feb 2023 22:04:06 +0100 Subject: [PATCH 1/7] dist: Add support for emscripten platform to FreezeTool.py --- direct/src/dist/FreezeTool.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/direct/src/dist/FreezeTool.py b/direct/src/dist/FreezeTool.py index f057e87c17..8e00bbffff 100644 --- a/direct/src/dist/FreezeTool.py +++ b/direct/src/dist/FreezeTool.py @@ -1232,7 +1232,7 @@ class Freezer: # sysconfigdata module on POSIX systems. missing = [] if 'sysconfig' in self.mf.modules and \ - ('linux' in self.platform or 'mac' in self.platform): + ('linux' in self.platform or 'mac' in self.platform or 'emscripten' in self.platform): modname = '_sysconfigdata' if sys.version_info >= (3, 6): modname += '_' @@ -1244,6 +1244,12 @@ class Freezer: modname += '_linux_' + arch + '-linux-gnu' elif 'mac' in self.platform: modname += '_darwin_darwin' + elif 'emscripten' in self.platform: + if '_' in self.platform: + arch = self.platform.split('_', 1)[1] + else: + arch = 'wasm32' + modname += '_emscripten_' + arch + '-emscripten' try: self.__loadModule(self.ModuleDef(modname, implicit=True)) From 82a79acdd57750ae0ad1fb0954f9bb4344961c47 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 22 Feb 2023 23:29:37 +0100 Subject: [PATCH 2/7] tests: Fix OverflowError in test_format_arrays on 32-bit This is actually a bug in interrogate - it's converting an unsigned size_t via Py_ssize_t, which is not correct. However, it's a bunch of trouble to fix that. Cherry-picked from 84ada4d66b3e9a5012c49abab8c3c21c2c3ae2bc --- tests/gobj/test_geom_vertex_format.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/gobj/test_geom_vertex_format.py b/tests/gobj/test_geom_vertex_format.py index d4c9472649..0b056d3b10 100644 --- a/tests/gobj/test_geom_vertex_format.py +++ b/tests/gobj/test_geom_vertex_format.py @@ -104,11 +104,11 @@ def test_format_arrays(): expect_arrays() # Add to end but with very high index - format.insert_array(0xffffffff, array1) + format.insert_array(0x7fffffff, array1) expect_arrays(array1,) - format.insert_array(0xffffffff, array2) + format.insert_array(0x7fffffff, array2) expect_arrays(array1, array2) - format.insert_array(0xffffffff, array3) + format.insert_array(0x7fffffff, array3) expect_arrays(array1, array2, array3) - format.insert_array(0xffffffff, array4) + format.insert_array(0x7fffffff, array4) expect_arrays(array1, array2, array3, array4) From 0fdb8a244b0a845f8d4b835ee1b17b4580ec7b4f Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 24 Feb 2023 22:19:03 +0100 Subject: [PATCH 3/7] dist: Silently ignore missing hidden imports --- direct/src/dist/FreezeTool.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/direct/src/dist/FreezeTool.py b/direct/src/dist/FreezeTool.py index 8e00bbffff..1c541a1d1e 100644 --- a/direct/src/dist/FreezeTool.py +++ b/direct/src/dist/FreezeTool.py @@ -1226,7 +1226,10 @@ class Freezer: except ImportError: pass else: - self.__loadModule(self.ModuleDef(modname, implicit = True)) + try: + self.__loadModule(self.ModuleDef(modname, implicit = True)) + except ImportError: + pass # Special case for sysconfig, which depends on a platform-specific # sysconfigdata module on POSIX systems. From 6cfa73d2680afe7ec408910aef4fc79cf068d336 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 24 Feb 2023 22:19:33 +0100 Subject: [PATCH 4/7] dist: Add hidden import for setuptools.monkey -> setuptools.msvc --- direct/src/dist/FreezeTool.py | 1 + 1 file changed, 1 insertion(+) diff --git a/direct/src/dist/FreezeTool.py b/direct/src/dist/FreezeTool.py index 1c541a1d1e..a3c55075d8 100644 --- a/direct/src/dist/FreezeTool.py +++ b/direct/src/dist/FreezeTool.py @@ -92,6 +92,7 @@ hiddenImports = { 'scipy.spatial.transform._rotation': ['scipy.spatial.transform._rotation_groups'], 'scipy.special._ufuncs': ['scipy.special._ufuncs_cxx'], 'scipy.stats._stats': ['scipy.special.cython_special'], + 'setuptools.monkey': ['setuptools.msvc'], } if sys.version_info >= (3,): From 79ba76031989d823d465a82964b4a3fa5fbd0e53 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 24 Feb 2023 22:20:01 +0100 Subject: [PATCH 5/7] direct: Backport assorted fixes from master --- direct/src/particles/ParticleEffect.py | 4 +--- direct/src/showbase/PythonUtil.py | 2 +- direct/src/showbase/TaskThreaded.py | 3 ++- direct/src/tkpanels/Inspector.py | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/direct/src/particles/ParticleEffect.py b/direct/src/particles/ParticleEffect.py index 82f0904715..bfb15d714f 100644 --- a/direct/src/particles/ParticleEffect.py +++ b/direct/src/particles/ParticleEffect.py @@ -1,7 +1,5 @@ - -from panda3d.core import * - # Leave these imports in, they may be used by ptf files. +from panda3d.core import * from panda3d.physics import * from . import Particles from . import ForceGroup diff --git a/direct/src/showbase/PythonUtil.py b/direct/src/showbase/PythonUtil.py index ea08247823..58d3ce3f14 100644 --- a/direct/src/showbase/PythonUtil.py +++ b/direct/src/showbase/PythonUtil.py @@ -1827,7 +1827,7 @@ class DelayedCall: self._removeDoLater() def finish(self): if not self._finished: - self._doCallback() + self._doCallback(None) self.destroy() def _addDoLater(self): taskMgr.doMethodLater(self._delay, self._doCallback, self._taskName) diff --git a/direct/src/showbase/TaskThreaded.py b/direct/src/showbase/TaskThreaded.py index a6634cd751..279c224a21 100755 --- a/direct/src/showbase/TaskThreaded.py +++ b/direct/src/showbase/TaskThreaded.py @@ -44,7 +44,8 @@ class TaskThreaded: self.ignoreAll() def getTimeslice(self): - return self.___timeslice + return self.__timeslice + def setTimeslice(self, timeslice): self.__timeslice = timeslice diff --git a/direct/src/tkpanels/Inspector.py b/direct/src/tkpanels/Inspector.py index ddbbe30dc1..70f67fa2bc 100644 --- a/direct/src/tkpanels/Inspector.py +++ b/direct/src/tkpanels/Inspector.py @@ -219,7 +219,7 @@ class SequenceInspector(Inspector): if partNumber == 0: return self.object index = self.privatePartNumber(partNumber) - if type(index) == IntType: + if isinstance(index, int): return self.object[index] else: return getattr(self.object, index) From a5be6fa5ffc2f278215484444ad83067b80bad9d Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 24 Feb 2023 22:21:27 +0100 Subject: [PATCH 6/7] pnmimagetypes: Fix compile error with some versions of png.h Some define these as macros, which interferes with these definitions --- panda/src/pnmimagetypes/pnmFileTypePNG.cxx | 16 ++++++++-------- panda/src/pnmimagetypes/pnmFileTypePNG.h | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/panda/src/pnmimagetypes/pnmFileTypePNG.cxx b/panda/src/pnmimagetypes/pnmFileTypePNG.cxx index e4b144dd95..9cd3b3c15b 100644 --- a/panda/src/pnmimagetypes/pnmFileTypePNG.cxx +++ b/panda/src/pnmimagetypes/pnmFileTypePNG.cxx @@ -453,8 +453,8 @@ png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { * This is our own warning handler. It is called by the png library to issue * a warning message. */ -void PNMFileTypePNG::Reader:: -png_warning(png_structp, png_const_charp warning_msg) { +void (PNMFileTypePNG::Reader:: +png_warning)(png_structp, png_const_charp warning_msg) { pnmimage_png_cat.warning() << warning_msg << "\n"; } @@ -463,8 +463,8 @@ png_warning(png_structp, png_const_charp warning_msg) { * This is our own error handler. It is called by the png library to issue a * fatal error message. */ -void PNMFileTypePNG::Reader:: -png_error(png_structp png_ptr, png_const_charp error_msg) { +void (PNMFileTypePNG::Reader:: +png_error)(png_structp png_ptr, png_const_charp error_msg) { pnmimage_png_cat.error() << error_msg << "\n"; @@ -923,8 +923,8 @@ png_flush_data(png_structp png_ptr) { * This is our own warning handler. It is called by the png library to issue * a warning message. */ -void PNMFileTypePNG::Writer:: -png_warning(png_structp, png_const_charp warning_msg) { +void (PNMFileTypePNG::Writer:: +png_warning)(png_structp, png_const_charp warning_msg) { pnmimage_png_cat.warning() << warning_msg << "\n"; } @@ -933,8 +933,8 @@ png_warning(png_structp, png_const_charp warning_msg) { * This is our own error handler. It is called by the png library to issue a * fatal error message. */ -void PNMFileTypePNG::Writer:: -png_error(png_structp png_ptr, png_const_charp error_msg) { +void (PNMFileTypePNG::Writer:: +png_error)(png_structp png_ptr, png_const_charp error_msg) { pnmimage_png_cat.error() << error_msg << "\n"; diff --git a/panda/src/pnmimagetypes/pnmFileTypePNG.h b/panda/src/pnmimagetypes/pnmFileTypePNG.h index 3c1df88cbc..b0455ea3b2 100644 --- a/panda/src/pnmimagetypes/pnmFileTypePNG.h +++ b/panda/src/pnmimagetypes/pnmFileTypePNG.h @@ -58,8 +58,8 @@ public: static void png_read_data(png_structp png_ptr, png_bytep data, png_size_t length); - static void png_error(png_structp png_ptr, png_const_charp error_msg); - static void png_warning(png_structp png_ptr, png_const_charp warning_msg); + static void (png_error)(png_structp png_ptr, png_const_charp error_msg); + static void (png_warning)(png_structp png_ptr, png_const_charp warning_msg); png_structp _png; png_infop _info; @@ -84,8 +84,8 @@ public: png_size_t length); static void png_flush_data(png_structp png_ptr); - static void png_error(png_structp png_ptr, png_const_charp error_msg); - static void png_warning(png_structp png_ptr, png_const_charp warning_msg); + static void (png_error)(png_structp png_ptr, png_const_charp error_msg); + static void (png_warning)(png_structp png_ptr, png_const_charp warning_msg); png_structp _png; png_infop _info; From 622eda951f055d210b6ad058d581a865d975e5d5 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 24 Feb 2023 22:24:41 +0100 Subject: [PATCH 7/7] dist: Implement fallback for sysconfig for FreezeTool (see #1395) --- direct/src/dist/FreezeTool.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/direct/src/dist/FreezeTool.py b/direct/src/dist/FreezeTool.py index a3c55075d8..04dad43c7d 100644 --- a/direct/src/dist/FreezeTool.py +++ b/direct/src/dist/FreezeTool.py @@ -9,7 +9,10 @@ import imp import platform import struct import io -import distutils.sysconfig as sysconf +try: + import distutils.sysconfig as sysconf +except ImportError: + import sysconfig as sysconf import zipfile import importlib @@ -223,7 +226,10 @@ class CompilationEnvironment: # Paths to Python stuff. self.Python = None - self.PythonIPath = sysconf.get_python_inc() + if hasattr(sysconf, 'get_python_inc'): + self.PythonIPath = sysconf.get_python_inc() + else: + self.PythonIPath = sysconf.get_path('include') self.PythonVersion = sysconf.get_config_var("LDVERSION") or sysconf.get_python_version() # The VC directory of Microsoft Visual Studio (if relevant)