Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Make your CPAN module static installable

Shoichi Kaji
March 29, 2017
18

Make your CPAN module static installable

Gotanda.pm Perl Technology Conference #12 2017/03/29
(original https://www.slideshare.net/skaji/make-your-cpan-module-static-installable)

Shoichi Kaji

March 29, 2017
Tweet

Transcript

  1. Agenda • Typical CPAN module installation • Introduce static install

    • Why do you adopt static install? • DEMO • How to make your CPAN module static installable • Conclusion
  2. Typical way • This is a typical CPAN module installation

    • Bundled Makefile.PL knows how to configure/build/test/install the CPAN module • So you don’t need any tools to install CPAN modules; this is good • CPAN modules can do almost anything in Makefile.PL; this is powerful wget http://www.cpan.org/.../Module-0.1.tar.gz tar xzf Module-0.1.tar.gz cd Module-0.1 perl Makefile.PL # or perl Build.PL make make test make install
  3. BTW • Nowadays, a lot of people use CPAN clients,

    such as cpanm to install CPAN modules • If CPAN modules are not "complicated", then CPAN clients easily expect how to configure/ build/test/install them • … do we really need Makefile.PL?
  4. Introduce static install • Now we have the concept static

    install introduced by Leon Timmermans (sorry if I am wrong) • That is, if CPAN modules
 
 - are not "complicated"
 - set x_static_install 1 in their META.json
 
 then CPAN clients may configure/build/test/install them in the common way without executing Makefile.PL • cpanm-menlo and cpm already support static install
  5. Why do you adopt static install? • Fast
 we don’t

    need to execute Makefile.PL, which makes CPAN module installation much faster • Simple
 People can easily expect results (eg: which files are installed and where) • Safe
 There is no place to execute arbitrary code during configure/build/install steps
  6. How to make your CPAN module static installable • First,

    check your CPAN modules are not complicated • pm files are in lib/ • executable files are in script/ (if any) • prereqs are declared in META.json statically • no xs file, no Module_pm.PL file
  7. How to make your CPAN module static installable • Here

    I assume you use Minilla • Modify toml.minil as follows • Then your module is static install ready 😄 > minil build > grep x_static_install META.json "x_static_install" : 1 name = "Your-Module" module_maker = "ModuleBuildTiny" [Metadata] x_static_install = 1
  8. Conclusion • CPAN ecosystem uses Makefile.PL/Build.PL to install CPAN modules

    • It is powerful, but often overly complicated • Now we have the concept static install, which is much simpler and faster • To make CPAN modules static installable, set x_static_install 1 in META.json • Let’s make CPAN ecosystem simpler 👍
  9. See also • My blog post
 http://blogs.perl.org/users/shoichi_kaji1/2017/03/ make-your-cpan-module-static-installable.html • The

    spec of static install
 https://github.com/Perl-Toolchain-Gang/cpan-static • An implementation of static install in Menlo
 https://github.com/miyagawa/cpanminus/pull/467