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

Make your CPAN module static installable

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Shoichi Kaji Shoichi Kaji
March 29, 2017
33

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)

Avatar for Shoichi Kaji

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