int err;
/* open the object file */
- dl_handle = dlopen (filename, RTLD_NOW|RTLD_GLOBAL);
+ dl_handle = dlopen (filename, RTLD_NOW);
if (!dl_handle)
{
- mlt_log_warning( NULL, "%s: error opening shared object file '%s': %s\n",
+ mlt_log_info( NULL, "%s: error opening shared object file '%s': %s\n",
__FUNCTION__, filename, dlerror());
return;
}
dlerr = dlerror();
if (dlerr) {
- mlt_log_warning( NULL, "%s: error finding ladspa_descriptor symbol in object file '%s': %s\n",
+ mlt_log_info( NULL, "%s: error finding ladspa_descriptor symbol in object file '%s': %s\n",
__FUNCTION__, filename, dlerr);
dlclose (dl_handle);
return;
}
+#ifdef __DARWIN__
+ if (!get_descriptor (0)) {
+ void (*constructor)(void) = dlsym (dl_handle, "_init");
+ if (constructor) constructor();
+ }
+#endif
+
plugin_index = 0;
while ( (descriptor = get_descriptor (plugin_index)) )
{
char * ladspa_path, * dir;
ladspa_path = g_strdup (getenv ("LADSPA_PATH"));
- if (!ladspa_path)
#ifdef WIN32
+ if (!ladspa_path)
+ {
+ ladspa_path = malloc (strlen (mlt_environment("MLT_APPDIR")) + strlen ("\\lib\\ladspa") + 1);
+ strcpy (ladspa_path, mlt_environment("MLT_APPDIR"));
+ strcat (ladspa_path, "\\lib\\ladspa");
+ }
+#elif defined(__DARWIN__) && defined(RELOCATABLE)
{
- ladspa_path = malloc (strlen (mlt_environment("MLT_DATA")) + strlen ("\\..\\..\\lib\\ladspa") + 1);
- strcpy (ladspa_path, mlt_environment("MLT_DATA"));
- strcat (ladspa_path, "\\..\\..\\lib\\ladspa");
- printf("LADSPA_PATH=%s\n", ladspa_path);
+ ladspa_path = malloc( strlen (mlt_environment ("MLT_APPDIR")) + strlen ("/lib/ladspa") + 1 );
+ strcpy (ladspa_path, mlt_environment ("MLT_APPDIR"));
+ strcat (ladspa_path, "/lib/ladspa" );
}
#else
- ladspa_path = g_strdup ("lib/ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa:/usr/lib64/ladspa");
+ if (!ladspa_path)
+ ladspa_path = g_strdup ("/usr/local/lib/ladspa:/usr/lib/ladspa:/usr/lib64/ladspa");
#endif
dir = strtok (ladspa_path, ":");