http://qs321.pair.com?node_id=859129


in reply to Packaging Perl Programs (is) Painful

So you've had your opportunity to vent your frustration with this post. I had mine with another reply. Let's get back to work and analyze how we can improve things for the next guy. I'll just address some parts of your post and refer to the PAR toolkit only:

I hope this constitutes a start in the direction of rational discussion (and action) with the goal of making our tools better.

  • Comment on Re: Packaging Perl Programs (is) Painful

Replies are listed 'Best First'.
Re^2: Packaging Perl Programs (is) Painful
by Anonymous Monk on Sep 07, 2010 at 10:44 UTC
    Couldn't package Wx application: Others have pointed out that the external wxWidgets libraries need manual treatment. This isn't really a flaw in PAR (or other packagers). The only way to find out about what shared libraries would be needed by an XS module would be to ask the run-time linker. But that would be so utterly platform dependent and probably prone to breakage that nobody has bothered to attempt it.

    It is a pita, but I doubt its too fragile (its how I do it). One way is with ldd, another is with sysinternals listdlls.

    Better yet is gcc/mingw objdump , ex

    $ objdump -p C:\strawberry\perl\site\lib\auto\Wx\Wx.dll |grep "DLL Na +me" DLL Name: KERNEL32.dll DLL Name: msvcrt.dll DLL Name: msvcrt.dll DLL Name: perl510.dll DLL Name: wxbase28_gcc_custom.dll DLL Name: wxmsw28_adv_gcc_custom.dll DLL Name: wxmsw28_core_gcc_custom.dll
    or microsofts dumpbin /IMPORTS:msvcrt.dll

    or depends.exe /c /f:1 /ot:temp.txt msvcrt.dll

    Once you get a list , add each dll with pp -l option

      Just lost my reply due to "Preview" ne "Submit". Oops. I'll keep it short:

      Doing this kind of thing would be fragile if attempted for the "general case". I.e. all elements of the "platform X compiler tool chain" matrix. In particular, we'd need a blacklist of libraries to never package. Maybe an interactive front-end that prompts the user to select which of the detected dependencies he really wants, etc.

      I'd love to have this even just for some platforms, but in a way that doesn't end up with users plastering "PAR is broken on platform X!" all over the internet if this particular bit of functionality is not available for their favourite OS.

        In particular, we'd need a blacklist of libraries to never package.

        Um, yeah, some logic needs to be worked out ... PPM/DEB/RPM... packagers all manage to avoid packing c-runtime... should be able to borrow some ideas/lists from them. On win32 you can filter system dlls by %windir%.

        I'd love to have this even just for some platforms, but in a way that doesn't end up with users plastering "PAR is broken on platform X!" all over the internet if this particular bit of functionality is not available for their favourite OS.

        I don't see how it can get worse than the current situation. PAR needs a one-click-checkout, patents be damned :)

Re^2: Packaging Perl Programs (is) Painful
by tsee (Curate) on Sep 07, 2010 at 14:52 UTC

    Addendum re Module::ScanDeps performance. I just sped up the run time of the Module::ScanDeps tests by a factor of three. In a test with "pp -e 'use Padre'", this moves Module::ScanDeps down from being the slowest part of a "pp" run to making Archive::Zip-related operations the culprit.

    This took half an hour. What I'm trying to say is that there are plenty of low-hanging fruit for everyone.