-#if defined(__DARWIN__)
-// ---------------------------------------------------------------------------
-// For Darwin/Mac OS X
-// supply the sun style dlopen functions in terms of Darwin NS*
-// ---------------------------------------------------------------------------
-
-/* Porting notes:
- * The dlopen port is a port from dl_next.xs by Anno Siegel.
- * dl_next.xs is itself a port from dl_dlopen.xs by Paul Marquess.
- * The method used here is just to supply the sun style dlopen etc.
- * functions in terms of Darwin NS*.
- */
-
-#include <stdio.h>
-#include <mach-o/dyld.h>
-
-static char dl_last_error[1024];
-
-static
-void TranslateError(const char *path, int number)
-{
- unsigned int index;
- static char *OFIErrorStrings[] =
- {
- "%s(%d): Object Image Load Failure\n",
- "%s(%d): Object Image Load Success\n",
- "%s(%d): Not an recognisable object file\n",
- "%s(%d): No valid architecture\n",
- "%s(%d): Object image has an invalid format\n",
- "%s(%d): Invalid access (permissions?)\n",
- "%s(%d): Unknown error code from NSCreateObjectFileImageFromFile\n",
- };
-#define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0]))
-
- index = number;
- if (index > NUM_OFI_ERRORS - 1) {
- index = NUM_OFI_ERRORS - 1;
- }
- sprintf(dl_last_error, OFIErrorStrings[index], path, number);
-}
-
-const char *dlerror()
-{
- return dl_last_error;
-}
-
-void *dlopen(const char *path, int WXUNUSED(mode) /* mode is ignored */)
-{
- NSObjectFileImage ofile;
- NSModule handle = NULL;
-
- int dyld_result = NSCreateObjectFileImageFromFile(path, &ofile);
- if ( dyld_result != NSObjectFileImageSuccess )
- {
- handle = NULL;
- }
- else
- {
- handle = NSLinkModule
- (
- ofile,
- path,
- NSLINKMODULE_OPTION_BINDNOW |
- NSLINKMODULE_OPTION_RETURN_ON_ERROR
- );
- }
-
- if ( !handle )
- TranslateError(path, dyld_result);
-
- return handle;
-}
-
-int dlclose(void *handle)
-{
- NSUnLinkModule( handle, NSUNLINKMODULE_OPTION_NONE);
- return 0;
-}
-
-void *dlsym(void *handle, const char *symbol)
-{
- // as on many other systems, C symbols have prepended underscores under
- // Darwin but unlike the normal dlopen(), NSLookupSymbolInModule() is not
- // aware of this
- wxCharBuffer buf(strlen(symbol) + 1);
- char *p = buf.data();
- p[0] = '_';
- strcpy(p + 1, symbol);
-
- NSSymbol nsSymbol = NSLookupSymbolInModule( handle, p );
- return nsSymbol ? NSAddressOfSymbol(nsSymbol) : NULL;
-}
-
-#endif // defined(__DARWIN__)
-
-