panda3d app, working under osx intel tiger/leopard

Update:
17.3.2008:

  • A new version based on 1.5.0 is released, see the version notes for details (below).
    21.5.2008:
  • added a mirror for the file (by server crashed)

Whats is it:

I’ve put together a application which executes any panda3d script under (intel) osx. Due to the appdir structure it’s possible to replace the python script inside the application easily.

I could pack the app down to 108MB (extracted) or 40MB (dmg compressed). The librarys are not stripped yet afaik.

Mayor features:

  • afaik the only panda3d application package under osx
  • supporting openal and ffmpeg
  • since version 0.6.0 tested under 10.4.0 and 10.5
  • since version 0.7.0 also with fmod support

Mayor bugs:

  • OpenAl is very! limited (can only play 1 sound)
  • Only tested on intel macs
  • No support for ppc processors (never tried but should not work)

Download:
http://public.nouser.org/~rspoerri/Development/python/panda3d/projects/p3dapp/ (21.5.08 currently offline)
mirror: http://www.mediafire.com/?zs0i3msojpt
Version 0.4.2:

  • i have been reported that the zip might be corrupt, so use the dmg file, this might apply to the 4.1 version as well (but there is not dmg)…
  • You should apply the fixes in the second post if you want to be up2date.
    Version 0.5.1:
  • now accepts drag&drop onto the app, makes it possible to use as pview (but not implemented to do so)
    Version 0.6.1:
  • now works under tiger, with limited openal support (only 1 audio channel)
    Version 0.7.0:
  • additional ffmpeg support due to openal limits.
  • the builtin python libs are now compressed, saving 10MB on extracted size.
    Version 0.8.0:
  • built from 1.5.0 release
  • ffmpeg included
  • no openal (doesnt work correctly anyway)
  • with pandatools
  • a bit larger
  • not tested on 10.4 (but most likely works)

Todo’s:

  • get a script together which will automate the package build process

Notes:

  • If the package fails to execute it will immediately close. You can get log messages from the log konsole of osx
  • To get all output of the app, just open a console and call Contents/MacOS/p3dapp

For those who want to customize it:

p3dapp.app/Contents/Resources/script:
defines the environment variables required to run panda3d and python
it also cd’s into p3dapp.app/Contents/Resources/project/ and calls the main.py script in there.
V0.7.0: you have to change the script so it launches the application correctly.

p3dapp.app/Contents/Resources/project/main.py:
can be replaced by any script you want… (it currently import the TutMediaPlayer, 0.7.0 Tut-Music-Box), it has some deprecated config variable loading in it.

p3dapp.app/Contents/Resources/panda/etc/:
is where you can place any config.prc you want.

i tried to keep stuff separated, so under the Resources directory you will find the required libs from /usr/lib, /opt/local/lib -> /opt/lib (from darwinports)
Under the Contents/Frameworks you will find the CG, OpenAL and Python Framework.

about the python site-packages, you will find them under:
p3dapp.app/Contents/Framworks/Python.framework/Versions/2.4/lib/python2.4/site-packages
version 0.4.1: it’s filled with various python libs (which i didnt try in the app package)
version 0.4.2: it’s empty
version 0.7.0: it’s empty

For everyone using a older package, please update to version 0.7.0

changes:

  • 21.11.07: updated the Config.pp and the script

How i did it:

  • I generated a basic app using Platypus calling the “script”.
  • I gathered all library’s from darwinports
  • I gathered all libs from /usr/lib which i found they were required
  • I gathered all Frameworks required
  • I created a script modifying the lib-links (using install_name_tool & otool)
  • and tested that

My lib-link modification script, note that this handles not everything automatically, it’s just a hint how i did it, i also modified a lot manually:


import os

appName = 'p3dapp'
appDir = '''/Users/rspoerri/Desktop/p3dapp.app/'''
pandalib = 'Contents/Resources/panda/lib/'

p3dDir = os.path.join(appDir,pandalib)
for filename in os.listdir(p3dDir):
  filepath = os.path.join(p3dDir, filename)
  cmd = "otool -L '%s'" % filepath
  linksList = os.popen(cmd).readlines()
  #print filepath, linksList
  for linkUnstripped in linksList:
    skip = False
    newLink = None
    if '.dylib' in linkUnstripped:
      link = linkUnstripped.split('(compatibility version')[0].strip()
      if '/opt/local/lib/' in link:
        newLink = link.replace( '/opt/local/lib', 'opt/lib')
      if not skip and newLink is not None:
        cmd = "install_name_tool -change %s %s '%s'" % (link, newLink, filepath)
        print cmd
        os.popen(cmd).readlines()

