Slide 1

Slide 1 text

Make your CPAN module static installable Shoichi Kaji

Slide 2

Slide 2 text

Me CPAN, github: skaji Shoichi Kaji

Slide 3

Slide 3 text

Agenda • Typical CPAN module installation • Introduce static install • Why do you adopt static install? • DEMO • How to make your CPAN module static installable • Conclusion

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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?

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

DEMO https://gist.github.com/skaji/ 24de4a819ca4a84b2018f5ee996ac52a

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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 👍

Slide 12

Slide 12 text

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