The first two files enables building of plugins under macosx.
authorKent Mein <mein@cs.umn.edu>
Fri, 21 Feb 2003 15:37:55 +0000 (15:37 +0000)
committerKent Mein <mein@cs.umn.edu>
Fri, 21 Feb 2003 15:37:55 +0000 (15:37 +0000)
The third is for actually loading the plugins in blender.
For some reason its not identifying the plugins correctly,
but it compiles and runs so I'm including it hoping someone else
might see where I've messed things up...

I have a simple example at http://www.cs.umn.edu/~mein/test.tgz that
works, if anyone is interested in playing with it.

Kent

release/Makefile
release/plugins/bmake
source/blender/blenlib/intern/dynlib.c

index 96dd09a208c4698be979684bd4169a5050a4f70f..265b51316e111e0a16fb23ac7d57c2aed7b41dd8 100644 (file)
@@ -81,7 +81,7 @@ all:
            NOPLUGINS="true" NOSTRIP="true"
     endif
     ifeq ($(OS),darwin)
            NOPLUGINS="true" NOSTRIP="true"
     endif
     ifeq ($(OS),darwin)
-       @$(MAKE) pkg TYPE="" TAR="tar cf" EXT0"=.app" EXT1=".tar" NOPLUGINS="true" \
+       @$(MAKE) pkg TYPE="" TAR="tar cf" EXT0"=.app" EXT1=".tar" \
            COMPRESS="gzip -f --best" EXT2=".gz"
     endif
 
            COMPRESS="gzip -f --best" EXT2=".gz"
     endif
 
index 6d990ad7460b98bbfdadaeb28534bd1a5c3310d1..eeee92bc2f298d29f8ab6aa68ad978d8f5714e03 100644 (file)
@@ -74,8 +74,8 @@ elif ( test $UNAME = "Darwin" ) then
         CC="cc";
         CFLAGS="-fPIC -funsigned-char -O2 -fno-common";
         LD="cc";
         CC="cc";
         CFLAGS="-fPIC -funsigned-char -O2 -fno-common";
         LD="cc";
-        LDFLAGS=" -dynamiclib -lm";
-        EXT="dylib";
+        LDFLAGS=" -bundle -bundle_loader ../../blender.app/Contents/MacOS/blender -lm";
+        EXT="so";
 fi
 
 if ( test "$#" = "1" ) then 
 fi
 
 if ( test "$#" = "1" ) then 
index 89c21a9af558ddee23eb40f061fdcb24a74c1c9b..2dd25505adf4e4ffa57f5df2e3eea0273013057a 100644 (file)
 #include <config.h>
 #endif
 
 #include <config.h>
 #endif
 
+#if !defined(CHAR_MAX)
+#define CHAR_MAX 255
+#endif
+
 /*
  * XXX, should use mallocN so we can see
  * handle's not being released. fixme zr
 /*
  * XXX, should use mallocN so we can see
  * handle's not being released. fixme zr
@@ -100,13 +104,40 @@ void PIL_dynlib_close(PILdynlib *lib) {
 
 #else
 #ifdef __APPLE__
 
 #else
 #ifdef __APPLE__
+#include <mach-o/dyld.h>
+
+struct PILdynlib {
+       NSModule *handle;
+};
 
 PILdynlib *PIL_dynlib_open(char *name) {
 
 PILdynlib *PIL_dynlib_open(char *name) {
-       return NULL;
+   NSObjectFileImage img;
+
+   PILdynlib *lib= malloc(sizeof(*lib));
+   if (NSCreateObjectFileImageFromFile( name, &img) == 
+       NSObjectFileImageSuccess) {
+      lib->handle = NSLinkModule( img, name, NSLINKMODULE_OPTION_BINDNOW);
+      NSDestroyObjectFileImage(img);
+      return lib;
+   }
+   free(lib);
+   return NULL;
 }
 
 void *PIL_dynlib_find_symbol(PILdynlib* lib, char *symname) {
 }
 
 void *PIL_dynlib_find_symbol(PILdynlib* lib, char *symname) {
-       return NULL;
+   char *name;
+   NSSymbol cr;
+   int size;
+
+   size = strlen(symname) + 2 * sizeof(char);
+   if (size < CHAR_MAX) {
+      name = MEM_mallocN(size, "temp string");
+      sprintf(&name, "_%s",symname);
+      cr = NSLookupSymbolInModule(lib->handle, name);
+      free(name);
+      return NSAddressOfSymbol(cr);
+   }
+   return NULL;
 }
 
 char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
 }
 
 char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
@@ -114,7 +145,8 @@ char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
 }
        
 void PIL_dynlib_close(PILdynlib *lib) {
 }
        
 void PIL_dynlib_close(PILdynlib *lib) {
-       ;
+       NSUnLinkModule(lib->handle,NSUNLINKMODULE_OPTION_NONE);
+       free(lib);
 }
 
 #else  /* Unix */
 }
 
 #else  /* Unix */