My Config.pp i built the panda3d with:
(requires the ffmpeg/openal patch https://discourse.panda3d.org/viewtopic.php?t=3186)


#define GENPYCODE_LIBS libpandaexpress libpanda libpandaphysics libdirect libpandafx libpandaegg

#define PRC_PATH_ENVVARS CFG_PATH ETC_PATH 
#define DEFAULT_PATHSEP : : 

// should probably not be used
#define LOCAL_INCS /Developer/SDKs/MacOSX10.4u.sdk/usr/include
#define LOCAL_LIBS /Developer/SDKs/MacOSX10.4u.sdk/usr/lib

#define HAVE_PYTHON 1
#define PYTHON_IPATH /Library/Frameworks/Python.framework/Versions/2.4/include/python2.4/
#define PYTHON_LPATH /Library/Frameworks/Python.framework/Versions/2.4/lib/
#define INSTALL_PYTHON_SOURCE 1

#define ZLIB_IPATH /opt/local/include 
#define ZLIB_LPATH /opt/local/lib 

#define JPEG_IPATH /opt/local/include 
#define JPEG_LPATH /opt/local/lib 

#define PNG_IPATH /opt/local/include 
#define PNG_LPATH /opt/local/lib 

// WITH TAR ENABLED PRODUCES THIS ERROR (using sdk10.4):
// in ./src/express
//   *** Error in patchfile.h near line 133, column 33:
//   syntax error, unexpected IDENTIFIER, expecting '{' or ';' or ':' or '='
// Error parsing file: 'patchfile.h'
// make[1]: *** [Opt3-OSX/libexpress_igate.cxx] Error 1
// make: *** [express] Error 2
// #define TAR_IPATH /opt/local/include 
// #define TAR_LPATH /opt/local/lib 

#define TIFF_IPATH /opt/local/include 
#define TIFF_LPATH /opt/local/lib 

#define ODE_IPATH /opt/local/include/ode
#define ODE_LPATH /opt/local/lib

#define ZLIB_IPATH /opt/local/include
#define ZLIB_LPATH /opt/local/lib

#define FFMPEG_IPATH /opt/local/include/ffmpeg
#define FFMPEG_LPATH /opt/local/lib

// prevent -lcg
#define CGGL_LIBS
#define CGGL_FRAMEWORK Cg
#define HAVE_CGGL 1

// prevent -lcg
#define CG_LIBS
// this is wrong, includes -framework cg in src/text, which causes error
//#define CG_FRAMEWORK Cg
#define HAVE_CG 1

// prevent -lopenal
#define OPENAL_LIBS
#define OPENAL_IPATH /Library/Frameworks/OpenAl.framework/Headers
#define PYTHON_LPATH /Library/Frameworks/OpenAl.framework
#define OPENAL_FRAMEWORK OpenAl
#define HAVE_OPENAL 1
#define HAVE_AUDIO 1

#define GL_FRAMEWORK OpenGL
// without this glgsg fails on include
#define GL_IPATH /Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks/OpenGL.framework/Versions/A/headers
#define GL_LPATH /Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks/OpenGL.framework
// or is it /Library/Frameworks/OpenGL.framework/Versions/Current/Libraries/libGL
#define HAVE_GL 1 

#define HAVE_THREADS 1
#define USE_MEMORY_MALLOC 1


// // additional notes:
// // i added /System/Library/Frameworks/IOKit.framework/Versions/A/Headers
// typedef uint64_t		io_user_reference_t;
// // before:
// enum {
//     kOSAsyncRef64Count	= 8,
//     kOSAsyncRef64Size 	= kOSAsyncRef64Count * sizeof(io_user_reference_t)
// };
// typedef io_user_reference_t OSAsyncReference64[kOSAsyncRef64Count];
// // i could not find a different solution, how this works in the end

Wow. That sounds awesome!
I don’t have OSX (unfortunately), otherwise I would test it for you.

Thanks a lot for sharing!

How i created this package:

This is a patch against a 1.4.2 CVS version. For 1.5.0 i recommend to include only some of them (ffmpegTexture.h, ffmpegAudioCursor.cxx, ffmpegVideoCursor.cxx), my 1.5.0 binary was built using this (iirc).

my patch against panda3d. It’s still not usuable to be integrated into the “normal” panda3d, but works better then the previous versions…

Note that this requires a ffmpeg from darwinports and openAl cvs (built with xcode)…

also check out Adrians post in discourse.panda3d.org/viewtopic … &start=150, he did the changes based on a fresh checkout…


Index: panda3d/dtool/Config.OSX.pp
===================================================================
RCS file: /cvsroot/panda3d/dtool/Config.OSX.pp,v
retrieving revision 1.4
diff -u -r1.4 Config.OSX.pp
--- panda3d/dtool/Config.OSX.pp	29 Jun 2007 01:39:09 -0000	1.4
+++ panda3d/dtool/Config.OSX.pp	21 Nov 2007 19:37:14 -0000
@@ -21,6 +21,9 @@
 
 #define IS_OSX 1
 
+// doesnt work?
+//#defer interrogate_ipath $[install_parser_inc_dir:%=-S%] $[target_ipath:%=-I%]
+
 // Assume that OSX has OpenGL available.
 #define HAVE_GL 1
 
Index: panda3d/dtool/Config.pp
===================================================================
RCS file: /cvsroot/panda3d/dtool/Config.pp,v
retrieving revision 1.217
diff -u -r1.217 Config.pp
--- panda3d/dtool/Config.pp	29 Jun 2007 01:39:09 -0000	1.217
+++ panda3d/dtool/Config.pp	21 Nov 2007 19:37:14 -0000
@@ -776,6 +776,13 @@
 #define FMODEX_LIBS fmodex
 #defer HAVE_FMODEX $[libtest $[FMODEX_LPATH],$[FMODEX_LIBS]]
 
+// Info for the OpenAL audio engine
+// note this may be overwritten in wintools Config.pp
+#define OPENAL_IPATH /usr/include
+#define OPENAL_LPATH /usr/lib
+#define OPENAL_LIBS openal
+#defer HAVE_OPENAL $[libtest $[OPENAL_LPATH],$[OPENAL_LIBS]]
+
 // Info for http://www.sourceforge.net/projects/chromium
 // note this may be overwritten in wintools Config.pp
 #define CHROMIUM_IPATH /usr/include/chromium/include
Index: panda3d/dtool/LocalSetup.pp
===================================================================
RCS file: /cvsroot/panda3d/dtool/LocalSetup.pp,v
retrieving revision 1.124
diff -u -r1.124 LocalSetup.pp
--- panda3d/dtool/LocalSetup.pp	20 Jul 2007 23:59:10 -0000	1.124
+++ panda3d/dtool/LocalSetup.pp	21 Nov 2007 19:37:15 -0000
@@ -91,6 +91,11 @@
 #else
 #print - Did not find FMOD Ex sound library
 #endif
+#if $[HAVE_OPENAL]
+#print + OpenAL sound library
+#else
+#print - Did not find OpenAL sound library
+#endif
 #if $[HAVE_GTK]
 #print + gtk+-2
 #else
Index: panda3d/dtool/Package.pp
===================================================================
RCS file: /cvsroot/panda3d/dtool/Package.pp,v
retrieving revision 1.60
diff -u -r1.60 Package.pp
--- panda3d/dtool/Package.pp	16 Mar 2007 03:04:06 -0000	1.60
+++ panda3d/dtool/Package.pp	21 Nov 2007 19:37:15 -0000
@@ -257,6 +257,11 @@
 #set FMODEX_LIBS $[FMODEX_LIBS]
 #set HAVE_FMODEX $[HAVE_FMODEX]
 
+#set OPENAL_IPATH $[unixfilename $[OPENAL_IPATH]]
+#set OPENAL_LPATH $[unixfilename $[OPENAL_LPATH]]
+#set OPENAL_LIBS $[OPENAL_LIBS]
+#set HAVE_OPENAL $[HAVE_OPENAL]
+
 #set CHROMIUM_IPATH $[unixfilename $[CHROMIUM_IPATH]]
 #set CHROMIUM_LPATH $[unixfilename $[CHROMIUM_LPATH]]
 #set CHROMIUM_LIBS $[CHROMIUM_LIBS]
Index: panda3d/dtool/pptempl/Global.pp
===================================================================
RCS file: /cvsroot/panda3d/dtool/pptempl/Global.pp,v
retrieving revision 1.121
diff -u -r1.121 Global.pp
--- panda3d/dtool/pptempl/Global.pp	3 Aug 2007 22:00:10 -0000	1.121
+++ panda3d/dtool/pptempl/Global.pp	21 Nov 2007 19:37:15 -0000
@@ -343,6 +343,14 @@
   #define fmodex_libs $[FMODEX_LIBS]
 #endif
 
+#if $[HAVE_OPENAL]
+  #define openal_ipath $[wildcard $[OPENAL_IPATH]]
+  #define openal_lpath $[wildcard $[OPENAL_LPATH]]
+  #define openal_cflags $[OPENAL_CFLAGS]
+  #define openal_libs $[OPENAL_LIBS]
+  #define openal_framework $[OPENAL_FRAMEWORK]
+#endif
+
 #if $[HAVE_CHROMIUM]
   #define chromium_ipath $[wildcard $[CHROMIUM_IPATH]]
   #define chromium_lpath $[wildcard $[CHROMIUM_LPATH]]
Index: panda3d/dtool/pptempl/Global.unix.pp
===================================================================
RCS file: /cvsroot/panda3d/dtool/pptempl/Global.unix.pp,v
retrieving revision 1.3
diff -u -r1.3 Global.unix.pp
--- panda3d/dtool/pptempl/Global.unix.pp	18 Oct 2000 21:40:41 -0000	1.3
+++ panda3d/dtool/pptempl/Global.unix.pp	21 Nov 2007 19:37:15 -0000
@@ -5,3 +5,5 @@
 // are read.  It defines a few global variables to assist
 // Template.unix.pp.
 //
+
+#defer interrogate_ipath $[install_parser_inc_dir:%=-S%] $[target_ipath:%=-I%]
Index: panda3d/panda/src/audiotraits/Sources.pp
===================================================================
RCS file: /cvsroot/panda3d/panda/src/audiotraits/Sources.pp,v
retrieving revision 1.30
diff -u -r1.30 Sources.pp
--- panda3d/panda/src/audiotraits/Sources.pp	20 Aug 2007 22:34:58 -0000	1.30
+++ panda3d/panda/src/audiotraits/Sources.pp	21 Nov 2007 19:37:17 -0000
@@ -1,5 +1,5 @@
 #define OTHER_LIBS dtoolconfig dtool dtoolbase:c dtoolutil:c \
-    putil:c prc:c interrogatedb:c dconfig:c
+    putil:c prc:c interrogatedb:c dconfig:c 
 
 #define BUILD_DIRECTORY $[HAVE_AUDIO]
 
@@ -49,25 +49,30 @@
 
 #end lib_target
 
-//#begin lib_target
-//  #define TARGET openal_audio
-//  #define BUILD_TARGET $[HAVE_OPENAL]
-//  #define USE_PACKAGES openal
-//  #define BUILDING_DLL BUILDING_OPENAL_AUDIO
-//  #define LOCAL_LIBS audio event
-//  #define WIN_SYS_LIBS $[WIN_SYS_LIBS] user32.lib advapi32.lib winmm.lib
-//
-//  #define COMBINED_SOURCES $[TARGET]_composite1.cxx
-//
-//  #define SOURCES \
-//      config_openalAudio.h \
-//      openalAudioManager.h \
-//      openalAudioSound.I openalAudioSound.h
-//
-//  #define INCLUDED_SOURCES \
-//      config_openalAudio.cxx openalAudioManager.cxx openalAudioSound.cxx
-//
-//#end lib_target
+#begin lib_target
+  #print building openal
+  #define TARGET openal_audio
+  #define BUILD_TARGET $[HAVE_OPENAL]
+  #define USE_PACKAGES openal
+  #define BUILDING_DLL BUILDING_OPENAL_AUDIO
+  #define LOCAL_LIBS audio event movies gobj
+  #define WIN_SYS_LIBS $[WIN_SYS_LIBS] user32.lib advapi32.lib winmm.lib
+
+  #define COMBINED_SOURCES $[TARGET]_composite1.cxx
+    
+  #define OTHER_LIBS dtoolconfig dtool dtoolbase:c dtoolutil:c \
+    putil:c prc:c interrogatedb:c dconfig:c movies:c
+
+  #define SOURCES \
+      config_openalAudio.h \
+      openalAudioManager.h \
+      openalAudioSound.I \
+      openalAudioSound.h
+
+  #define INCLUDED_SOURCES \
+      config_openalAudio.cxx openalAudioManager.cxx openalAudioSound.cxx
+
+#end lib_target
 
 //#begin lib_target
 //  #define TARGET audio_linux
Index: panda3d/panda/src/audiotraits/openalAudioManager.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/audiotraits/openalAudioManager.h,v
retrieving revision 1.4
diff -u -r1.4 openalAudioManager.h
--- panda3d/panda/src/audiotraits/openalAudioManager.h	29 Aug 2007 21:04:47 -0000	1.4
+++ panda3d/panda/src/audiotraits/openalAudioManager.h	21 Nov 2007 19:37:17 -0000
@@ -30,8 +30,8 @@
 #include "pset.h"
 #include "movieAudioCursor.h"
 
-#include <AL/al.h>
-#include <AL/alc.h>
+#include <al.h>
+#include <alc.h>
 
 class OpenALAudioSound;
 
Index: panda3d/panda/src/audiotraits/openalAudioSound.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/audiotraits/openalAudioSound.h,v
retrieving revision 1.4
diff -u -r1.4 openalAudioSound.h
--- panda3d/panda/src/audiotraits/openalAudioSound.h	29 Aug 2007 21:04:47 -0000	1.4
+++ panda3d/panda/src/audiotraits/openalAudioSound.h	21 Nov 2007 19:37:18 -0000
@@ -26,12 +26,12 @@
 
 #ifdef HAVE_OPENAL //[
 
+#include "openalAudioManager.h"
 #include "audioSound.h"
 #include "movieAudioCursor.h"
 #include "trueClock.h"
-
-#include <AL/al.h>
-#include <AL/alc.h>
+#include <al.h>
+#include <alc.h>
 
 class EXPCL_OPENAL_AUDIO OpenALAudioSound : public AudioSound {
   friend class OpenALAudioManager;
Index: panda3d/panda/src/glstuff/glGraphicsStateGuardian_src.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/glstuff/glGraphicsStateGuardian_src.h,v
retrieving revision 1.128
diff -u -r1.128 glGraphicsStateGuardian_src.h
--- panda3d/panda/src/glstuff/glGraphicsStateGuardian_src.h	19 Jul 2007 16:16:41 -0000	1.128
+++ panda3d/panda/src/glstuff/glGraphicsStateGuardian_src.h	21 Nov 2007 19:37:20 -0000
@@ -18,6 +18,8 @@
 
 #include "pandabase.h"
 
+#include "gl.h"
+#include "panda_glext.h"
 #include "graphicsStateGuardian.h"
 #include "geomVertexColumn.h"
 #include "texture.h"
@@ -81,6 +83,28 @@
 typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
 typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
 typedef void (APIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+// -- by reto spoerri (just so i know what i changed) --
+typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
+typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+// -- end of reto spoerri --
 #endif  // __EDG__
 
 ////////////////////////////////////////////////////////////////////
Index: panda3d/panda/src/grutil/ffmpegTexture.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/grutil/ffmpegTexture.h,v
retrieving revision 1.7
diff -u -r1.7 ffmpegTexture.h
--- panda3d/panda/src/grutil/ffmpegTexture.h	20 Jul 2007 23:02:54 -0000	1.7
+++ panda3d/panda/src/grutil/ffmpegTexture.h	21 Nov 2007 19:37:20 -0000
@@ -24,8 +24,10 @@
 
 #include "videoTexture.h"
 
-#include "avcodec.h"
-#include "avformat.h"
+extern "C" { 
+  #include "avcodec.h"
+  #include "avformat.h"
+}
 
 ////////////////////////////////////////////////////////////////////
 //       Class : OpenCVTexture
Index: panda3d/panda/src/movies/ffmpegAudioCursor.cxx
===================================================================
RCS file: /cvsroot/panda3d/panda/src/movies/ffmpegAudioCursor.cxx,v
retrieving revision 1.3
diff -u -r1.3 ffmpegAudioCursor.cxx
--- panda3d/panda/src/movies/ffmpegAudioCursor.cxx	2 Oct 2007 17:17:48 -0000	1.3
+++ panda3d/panda/src/movies/ffmpegAudioCursor.cxx	21 Nov 2007 19:37:21 -0000
@@ -19,8 +19,10 @@
 #ifdef HAVE_FFMPEG
 
 #include "ffmpegAudioCursor.h"
-#include "avcodec.h"
-#include "avformat.h"
+extern "C" {
+  #include "avcodec.h"
+  #include "avformat.h"
+}
 
 TypeHandle FfmpegAudioCursor::_type_handle;
 
Index: panda3d/panda/src/movies/ffmpegVideoCursor.cxx
===================================================================
RCS file: /cvsroot/panda3d/panda/src/movies/ffmpegVideoCursor.cxx,v
retrieving revision 1.4
diff -u -r1.4 ffmpegVideoCursor.cxx
--- panda3d/panda/src/movies/ffmpegVideoCursor.cxx	26 Oct 2007 21:54:54 -0000	1.4
+++ panda3d/panda/src/movies/ffmpegVideoCursor.cxx	21 Nov 2007 19:37:24 -0000
@@ -20,8 +20,10 @@
 
 #include "ffmpegVideoCursor.h"
 #include "config_movies.h"
-#include "avcodec.h"
-#include "avformat.h"
+extern "C" {
+  #include "avcodec.h"
+  #include "avformat.h"
+}
 #include "pStatCollector.h"
 #include "pStatTimer.h"
 
Index: panda3d/panda/src/nativenet/socket_fdset.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/nativenet/socket_fdset.h,v
retrieving revision 1.4
diff -u -r1.4 socket_fdset.h
--- panda3d/panda/src/nativenet/socket_fdset.h	7 Mar 2007 21:57:25 -0000	1.4
+++ panda3d/panda/src/nativenet/socket_fdset.h	21 Nov 2007 19:37:25 -0000
@@ -36,7 +36,7 @@
     
     friend struct Socket_Selector;
     SOCKET _maxid;
-    fd_set _the_set;
+    mutable fd_set _the_set;
 };
 
 ////////////////////////////////////////////////////////////////////
Index: panda3d/panda/src/nativenet/socket_portable.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/nativenet/socket_portable.h,v
retrieving revision 1.6
diff -u -r1.6 socket_portable.h
--- panda3d/panda/src/nativenet/socket_portable.h	20 Mar 2007 20:42:22 -0000	1.6
+++ panda3d/panda/src/nativenet/socket_portable.h	21 Nov 2007 19:37:25 -0000
@@ -264,8 +264,19 @@
 #include <arpa/inet.h>
 #include <unistd.h>
 
+
 typedef int SOCKET;
 const SOCKET BAD_SOCKET = -1;
+// this is WRONG !!! but helps compiling ;)
+// interrogate fails without this, why is _SYS_SOCKET_H_ not defined?
+// it is defined by sys/socket.h
+#ifndef _SYS_SOCKET_H_
+// should be defined by netinet/in.h
+typedef int sockaddr_in;
+// should be defined by sys/select.h or sys/types.h
+typedef int fd_set;
+#endif
+
 inline int DO_SELECT(SOCKET n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout)
 {
     return select((int) n, readfds, writefds, exceptfds,timeout);
Index: panda3d/panda/src/osxdisplay/osxGraphicsPipe.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/osxdisplay/osxGraphicsPipe.h,v
retrieving revision 1.8
diff -u -r1.8 osxGraphicsPipe.h
--- panda3d/panda/src/osxdisplay/osxGraphicsPipe.h	14 Jul 2007 05:49:43 -0000	1.8
+++ panda3d/panda/src/osxdisplay/osxGraphicsPipe.h	21 Nov 2007 19:37:25 -0000
@@ -16,6 +16,8 @@
 #ifndef OSXGRAPHICSPIPE_H
 #define OSXGRAPHICSPIPE_H
 
+#include "gl.h"
+#include "panda_glext.h"
 #include "pandabase.h"
 #include "graphicspipe.h"
 
Index: panda3d/panda/src/osxdisplay/osxGraphicsWindow.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/osxdisplay/osxGraphicsWindow.h,v
retrieving revision 1.18
diff -u -r1.18 osxGraphicsWindow.h
--- panda3d/panda/src/osxdisplay/osxGraphicsWindow.h	2 Nov 2007 23:33:48 -0000	1.18
+++ panda3d/panda/src/osxdisplay/osxGraphicsWindow.h	21 Nov 2007 19:37:25 -0000
@@ -19,6 +19,7 @@
 #include "pandabase.h"
 #include "graphicsWindow.h"
 #include "buttonHandle.h"
+#include "panda_glext.h"
 
 #include <Carbon/Carbon.h>
 
Index: panda3d/panda/src/pandabase/pandabase.h
===================================================================
RCS file: /cvsroot/panda3d/panda/src/pandabase/pandabase.h,v
retrieving revision 1.6
diff -u -r1.6 pandabase.h
--- panda3d/panda/src/pandabase/pandabase.h	13 Feb 2004 19:27:46 -0000	1.6
+++ panda3d/panda/src/pandabase/pandabase.h	21 Nov 2007 19:37:26 -0000
@@ -20,6 +20,8 @@
    C or C++ file.  It must be compilable for C as well as C++ files,
    so no C++-specific code or syntax can be put here. */
 
+#define HAVE_OPENAL 1
+
 #ifndef PANDABASE_H
 #define PANDABASE_H
 

[/code]

thanks alot (!!!) Hypnos, just installed version 0.7 and my game seems to run fine.

<< Very happy : )

new 0.8 version, based on 1.5.0, see first post for details

Hypnos, would you be willing/able to update the panda3d app to 1.5.2? I’ve been trying to compile it and neither makepanda or ppremake are working for me. Your package works great but unfortunately it’s only 1.5.0! It would be really, really, really appreciated!!

i have been working on a new release (1.5.3, cvs tag version), which i am uploading now, it’s only tested minimally and might not work on 10.4 anymore. Also i am using python2.5 from the macports for this release because of packaging issues using the “normal” 10.5 python version.

http://public.nouser.org/~rspoerri/Development/python/panda3d/projects/p3dapp/v1.5.3/p3dapp-1.5.3-minimal.zip

while working on the new app i have also written down how to create one:

# --------------------------------------------------------------------------------------------------
# howto build a mac-app for panda3d
# --------------------------------------------------------------------------------------------------
- the packages (pre 1.5.3), are not created using this method, they were all using python2.4.
- this new package is using python2.5 from macports, it is likely to be incompatible with the python from 10.5.
--------------------------------------------------------------------------------------------------
P3DAPP=/Users/rspoerri/Desktop/p3dapp-1.5.3.app
# or whatever is correct for you

# --------------------------------------------------------------------------------------------------
# compile panda3d
# --------------------------------------------------------------------------------------------------
this is not part of this description
BUT:
You have to compile against python2.5 from macports
The reason for this is: python2.5 from 10.5, will somehow make it impossible to find the 
Cg.framework, i have tried lot's of places and lots of lib-paths (see "change the linkings")
but none worked correctly.

REQUIREMENTS:
macports libs:
py25-zlib

NOTES:
iif you have problems with Cg.framework, you may need to have #define CG_FRAMEWORK Cg _NOT DEFINED_
then manually add -framework Cg to at the linking of panda/src/gobj
g++  -undefined dynamic_lookup -dynamic -dynamiclib -o Opt3-OSX/libgobj.dylib -install_name libgobj.dylib Opt3-OSX/gobj_gobj_composite1.o Opt3-OSX/gobj_gobj_composite2.o Opt3-OSX/libgobj_igate.o -L../event/Opt3-OSX -L../express/Opt3-OSX -L../gsgbase/Opt3-OSX -L../linmath/Opt3-OSX -L../mathutil/Opt3-OSX -L../nativenet/Opt3-OSX -L../net/Opt3-OSX -L../pandabase/Opt3-OSX -L../pipeline/Opt3-OSX -L../pnmimage/Opt3-OSX -L../pstatclient/Opt3-OSX -L../putil/Opt3-OSX -L/usr/local/panda/lib -L/usr/local/panda/lib -L/opt/local/lib/python2.5 -L/opt/local/lib -L/opt/local/lib -L/opt/local/lib -lpstatclient -levent -llinmath -lmathutil -lpnmimage -lgsgbase -lputil -lnet -lexpress -lpandabase -lpipeline -lnativenet -linterrogatedb -ldconfig -ldtoolutil -ldtoolbase -lprc -lz -ldfftw -ldrfftw -lssl -lcrypto -ltar -lpthread -framework Cg
make install
# --------------------------------------------------------------------------------------------------


# --------------------------------------------------------------------------------------------------
# use platypus to create a app
# --------------------------------------------------------------------------------------------------
# download of platypus: http://www.sveinbjorn.org/platypus#download
# select script type: shell
# tag: is droppable (if you want to accept drag&dropping, could be used as pview.app)
# tag: runs in background (the script will run in the background, python will run in the foreground)
# save it somewhere

# --- SCRIPT TO RUN --------------------------------------------------------------------------------
# the location of the .app
APPPATH="${1}"
echo "Application Path" $APPPATH
export APPPATH

# define environment variables required for panda3d and all libs
DYLD_LIBRARY_PATH="${APPPATH}/Contents/Frameworks/:${DYLD_LIBRARY_PATH}"
DYLD_LIBRARY_PATH="${APPPATH}/Contents/Resources/panda/lib/:${DYLD_LIBRARY_PATH}"
DYLD_LIBRARY_PATH="${APPPATH}/Contents/Resources/:${DYLD_LIBRARY_PATH}"
DYLD_LIBRARY_PATH="${APPPATH}/Contents/Resources/opt/lib/:${DYLD_LIBRARY_PATH}"
DYLD_LIBRARY_PATH="${APPPATH}/Contents/Resources/usr/lib/:${DYLD_LIBRARY_PATH}"
export DYLD_LIBRARY_PATH
export LD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}"
PATH="${APPPATH}/Contents/MacOS/:${PATH}"
PATH="${APPPATH}/Contents/Frameworks/Python.framework/Versions/2.4/bin/:${PATH}"
PATH="${APPPATH}/Contents/Resources/panda/bin:${PATH}"
export PATH
PYTHONPATH=".:${PYTHONPATH}"
PYTHONPATH="${APPPATH}/Contents/Frameworks/Python.framework/Versions/2.5/lib/python2.5:${PYTHONPATH}"
PYTHONPATH="${APPPATH}/Contents/Frameworks/Python.framework/Versions/2.5/lib/python2.5.zip/python2.4:${PYTHONPATH}"
PYTHONPATH="${APPPATH}/Contents/Frameworks/Python.framework/Versions/2.5/lib/python2.5.zip:${PYTHONPATH}"
PYTHONPATH="${APPPATH}/Contents/Resources/panda/lib:${PYTHONPATH}"
PYTHONPATH="${APPPATH}/Contents/Resources/panda/lib/direct:${PYTHONPATH}"
PYTHONPATH="${APPPATH}/Contents/Resources/lib/python2.4/site-packages/:${PYTHONPATH}"
export PYTHONPATH

# for makepanda builds (doesnt work under osx, but i still keep it)
export PANDA_PRC_DIR="${APPPATH}/Contents/Resources/panda/etc"
# for ppremake builds
export PRC_PATH="${PANDA_PRC_DIR}"
export PRC_DIR="${PANDA_PRC_DIR}"

# specify the script to run
cd "${APPPATH}/Contents/Resources/project/YOUR_SCRIPT/"
python THE-SCRIPT-TO-RUN.py
# --- END SCRIPT -----------------------------------------------------------------------------------

this app is only handling the environment variables which are required to run panda3d
# --------------------------------------------------------------------------------------------------


# --------------------------------------------------------------------------------------------------
# copy all required librarys from /opt/local into $P3DAPP/Contents/Ressources/opt
# --------------------------------------------------------------------------------------------------

# --- SCRIPT TO DO THIS AUTOMATICALLY FROM MACPORTS INFOS ------------------------------------------
# USE AT YOUR OWN RISK

import sys
if sys.platform != 'darwin':
  print "this script is made for OS X and darwinports/macports"
  raise

requiredPortLibs = ['ffmpeg', 'zlib', 'jpeg', 'libtar', 'ode', 'zlib', 'tiff', 'freetype', 'openssl']
# requiredFrameworks = ['OpenAL', 'Cg'] # not used yet

# changes are only done if this is true
DO_REALLY = True
# install the libs into the panda/lib directory
INSTALL_LIBS_IN_PANDADIR = True

# find all port lib files
import os, shutil

panda3dInstallDir = './opt-lib' # must NOT end with /
portInstallDir = '/opt/local/lib' # must NOT end with /

def createFolderIfNotExisting( folder ):
  if not os.path.isdir(folder):
    os.mkdir(folder)

createFolderIfNotExisting(panda3dInstallDir)

libList = list()
for requiredPortLib in requiredPortLibs:
  cmd = 'port contents %s' % requiredPortLib
  filepathList = os.popen(cmd).readlines()
  for filepathStr in filepathList:
    filepath = filepathStr.strip()
    if portInstallDir in filepath and \
      ('.a' in filepath or '.dylib' in filepath or '.la' in filepath or '.a' in filepath):
      # get everything except '/opt/local/lib'
      splitFilename = filepath.split(os.sep)[len(portInstallDir.split(os.sep)):]
      
      if INSTALL_LIBS_IN_PANDADIR:
        fileFolder = os.path.join(panda3dInstallDir,'lib')
        newFilepath = os.path.join(fileFolder,os.sep.join(splitFilename))
        # do it
        if True:
          print "copy library of %s: \tfrom %s\t to %s" % (requiredPortLib, filepath, newFilepath),
          if os.path.islink(filepath):
            print "symlink",
            if DO_REALLY:
              try:
                linkTarget = os.readlink( filepath )
                os.symlink(linkTarget, newFilepath)
                print "SUCCESS"
              except:
                print "FAILED"
          else:
            print "file",
            if DO_REALLY:
              try:
                shutil.copyfile( filepath, newFilepath)
                print "SUCCESS"
              except:
                print "FAILED"

# --- SCRIPT END -----------------------------------------------------------------------------------


# --------------------------------------------------------------------------------------------------
# remove some conflicts from $P3DAPP/Contents/Ressources/opt/lib
# --------------------------------------------------------------------------------------------------
remove the following files from the folder:
libGIF.dylib		libJPEG.dylib		libPng.dylib		libTIFF.dylib
libJP2.dylib		libOpenEXR.dylib	libRadiance.dylib

info: It's the lib files from
System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources

if this is not done properly starting the application will cause a error like:
ImportError: dlopen(/Users/rspoerri/Desktop/p3dapp-1.5.3.app/Contents/Resources/panda/lib/libpanda.so, 2): Symbol not found: __cg_TIFFClientOpen
  Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /Users/rspoerri/Desktop/p3dapp-1.5.3.app/Contents/Resources/opt/lib//libtiff.3.dylib
(the ImageIO framework will have a missing symbol...)
# --------------------------------------------------------------------------------------------------



# --------------------------------------------------------------------------------------------------
# copy the contents of /usr/local/panda to $P3DAPP/Contents/Ressources/panda/
# --------------------------------------------------------------------------------------------------

# --- $P3DAPP/Contents/Ressources/panda/etc/60_config.prc ------------------------------------------
plugin-path ${APPPATH}/Contents/Resources/panda/lib/

default-model-extension .egg
model-path      .
model-path      /usr/local/panda/models
model-path      /usr/local/panda
sound-path      .
sound-path      /usr/local/panda/models
texture-path    .
texture-path    /usr/local/panda/models
audio-library-name fmod_audio
use-movietexture #t
#want-directtools #t
sync-video 0
show-frame-rate-meter #t

#task-timer-verbose 1
#pstats-tasks 1

#notify-level-audio spam
notify-level-ode spam
notify-level-physics spam
# --- END $P3DAPP/Contents/Ressources/panda/etc/60_config.prc --------------------------------------



# --------------------------------------------------------------------------------------------------
# Copy the required frameworks to $P3DAPP/Contents/Frameworks/
# --------------------------------------------------------------------------------------------------
Cg.framework
OpenAL.framework
# --------------------------------------------------------------------------------------------------


# --------------------------------------------------------------------------------------------------
# change the linkings of all lib's where /opt/local/lib to opt/lib
# --------------------------------------------------------------------------------------------------

# --- SCRIPT TO DO THAT AUTOMATICALLY --------------------------------------------------------------
# run it for:
# pandalib = 'Contents/Resources/opt/lib/'
# and
# pandalib = 'Contents/Resources/panda/lib/'

import os

appName = 'p3dapp'
appDir = '''/Users/rspoerri/Desktop/p3dapp-1.5.3.app'''
pandalib = 'Contents/Resources/opt/lib/'

p3dDir = os.path.join(appDir,pandalib)
for filename in os.listdir(p3dDir):
  filepath = os.path.join(p3dDir, filename)
  cmd = "otool -L '%s'" % filepath
  linksList = os.popen(cmd).readlines()
  #print filepath, linksList
  for linkUnstripped in linksList:
    skip = False
    newLink = None
    if '.dylib' in linkUnstripped:
      link = linkUnstripped.split('(compatibility version')[0].strip()
      #if '/usr/lib/' in link:
      #  newLink = link.replace( '/usr/lib', 'usr/lib')
      #if '@executable_path/../Frameworks/lib/' in link:
      #  newLink = link.replace( '@executable_path/../Frameworks/lib', 'usr/lib')
      #elif 'Frameworks/' in link:
      #  newLink = link.replace( 'Frameworks', 'usr/lib')
      if '/opt/local/lib/' in link:
        newLink = link.replace( '/opt/local/lib', 'opt/lib')
      #else:
        #print "UNKNOWN FILE %s, %s" % (filepath, link)
      #  skip = True
      if not skip and newLink is not None:
        #print "change %s\n-> form: %s-> to:   %s" % (filepath, link, newLink)
        cmd = "install_name_tool -change %s %s '%s'" % (link, newLink, filepath)
        print cmd
        os.popen(cmd).readlines()


# --- SCRIPT END -----------------------------------------------------------------------------------
# also run manually
SOURCE=@executable_path/../Library/Frameworks/Cg.framework/Cg
TARGET=@executable_path/../../Frameworks/Cg.framework/Cg
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libgobj.so
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libgobj.dylib
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libpandagl.so
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libpandagl.dylib
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libglgsg.so
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libglgsg.dylib
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libglstuff.so
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libglstuff.dylib
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libosxdisplay.so
install_name_tool -change $SOURCE $TARGET $P3DAPP/Contents/Resources/panda/lib/libosxdisplay.dylib

SOURCE=@executable_path/../../Frameworks/Cg.framework/Cg
TARGET=@executable_path/../../../Frameworks/Cg.framework/Cg
# --------------------------------------------------------------------------------------------------



# --------------------------------------------------------------------------------------------------
# add some python script to $P3DAPP/Contents/Resources/project
# --------------------------------------------------------------------------------------------------
and specify the path for it
# --------------------------------------------------------------------------------------------------


# --------------------------------------------------------------------------------------------------
# Making the app smaller
# --------------------------------------------------------------------------------------------------
# the package created above will likely be bigger then 1GByte
# i provide some steps to make it smaller to around 50 to 200MBytes (depending what you want included)

# --- opt/lib/python2.5 ----------------------------------------------------------------------------
# create a compressed version of the python builtins
# compress the lib directoy of python2.5
cd $P3DAPP/Contents/Resources/opt/lib
cp -r python2.5 python2.5-backup
mkdir python2.5-tmp
mv python2.5/os.py python2.5-tmp/
mv python2.5/lib-dynload python2.5-tmp/
mv python2.5/site-packages python2.5-tmp/
rm python2.5/*.pyo
rm python2.5/*.pyc
zip -r python2.5.zip python2.5
rm -rf python2.5
mv python2.5-tmp python2.5
# if everything worked fine you can remove the python2.5-backup
# --- end of opt/lib/python2.5 ---------------------------------------------------------------------

# --- opt/lib --------------------------------------------------------------------------------------
remove all but the following dylib files:
liba52.*dylib
libavcodec.*dylib
libavformat.*dylib
libavutil.*dylib
libcrypto.*dylib
libfreetype.*dylib
libjpeg.*dylib
libode.dylib
libpng.*dylib
libpng12.*dylib
libpython2.5.dylib
libssl.*dylib
libtar.*dylib
libtiff.*.dylib
libtiffxx.*dylib
libz.*dylib
# ALSO KEEP THE python2.5 directoy and the python2.5.zip file from above
# --- end of opt/lib -------------------------------------------------------------------------------

# --- opt/bin --------------------------------------------------------------------------------------
only keep the python2.5 application
# --- end of opt/bin -------------------------------------------------------------------------------

# --- opt ------------------------------------------------------------------------------------------
only keep the bin and the lib directory
# --- end of opt -----------------------------------------------------------------------------------

# --- panda ----------------------------------------------------------------------------------------
for a heavily stripped down version you can remove
audio
bin
icons
include
maps
models
shared
etc/*.in
lib/*.a

# maybe compressing lib/direct and lib/pandac works?
cd $P3DAPP/Contents/Resources/panda/lib

cp -r direct direct-backup
find ./direct/ -name '*.pyc' -exec rm {} \;
zip -r direct.zip direct
echo "direct.zip" > $P3DAPP/Contents/Resources/panda/lib/direct.pth
rm -rf direct
# remove direct-backup if everything is ok

cp -r pandac pandac-backup
find ./pandac/ -name '*.pyc' -exec rm {} \;
zip -r pandac.zip pandac
echo "pandac.zip" > $P3DAPP/Contents/Resources/panda/lib/pandac.pth
rm -rf pandac
# remove pandac-backup if everything is ok
# --- end of panda ---------------------------------------------------------------------------------

# --- frameworks -----------------------------------------------------------------------------------
remove the Headers from all frameworks
# --- end frameworks -------------------------------------------------------------------------------


# --------------------------------------------------------------------------------------------------
# testing the app
# --------------------------------------------------------------------------------------------------
move it to another clean install
or:
rename /opt/local to /opt/local-tmp
rename /usr/local/panda to /usr/local/panda-tmp
move all used frameworks from /
# --------------------------------------------------------------------------------------------------

Awesome Hypnos! It looks like some of the paths might be hard coded to your system though? I get this when I try to update my installation to 1.5.3 using the package contents:

Traceback (most recent call last):
  File "/Users/matt/Documents/test_panda.py", line 1, in <module>
    from direct.showbase.DirectObject import *
  File "/Users/rspoerri/Desktop/p3dapp-1.5.3-minimal.app/Contents/Resources/panda/lib/direct/showbase/DirectObject.py", line 6, in <module>
  File "/Users/rspoerri/Desktop/p3dapp-1.5.3-minimal.app/Contents/Resources/panda/lib/direct/showbase/MessengerGlobal.py", line 5, in <module>
  File "/Users/rspoerri/Desktop/p3dapp-1.5.3-minimal.app/Contents/Resources/panda/lib/direct/showbase/Messenger.py", line 6, in <module>
  File "/Users/rspoerri/Desktop/p3dapp-1.5.3-minimal.app/Contents/Resources/panda/lib/direct/showbase/PythonUtil.py", line 51, in <module>
  File "/Users/rspoerri/Desktop/p3dapp-1.5.3-minimal.app/Contents/Resources/panda/lib/direct/extensions_native/extension_native_helpers.py", line 38, in <module>
ImportError: dlopen(/usr/local/panda/lib/libpandaexpress.so, 2): Symbol not found: _pthread_mutexattr_destroy$UNIX2003
  Referenced from: /usr/local/panda/lib/libdtoolbase.dylib
  Expected in: /usr/lib/libSystem.B.dylib

are you running 10.4 or 10.5?

10.4

What version were you using before? the 0.8 (1.5.0) package?

i thought there could be problems with 10.4, but i woudnt have suspected to happen it there. I’ll have a look into the problem, but i cant promise to solve it. I am running 10.5 since a while and changed to it’s python version (2.5).

But, i could not pack the python from 10.5 into the package, so i took the macports python2.5 package and integrated it into the package. I actually wonder that this file compiled against 10.5 and not 10.4u because i have not changed the linking of panda3d (it should still compile against the 10.4 lib’s).

Yup, I was using the 1.5.0 version. If you could figure out what’s wrong it would be awesome, if not I’ll have to stick with 1.5.0 for a while, which isn’t so bad. Either way, thanks for these packages!