Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^2: UnBefuzzling XML::Parser: an adventure with EU::MM method overrides

by Intrepid (Deacon)
on Jan 17, 2008 at 11:33 UTC ( [id://662848]=note: print w/replies, xml ) Need Help??


in reply to Re: UnBefuzzling XML::Parser: an adventure with EU::MM method overrides
in thread UnBefuzzling XML::Parser: an adventure with EU::MM method overrides

Great scott, another reply! ;-)

On Jan 17, 2008 our monk Rob told me (in #662812):

I don't have the expat library in a place where it's found by default, so I ran your XML-Parser distro by starting with perl Makefile.PL INC="-IC:/_32/msys/1.0/local/include" LIBS="-LC:/_32/msys/1.0/local/lib -lexpat" and that all works fine on Strawberry Perl (5.10). But doing the same on my own MinGW-built perl 5.10, all of the tests fail (during 'dmake test') because Can't find 'boot_XML__Parser__Expat' symbol in C:\_32\comp\XML-Parser-2.36_04\blib\arch/auto/XML/Parser/Expat/Expat.dll.

I don't know why such a discrepancy arises. The CPAN version of XML-Parser-2.36 builds fine on *both* of those aforementioned builds of perl. I use different versions of dmake when building modules for those 2 builds of perl - but I doubt that's the reason. More likely some difference in EU::MM, I suspect.

I suspect you're right about that.

I can say this much about the failure: it is due to the way the DLL was made, i.e. the way gcc was invoked. I know this because it was the last flaw I found when I was writing the build support changes; it is the lack of the flag --export-all-symbols that causes this. The DLL that gets built (blib/arch/auto/XML/Parser/Expat/Expat.dll) doesn't have any symbols from the object file built by the previous command because they are not marked for export in any way.

As to what could be interfering on your home-built Perl-5.10 installation, I don't know, but I would be happy as a barnacle by the bay if at some point we could figure it out, since I want this strategy to be as robust as possible.

It could help if you might be able to confirm the complete command line that is being run in the linking step that creates the DLL, so that we can confirm my diagnosis about --export-all-symbols, by running the build attempt again and capturing the console output.

Just other one point to get clarified right now (I'm going to separately mention your wise point about not removing the dlltool stuff if its working consistently in another note): you mentioned that "the CPAN release of XML-Parser-2.36 builds fine on both machines"; but it cannot be automatically built and installed using cpan, eh (the only way to build-test-install it is with the manual addition of commandline arguments)?

Gracias!

  • Comment on Re^2: UnBefuzzling XML::Parser: an adventure with EU::MM method overrides

Replies are listed 'Best First'.
Re^3: UnBefuzzling XML::Parser: an adventure with EU::MM method overrides
by syphilis (Archbishop) on Jan 17, 2008 at 12:38 UTC
    but it cannot be automatically built and installed using cpan

    That's a valid indictment of the way CPAN.pm works. It's not *just* XML::Parser that's subjected to this ... if I understand correctly, *any* module that needs to be built against a 3rd party library cannot be built using CPAN.pm iff the 3rd party library is in a location where perl is unable to find it (by default). On *nix, this is generally not a problem as the 3rd party libraries are normally installed in a location where perl *does* find them by default. But on Windows I, for one, build my 3rd party libraries using the MSYS shell, and install them into (what the MSYS shell regards as) /usr/local ... and perl does not find that "/usr/local" directory by default.

    Actually, I think (based upon some recent private correspondence from adamk) that XML::Parser is a little special in that, even if the expat library is placed in a location where perl can find it by default, XML::Parser *still* won't build on Windows using CPAN.pm ... but complain about that to the XML::Parser author.

    I'm sure CPAN.pm is very good, but I personally find it detestable (primarily because it ignores any instructions that have been given in the README) and don't use it. I tend therefore to also avoid modules such as Net::SSH::Perl which assume (via their copious use of other modules) that CPAN.pm is being deployed.

    In short, since I don't use CPAN.pm (and since I'm not the author of XML::Parser) I don't really care about the caviats regarding the building of XML::Parser on Windows using CPAN.pm. I've personally found the building of XML::Parser to be quite straightforward (once I knew how :-)

    However, I probably *will* get back to looking at why that disparity exists between Strawberry Perl and my own MinGW-built perl when building your patched XML-Parser-2.36. Curiosity is sure to get the better of me in the end :-)

    Cheers,
    Rob
    A reply falls below the community's threshold of quality. You may see it by logging in.
Re^3: UnBefuzzling XML::Parser: an adventure with EU::MM method overrides
by Anonymous Monk on Feb 25, 2009 at 18:47 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://662848]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-19 17:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found