On Tue, Nov 26, 2013 at 6:20 PM, Leon Timmermans <fawaka@gmail.com> wrote: > On Wed, Nov 20, 2013 at 4:04 PM, Craig A. Berry <craig.a.berry@gmail.com> > wrote: >> >> We've done this since forever on VMS; the actual shareable image >> (dynamic library) names come out as PL_HASH__UTIL.EXE and >> PL_LIST__UTIL.EXE. There is a function called DynaLoader::mod2fname >> that gets called from XSLoader::load. Here's what it does: >> >> $ perl -MDynaLoader -e "@a=('Module','SubModule','SubSubModule'); >> print DynaLoader::mod2fname(\@a);" >> PL_Module__SubModule__SubSubModule >> >> So I think you can get what you want by simply implementing a >> mod2fname function (ours is in vms/vms.c, but dl_xxx.xs might be a >> better place for a new one). And I think there's a good chance you >> wouldn't need any MakeMaker modifications as mod2fname, if it exists, >> is already called from MM_Unix::init_main(). >> >> Plus it seems less than optimal to introduce an entirely new mechanism >> to do something for which there is already an existing mechanism. > > > Actually, it seems ExtUtils::CBuilder is currently not doing this correctly > (it only passes the basename to mod2fname). Module::Build contains a > workaround that does do the right thing, which is why no one noticed this > before. Ouch. You're right. ExtUtils::CBuilder::Platform::VMS::lib_file() is definitely wrong. I don't really see how to fix it as that interface assumes you can create the correct loadable library name from the name of a single object file, but you can't. It looks like ExtUtils::CBuilder::Platform::os2::_do_link may do things right with regard to mod2fname as it only uses the output of lib_file() as a fallback. But I don't think any of this should be in platform-specific overrides. The definedness of DynaLoader::mod2fname is what determines whether it's used at run time, so the same thing should determine whether it's used at build time. > I *really* hate how just about any feature in ExtUtils::CBuilder that isn't > used by Module::Build can be assumed to be broken or unusable on some > non-Linux-like platform (unless someone fixed it in the past couple of > years), if not all of them. > > LeonThread Previous | Thread Next