From a11e21e4f4033bddb20249936bd0ff9336132127 Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 12 Dec 2020 19:50:48 +0100 Subject: [PATCH 1/9] audio: Fix sound resuming after reactivation if stop() was called while inactive Backport of fix for #559 --- panda/src/audiotraits/fmodAudioSound.cxx | 6 ++++-- panda/src/audiotraits/openalAudioSound.cxx | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/panda/src/audiotraits/fmodAudioSound.cxx b/panda/src/audiotraits/fmodAudioSound.cxx index e81695969c..260228225a 100644 --- a/panda/src/audiotraits/fmodAudioSound.cxx +++ b/panda/src/audiotraits/fmodAudioSound.cxx @@ -259,6 +259,7 @@ stop() { } } _start_time = 0.0; + _paused = false; } @@ -827,12 +828,13 @@ set_active(bool active) { } else { // ...deactivate the sound. if (status() == PLAYING) { + PN_stdfloat time = get_time(); + stop(); if (get_loop_count() == 0) { // ...we're pausing a looping sound. _paused = true; - _start_time = get_time(); + _start_time = time; } - stop(); } } } diff --git a/panda/src/audiotraits/openalAudioSound.cxx b/panda/src/audiotraits/openalAudioSound.cxx index 9244b7509f..bb4b9f9ae4 100644 --- a/panda/src/audiotraits/openalAudioSound.cxx +++ b/panda/src/audiotraits/openalAudioSound.cxx @@ -217,6 +217,8 @@ stop() { _stream_queued.resize(0); } + _paused = false; + _manager->stopping_sound(this); release_sound_data(false); } @@ -813,11 +815,11 @@ set_active(bool active) { } else { // ...deactivate the sound. if (status()==PLAYING) { + stop(); if (_loop_count==0) { // ...we're pausing a looping sound. _paused=true; } - stop(); } } } From fa8c8e71b53f161d48b28492b156ab821d9bd8fb Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 14 Dec 2020 16:54:20 +0100 Subject: [PATCH 2/9] gobj: Assert instead of crash if primitive references out-of-bounds vert --- panda/src/gobj/geomPrimitive.cxx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/panda/src/gobj/geomPrimitive.cxx b/panda/src/gobj/geomPrimitive.cxx index e55ea41ec8..6529de2f80 100644 --- a/panda/src/gobj/geomPrimitive.cxx +++ b/panda/src/gobj/geomPrimitive.cxx @@ -1627,6 +1627,8 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point, for (; i < cdata->_num_vertices; ++i) { reader.set_row_unsafe(cdata->_first_vertex + i); + nassertv(!reader.is_at_end()); + LPoint3 vertex = mat.xform_point_general(reader.get_data3()); min_point.set(min(min_point[0], vertex[0]), @@ -1653,6 +1655,8 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point, for (; i < cdata->_num_vertices; ++i) { reader.set_row_unsafe(cdata->_first_vertex + i); + nassertv(!reader.is_at_end()); + const LVecBase3 &vertex = reader.get_data3(); min_point.set(min(min_point[0], vertex[0]), @@ -1696,6 +1700,8 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point, continue; } reader.set_row_unsafe(ii); + nassertv(!reader.is_at_end()); + LPoint3 vertex = mat.xform_point_general(reader.get_data3()); min_point.set(min(min_point[0], vertex[0]), @@ -1728,6 +1734,8 @@ calc_tight_bounds(LPoint3 &min_point, LPoint3 &max_point, continue; } reader.set_row_unsafe(ii); + nassertv(!reader.is_at_end()); + const LVecBase3 &vertex = reader.get_data3(); min_point.set(min(min_point[0], vertex[0]), From 8883bf9bddab965106746e0200fadc1af970f6e8 Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 15 Dec 2020 11:45:52 +0100 Subject: [PATCH 3/9] dgui: Fix ability to create OnscreenGeom/Image/Text without ShowBase --- direct/src/gui/OnscreenGeom.py | 5 +++-- direct/src/gui/OnscreenImage.py | 5 +++-- direct/src/gui/OnscreenText.py | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/direct/src/gui/OnscreenGeom.py b/direct/src/gui/OnscreenGeom.py index e1a35a77d1..076d18a77f 100644 --- a/direct/src/gui/OnscreenGeom.py +++ b/direct/src/gui/OnscreenGeom.py @@ -47,8 +47,9 @@ class OnscreenGeom(DirectObject, NodePath): """ # We ARE a node path. Initially, we're an empty node path. NodePath.__init__(self) - if parent == None: - parent = aspect2d + if parent is None: + from direct.showbase import ShowBaseGlobal + parent = ShowBaseGlobal.aspect2d self.setGeom(geom, parent = parent, sort = sort, color = color) diff --git a/direct/src/gui/OnscreenImage.py b/direct/src/gui/OnscreenImage.py index 3d8a9b0633..fc3487cc72 100644 --- a/direct/src/gui/OnscreenImage.py +++ b/direct/src/gui/OnscreenImage.py @@ -54,8 +54,9 @@ class OnscreenImage(DirectObject, NodePath): # We ARE a node path. Initially, we're an empty node path. NodePath.__init__(self) - if parent == None: - parent = aspect2d + if parent is None: + from direct.showbase import ShowBaseGlobal + parent = ShowBaseGlobal.aspect2d self.setImage(image, parent = parent, sort = sort) # Adjust pose diff --git a/direct/src/gui/OnscreenText.py b/direct/src/gui/OnscreenText.py index 4491c918e9..1a35152f40 100644 --- a/direct/src/gui/OnscreenText.py +++ b/direct/src/gui/OnscreenText.py @@ -104,8 +104,9 @@ class OnscreenText(NodePath): direction: this can be set to 'ltr' or 'rtl' to override the direction of the text. """ - if parent == None: - parent = aspect2d + if parent is None: + from direct.showbase import ShowBaseGlobal + parent = ShowBaseGlobal.aspect2d # make a text node textNode = TextNode('') From 10ef9b3456f1cda197e387f5cfac2df1a68a9e73 Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 15 Dec 2020 12:32:40 +0100 Subject: [PATCH 4/9] makepanda: recognize --osxtarget 11, --universal should add arm64 --- makepanda/makepanda.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index d2e8c9f598..1ba12340c6 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -291,12 +291,17 @@ def parseopts(args): elif (optimize==""): optimize = "3" if OSXTARGET: + parts = OSXTARGET.strip().split('.') try: - maj, min = OSXTARGET.strip().split('.') - OSXTARGET = int(maj), int(min) - assert OSXTARGET[0] >= 10 + assert len(parts) <= 2 + maj = int(parts[0]) + min = 0 + if len(parts) > 1: + min = int(parts[1]) + OSXTARGET = maj, min + assert OSXTARGET >= (10, 4) except: - usage("Invalid setting for OSXTARGET") + usage("Invalid setting for --osxtarget") else: OSXTARGET = None @@ -313,14 +318,17 @@ def parseopts(args): maj, min = platform.mac_ver()[0].split('.')[:2] osxver = int(maj), int(min) - if osxver[0] == 10 and osxver[1] < 15: + if osxver < (10, 15): OSX_ARCHS.append("i386") - if osxver[0] == 10 and osxver[1] < 6: + if osxver < (10, 6): OSX_ARCHS.append("ppc") else: OSX_ARCHS.append("x86_64") + if osxver >= (11, 0): + OSX_ARCHS.append("arm64") + elif HasTargetArch(): OSX_ARCHS.append(GetTargetArch()) From 6f35cb023504d6b8487430a262a272224c04440f Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 15 Dec 2020 12:33:22 +0100 Subject: [PATCH 5/9] device: Silently ignore invalid evdev keycodes generated by some drivers Fixes #1066 --- panda/src/device/evdevInputDevice.cxx | 34 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/panda/src/device/evdevInputDevice.cxx b/panda/src/device/evdevInputDevice.cxx index 9407650898..db6285ba19 100644 --- a/panda/src/device/evdevInputDevice.cxx +++ b/panda/src/device/evdevInputDevice.cxx @@ -806,23 +806,33 @@ process_events() { button_changed(_dpad_up_button, events[i].value < 0); button_changed(_dpad_up_button+1, events[i].value > 0); } - nassertd(code >= 0 && (size_t)code < _axis_indices.size()) break; - index = _axis_indices[code]; - if (index >= 0) { - axis_changed(index, events[i].value); + if (code >= 0 && (size_t)code < _axis_indices.size()) { + index = _axis_indices[code]; + if (index >= 0) { + axis_changed(index, events[i].value); + } + } + else if (device_cat.is_debug()) { + device_cat.debug() + << "Ignoring EV_ABS event with unknown code " << code << "\n"; } break; case EV_KEY: - nassertd(code >= 0 && (size_t)code < _button_indices.size()) break; - index = _button_indices[code]; - if (index >= 0) { - button_changed(index, events[i].value != 0); + if (code >= 0 && (size_t)code < _button_indices.size()) { + index = _button_indices[code]; + if (index >= 0) { + button_changed(index, events[i].value != 0); + } + if (code == _ltrigger_code) { + axis_changed(_ltrigger_axis, events[i].value); + } else if (code == _rtrigger_code) { + axis_changed(_ltrigger_axis + 1, events[i].value); + } } - if (code == _ltrigger_code) { - axis_changed(_ltrigger_axis, events[i].value); - } else if (code == _rtrigger_code) { - axis_changed(_ltrigger_axis + 1, events[i].value); + else if (device_cat.is_debug()) { + device_cat.debug() + << "Ignoring EV_KEY event with unknown code " << code << "\n"; } break; From 4d50e73132f387b4a2c6312d9fe8136154995cf7 Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 15 Dec 2020 18:59:04 +0100 Subject: [PATCH 6/9] pfreeze: Support building for macOS arm64 architecture --- direct/src/dist/FreezeTool.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/direct/src/dist/FreezeTool.py b/direct/src/dist/FreezeTool.py index f2c39e88b4..a6a5ab63b9 100644 --- a/direct/src/dist/FreezeTool.py +++ b/direct/src/dist/FreezeTool.py @@ -222,7 +222,7 @@ class CompilationEnvironment: self.linkDll = 'link /nologo /DLL /MAP:NUL /FIXED:NO /OPT:REF /INCREMENTAL:NO /LIBPATH:"%(PSDK)s\\lib" /LIBPATH:"%(MSVC)s\\lib%(suffix64)s" /LIBPATH:"%(python)s\\libs" /out:%(basename)s%(dllext)s.pyd %(basename)s.obj' elif self.platform.startswith('osx_'): - # OSX + # macOS proc = self.platform.split('_', 1)[1] if proc == 'i386': self.arch = '-arch i386' @@ -230,6 +230,8 @@ class CompilationEnvironment: self.arch = '-arch ppc' elif proc == 'amd64': self.arch = '-arch x86_64' + elif proc in ('arm64', 'aarch64'): + self.arch = '-arch arm64' self.compileObjExe = "gcc -c %(arch)s -o %(basename)s.o -O2 -I%(pythonIPath)s %(filename)s" self.compileObjDll = "gcc -fPIC -c %(arch)s -o %(basename)s.o -O2 -I%(pythonIPath)s %(filename)s" self.linkExe = "gcc %(arch)s -o %(basename)s %(basename)s.o -framework Python" From a18edf54b702e0ac2b72a1095f5e241df8780767 Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 17 Dec 2020 12:25:06 +0100 Subject: [PATCH 7/9] makepanda: Changes to support build for macOS 11.0 / arm64 Besides use of --universal with --osxtarget 11, it's now also possible to create a fat build with ARM64 by using --osxtarget 10.9 --arch x86_64 --arch arm64 (it will use the 11.x SDK but target 10.9) FMOD Ex is also being disabled when building against the 10.14 SDK or higher, because the necessary libstdc++.6.0.9.dylib is no longer being shipped. FMOD Ex, libRocket and Cg are all disabled on ARM64 (FMOD Ex and Cg don't have the binaries available, libRocket could theoretically be built but there's no point as there won't be an ARM64 build of Python 2.7, and besides, we've deprecated it anyway). Fixes #1062 --- makepanda/makepanda.py | 73 ++++++++++++++++++++++++++++---------- makepanda/makepandacore.py | 20 ++++++++--- 2 files changed, 70 insertions(+), 23 deletions(-) diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index 1ba12340c6..cee2bb4552 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -194,7 +194,7 @@ def parseopts(args): anything = 0 optimize = "" target = None - target_arch = None + target_archs = [] universal = False clean_build = False for pkg in PkgListGet(): @@ -223,7 +223,7 @@ def parseopts(args): elif (option=="--osxtarget"): OSXTARGET=value.strip() elif (option=="--universal"): universal = True elif (option=="--target"): target = value.strip() - elif (option=="--arch"): target_arch = value.strip() + elif (option=="--arch"): target_archs.append(value.strip()) elif (option=="--nocolor"): DisableColors() elif (option=="--version"): match = re.match(r'^\d+\.\d+(\.\d+)+', value) @@ -305,8 +305,8 @@ def parseopts(args): else: OSXTARGET = None - if target is not None or target_arch is not None: - SetTarget(target, target_arch) + if target is not None or target_archs: + SetTarget(target, target_archs[-1] if target_archs else None) if universal: if target_arch: @@ -329,8 +329,11 @@ def parseopts(args): if osxver >= (11, 0): OSX_ARCHS.append("arm64") - elif HasTargetArch(): - OSX_ARCHS.append(GetTargetArch()) + elif target_archs: + OSX_ARCHS = target_archs + + if 'arm64' in target_archs and OSXTARGET and OSXTARGET < (10, 9): + exit("Must have at least --osxtarget 10.9 when targeting arm64") try: SetOptimize(int(optimize)) @@ -442,6 +445,9 @@ elif target == 'darwin': else: maj, min = platform.mac_ver()[0].split('.')[:2] osxver = int(maj), int(min) + if osxver[0] == 11: + # I think Python pins minor version to 0 from macOS 11 onward + osxver = (osxver[0], 0) arch_tag = None if not OSX_ARCHS: @@ -591,7 +597,7 @@ MakeBuildTree() SdkLocateDirectX(STRDXSDKVERSION) SdkLocateMaya() SdkLocateMax() -SdkLocateMacOSX(OSXTARGET) +SdkLocateMacOSX(OSXTARGET, OSX_ARCHS) SdkLocatePython(RTDIST) SdkLocateWindows(WINDOWS_SDK) SdkLocatePhysX() @@ -927,6 +933,19 @@ if (COMPILER=="GCC"): # 64-bits macOS doesn't have Carbon. PkgDisable("CARBON") + if GetTarget() == 'darwin': + if 'x86_64' not in OSX_ARCHS and 'i386' not in OSX_ARCHS: + # These support only these archs, so don't build them if we're not + # targeting any of the supported archs. + PkgDisable("FMODEX") + PkgDisable("NVIDIACG") + PkgDisable("ROCKET") + elif (OSX_ARCHS and 'arm64' in OSX_ARCHS) or \ + (OSXTARGET and OSXTARGET >= (10, 14)) or \ + (not OSXTARGET and not os.path.isfile('/usr/lib/libstdc++.6.0.9.dylib')): + # Also, we can't target FMOD Ex with the 10.14 SDK + PkgDisable("FMODEX") + #if (PkgSkip("PYTHON")==0): # IncDirectory("PYTHON", SDK["PYTHON"]) if (GetHost() == "darwin"): @@ -989,7 +1008,8 @@ if (COMPILER=="GCC"): if not PkgSkip("FFMPEG"): if GetTarget() == "darwin": - LibName("FFMPEG", "-Wl,-read_only_relocs,suppress") + if 'i386' in OSX_ARCHS or 'ppc' in OSX_ARCHS: + LibName("FFMPEG", "-Wl,-read_only_relocs,suppress") LibName("FFMPEG", "-framework VideoDecodeAcceleration") elif os.path.isfile(GetThirdpartyDir() + "ffmpeg/lib/libavcodec.a"): # Needed when linking ffmpeg statically on Linux. @@ -1477,6 +1497,8 @@ def CompileCxx(obj,src,opts): if OSXTARGET is not None: cmd += " -isysroot " + SDK["MACOSX"] cmd += " -mmacosx-version-min=%d.%d" % (OSXTARGET) + elif platform.mac_ver()[0].startswith('11.'): + cmd += " -mmacosx-version-min=11.0" for arch in OSX_ARCHS: if 'NOARCH:' + arch.upper() not in opts: @@ -1997,6 +2019,8 @@ def CompileLink(dll, obj, opts): if OSXTARGET is not None: cmd += " -isysroot " + SDK["MACOSX"] + " -Wl,-syslibroot," + SDK["MACOSX"] cmd += " -mmacosx-version-min=%d.%d" % (OSXTARGET) + elif platform.mac_ver()[0].startswith('11.'): + cmd += " -mmacosx-version-min=11.0" for arch in OSX_ARCHS: if 'NOARCH:' + arch.upper() not in opts: @@ -2765,8 +2789,19 @@ def WriteConfigSettings(): conf = "/* dtool_config.h. Generated automatically by makepanda.py */\n" for key in sorted(dtool_config.keys()): val = OverrideValue(key, dtool_config[key]) - if (val == 'UNDEF'): conf = conf + "#undef " + key + "\n" - else: conf = conf + "#define " + key + " " + val + "\n" + + if key in ('HAVE_CG', 'HAVE_CGGL', 'HAVE_CGDX9') and val != 'UNDEF': + # These are not available for ARM, period. + conf = conf + "#ifdef __aarch64__\n" + conf = conf + "#undef " + key + "\n" + conf = conf + "#else\n" + conf = conf + "#define " + key + " " + val + "\n" + conf = conf + "#endif\n" + elif val == 'UNDEF': + conf = conf + "#undef " + key + "\n" + else: + conf = conf + "#define " + key + " " + val + "\n" + ConditionalWriteFile(GetOutputDir() + '/include/dtool_config.h', conf) if (RTDIST or RUNTIME): @@ -4625,14 +4660,14 @@ if (PkgSkip("VISION") == 0) and (not RUNTIME): # if (PkgSkip("ROCKET") == 0) and (not RUNTIME): - OPTS=['DIR:panda/src/rocket', 'BUILDING:ROCKET', 'ROCKET', 'PYTHON'] + OPTS=['DIR:panda/src/rocket', 'BUILDING:ROCKET', 'ROCKET', 'PYTHON', 'NOARCH:ARM64'] TargetAdd('p3rocket_composite1.obj', opts=OPTS, input='p3rocket_composite1.cxx') TargetAdd('libp3rocket.dll', input='p3rocket_composite1.obj') TargetAdd('libp3rocket.dll', input=COMMON_PANDA_LIBS) TargetAdd('libp3rocket.dll', opts=OPTS) - OPTS=['DIR:panda/src/rocket', 'ROCKET', 'RTTI', 'EXCEPTIONS'] + OPTS=['DIR:panda/src/rocket', 'ROCKET', 'RTTI', 'EXCEPTIONS', 'NOARCH:ARM64'] IGATEFILES=GetDirectoryContents('panda/src/rocket', ["rocketInputHandler.h", "rocketInputHandler.cxx", "rocketRegion.h", "rocketRegion.cxx", "rocketRegion_ext.h"]) TargetAdd('libp3rocket.in', opts=OPTS, input=IGATEFILES) @@ -4650,7 +4685,7 @@ if (PkgSkip("ROCKET") == 0) and (not RUNTIME): PyTargetAdd('rocket.pyd', input='libp3rocket.dll') PyTargetAdd('rocket.pyd', input='libp3interrogatedb.dll') PyTargetAdd('rocket.pyd', input=COMMON_PANDA_LIBS) - PyTargetAdd('rocket.pyd', opts=['ROCKET']) + PyTargetAdd('rocket.pyd', opts=['ROCKET', 'NOARCH:ARM64']) # # DIRECTORY: panda/src/p3skel @@ -5201,10 +5236,10 @@ if (PkgSkip("BULLET")==0 and not RUNTIME): # if (PkgSkip("PHYSX")==0): - OPTS=['DIR:panda/src/physx', 'BUILDING:PANDAPHYSX', 'PHYSX', 'NOARCH:PPC'] + OPTS=['DIR:panda/src/physx', 'BUILDING:PANDAPHYSX', 'PHYSX', 'NOARCH:PPC', 'NOARCH:ARM64'] TargetAdd('p3physx_composite.obj', opts=OPTS, input='p3physx_composite.cxx') - OPTS=['DIR:panda/src/physx', 'PHYSX', 'NOARCH:PPC'] + OPTS=['DIR:panda/src/physx', 'PHYSX', 'NOARCH:PPC', 'NOARCH:ARM64'] IGATEFILES=GetDirectoryContents('panda/src/physx', ["*.h", "*_composite*.cxx"]) TargetAdd('libpandaphysx.in', opts=OPTS, input=IGATEFILES) TargetAdd('libpandaphysx.in', opts=['IMOD:panda3d.physx', 'ILIB:libpandaphysx', 'SRCDIR:panda/src/physx']) @@ -5214,15 +5249,15 @@ if (PkgSkip("PHYSX")==0): # if (PkgSkip("PHYSX")==0): - OPTS=['DIR:panda/metalibs/pandaphysx', 'BUILDING:PANDAPHYSX', 'PHYSX', 'NOARCH:PPC', 'PYTHON'] + OPTS=['DIR:panda/metalibs/pandaphysx', 'BUILDING:PANDAPHYSX', 'PHYSX', 'NOARCH:PPC', 'NOARCH:ARM64', 'PYTHON'] TargetAdd('pandaphysx_pandaphysx.obj', opts=OPTS, input='pandaphysx.cxx') TargetAdd('libpandaphysx.dll', input='pandaphysx_pandaphysx.obj') TargetAdd('libpandaphysx.dll', input='p3physx_composite.obj') TargetAdd('libpandaphysx.dll', input=COMMON_PANDA_LIBS) - TargetAdd('libpandaphysx.dll', opts=['WINUSER', 'PHYSX', 'NOARCH:PPC', 'PYTHON']) + TargetAdd('libpandaphysx.dll', opts=['WINUSER', 'PHYSX', 'NOARCH:PPC', 'NOARCH:ARM64', 'PYTHON']) - OPTS=['DIR:panda/metalibs/pandaphysx', 'PHYSX', 'NOARCH:PPC'] + OPTS=['DIR:panda/metalibs/pandaphysx', 'PHYSX', 'NOARCH:PPC', 'NOARCH:ARM64'] PyTargetAdd('physx_module.obj', input='libpandaphysx.in') PyTargetAdd('physx_module.obj', opts=OPTS) PyTargetAdd('physx_module.obj', opts=['IMOD:panda3d.physx', 'ILIB:physx', 'IMPORT:panda3d.core']) @@ -5232,7 +5267,7 @@ if (PkgSkip("PHYSX")==0): PyTargetAdd('physx.pyd', input='libpandaphysx.dll') PyTargetAdd('physx.pyd', input='libp3interrogatedb.dll') PyTargetAdd('physx.pyd', input=COMMON_PANDA_LIBS) - PyTargetAdd('physx.pyd', opts=['WINUSER', 'PHYSX', 'NOARCH:PPC']) + PyTargetAdd('physx.pyd', opts=['WINUSER', 'PHYSX', 'NOARCH:PPC', 'NOARCH:ARM64']) # # DIRECTORY: panda/src/physics/ diff --git a/makepanda/makepandacore.py b/makepanda/makepandacore.py index de4b324bd5..fdb10d8388 100644 --- a/makepanda/makepandacore.py +++ b/makepanda/makepandacore.py @@ -2438,10 +2438,17 @@ def SdkLocateWindows(version = '7.1'): else: print("Using Windows SDK %s" % (version)) -def SdkLocateMacOSX(osxtarget = None): +def SdkLocateMacOSX(osxtarget = None, archs = []): if (GetHost() != "darwin"): return if (osxtarget != None): - sdkname = "MacOSX%d.%d" % osxtarget + if osxtarget < (11, 0) and 'arm64' in archs: + # Building for arm64 requires the 11.0 SDK, with which we can still + # target 10.9. + assert osxtarget >= (10, 9) + sdkname = "MacOSX11.0" + else: + sdkname = "MacOSX%d.%d" % osxtarget + if (os.path.exists("/Library/Developer/CommandLineTools/SDKs/%s.sdk" % sdkname)): SDK["MACOSX"] = "/Library/Developer/CommandLineTools/SDKs/%s.sdk" % sdkname elif (os.path.exists("/Developer/SDKs/%su.sdk" % sdkname)): @@ -2458,13 +2465,18 @@ def SdkLocateMacOSX(osxtarget = None): handle.close() if (os.path.exists("%s/Platforms/MacOSX.platform/Developer/SDKs/%s.sdk" % (result, sdkname))): SDK["MACOSX"] = "%s/Platforms/MacOSX.platform/Developer/SDKs/%s.sdk" % (result, sdkname) + elif sdkname == "MacOSX11.0" and os.path.exists("/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk"): + SDK["MACOSX"] = "/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk" else: - exit("Couldn't find any MacOSX SDK for OSX version %s!" % sdkname) + exit("Couldn't find any MacOSX SDK for macOS version %s!" % sdkname) SDK["OSXTARGET"] = osxtarget else: SDK["MACOSX"] = "" maj, min = platform.mac_ver()[0].split('.')[:2] - SDK["OSXTARGET"] = int(maj), int(min) + if int(maj) == 11: + SDK["OSXTARGET"] = int(maj), 0 + else: + SDK["OSXTARGET"] = int(maj), int(min) # Latest first PHYSXVERSIONINFO = [ From 66c41d6c31646ac946d5803d28e280a09ab7f4bc Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 17 Dec 2020 23:59:50 +0100 Subject: [PATCH 8/9] dist: Fix ability to deploy app without requiring OpenSSL enabled Fixes #1073 --- direct/src/p3d/DeploymentTools.py | 7 ++++--- direct/src/p3d/HostInfo.py | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/direct/src/p3d/DeploymentTools.py b/direct/src/p3d/DeploymentTools.py index 12b90a080c..23c5faf847 100644 --- a/direct/src/p3d/DeploymentTools.py +++ b/direct/src/p3d/DeploymentTools.py @@ -13,9 +13,10 @@ import os, sys, subprocess, tarfile, shutil, time, zipfile, socket, getpass, str import gzip, plistlib from direct.directnotify.DirectNotifyGlobal import * from direct.showbase.AppRunnerGlobal import appRunner -from panda3d.core import PandaSystem, HTTPClient, Filename, VirtualFileSystem, Multifile +from panda3d.core import PandaSystem, Filename, VirtualFileSystem, Multifile from panda3d.core import TiXmlDocument, TiXmlDeclaration, TiXmlElement, readXmlStream from panda3d.core import PNMImage, PNMFileTypeRegistry, StringStream +from panda3d import core from direct.stdpy.file import * from direct.p3d.HostInfo import HostInfo # This is important for some reason @@ -87,7 +88,7 @@ class Standalone: self.tempDir.makeDir() self.host = HostInfo(PandaSystem.getPackageHostUrl(), appRunner = appRunner, hostDir = self.tempDir, asMirror = False, perPlatform = True) - self.http = HTTPClient.getGlobalPtr() + self.http = core.HTTPClient.getGlobalPtr() if not self.host.hasContentsFile: if not self.host.readContentsFile(): if not self.host.downloadContentsFile(self.http): @@ -245,7 +246,7 @@ class PackageTree: self.hostUrl = hostUrl self.hostDir = Filename(hostDir) self.hostDir.makeDir() - self.http = HTTPClient.getGlobalPtr() + self.http = core.HTTPClient.getGlobalPtr() def getHost(self, hostUrl): if hostUrl in self.hosts: diff --git a/direct/src/p3d/HostInfo.py b/direct/src/p3d/HostInfo.py index 08b2081497..16f8e123bd 100644 --- a/direct/src/p3d/HostInfo.py +++ b/direct/src/p3d/HostInfo.py @@ -6,7 +6,7 @@ __all__ = ["HostInfo"] from panda3d.core import HashVal, Filename, PandaSystem, DocumentSpec, Ramfile -from panda3d.core import HTTPChannel, ConfigVariableInt +from panda3d.core import ConfigVariableInt from panda3d import core from direct.p3d.PackageInfo import PackageInfo from direct.p3d.FileSpec import FileSpec @@ -230,8 +230,8 @@ class HostInfo: self.notify.warning("Unable to download %s" % (url,)) try: # Something screwed up. - if statusCode == HTTPChannel.SCDownloadOpenError or \ - statusCode == HTTPChannel.SCDownloadWriteError: + if statusCode == core.HTTPChannel.SCDownloadOpenError or \ + statusCode == core.HTTPChannel.SCDownloadWriteError: launcher.setPandaErrorCode(2) elif statusCode == 404: # 404 not found From 9544911127d976a667753e5364450ea067f577f0 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 18 Dec 2020 12:54:19 +0100 Subject: [PATCH 9/9] makepanda: fix error building with --universal flag [skip ci] --- makepanda/makepanda.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index cee2bb4552..609218002c 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -309,7 +309,7 @@ def parseopts(args): SetTarget(target, target_archs[-1] if target_archs else None) if universal: - if target_arch: + if target_archs: exit("--universal is incompatible with --arch") if OSXTARGET: