In article <[EMAIL PROTECTED]>,
 [EMAIL PROTECTED] (Dan Kogai) wrote:

> As you see ${ldflags} is injected into $lddlflags but in case of 
> -prebind we need to avoid that.  $ldflags is for perl linking while 
> $lddlflags is for XS.  Since -prebind and -bundle are mutually 
> exclusive, we do not want -prebind in $lddlflags (though CC on darwin 
> is smart enough to ignore -prebind when -bundle, it still issues 
> warnings and I don't want to see that warning for each XS gets built).

Another question is whether to use something other than bundle for XS, to 
allow prebinding.  I have a patch to dl_dyld.xs that seems to work; it 
allows both bundle and dyld (thanks to some pointers from wsanchez).

--- dl_dyld.xs.orig     Wed Jun  4 06:57:32 2003
+++ dl_dyld.xs.new      Wed Jun  4 06:57:21 2003
@@ -109,14 +109,22 @@
     NSModule handle = NULL;
 
     dyld_result = NSCreateObjectFileImageFromFile(path, &ofile);
-    if (dyld_result != NSObjectFileImageSuccess)
-       TranslateError(path, OFImage, dyld_result);
-    else
+    if (dyld_result == NSObjectFileImageSuccess)
     {
        // NSLinkModule will cause the run to abort on any link error's
        // not very friendly but the error recovery functionality is limited.
        handle = NSLinkModule(ofile, path, TRUE);
        NSDestroyObjectFileImage(ofile);
+    }
+    else if ((dyld_result == NSObjectFileImageFormat ||
+              dyld_result == NSObjectFileImageInappropriateFile) &&
+              NSAddLibrary(path) == TRUE)
+    {
+       handle = (NSModule)(void *)-1;
+    }
+    else
+    {
+       TranslateError(path, OFImage, dyld_result);
     }
 
     return handle;


Then, instead of using -bundle, I used -dynamiclib.  However, when I tried 
to add -prebind I got a bunch of errors, and then I ran out of time to mess 
with it.  :-)  But perhaps worth:

1. doublechecking my work :)
2. including it in perl's DynaLoader as an option for XS developers, even if 
-bundle is still the default

-- 
Chris Nandor                      [EMAIL PROTECTED]    http://pudge.net/
Open Source Development Network    [EMAIL PROTECTED]     http://osdn.com/

Reply via email to