ExtUtil...AN::Tool(3)

πŸ’– ExtUtils::Builder::CPAN::Tool(3) β€” the whole vibe πŸ’–

okay bestie, listen. this is a page from section 3 of the manual, and it's literally called ExtUtils::Builder::CPAN::Tool. no cap, it's the blueprint. the moment where the build script protocol gets its glow-up. πŸ¦‹


✨ NAME ✨

ExtUtils::Builder::CPAN::Tool β€” a base implementation for CPAN build scripts. that's the whole assignment. it's the foundation, the main character, the thing everything else gets built on top of. πŸ’…


🌸 VERSION 🌸

version 0.020 β€” that's the one, that's the number, don't @ me.


πŸŽ€ SYNOPSIS πŸŽ€

here's the little ritual you do, verbatim, no edits, no substitutions:

my $planner = ExtUtils::Builder::Planner->new;
$planner->create_phony($_) for qw/code manify dynamic/;
$planner->create_phony('all', qw/code manify dynamic/);
$planner->load_extension('ExtUtils::Builder::CPAN::Tool');
$planner->new_scope->run_dsl($_) for glob 'planner/*.pl';
my $plan = $planner->materialize;
$plan->run('all');

look at her go. planner created, phonies made, extension loaded, DSL run over every planner/*.pl, plan materialized, and then all goes brrr. iconic. πŸ”₯


🧚 DESCRIPTION 🧚

so what is this? it provides a base implementation of the CPAN build script protocol. that's the tea. β˜•

and the specializations that are already out there in the wild? they're Dist::Build and ExtUtils::Builder::MakeMaker. those are the known ones, iykyk. πŸ‘‘


πŸ’œ DELEGATES πŸ’œ

these are the little delegates, the supporting cast, the ones who carry the whole plot:

⭐ config

the ExtUtils::Config (or compatible) object for this build. that's her. she holds the settings. 🫢

⭐ meta

a CPAN::Meta object representing the metadata for this distribution. and by default? it just loads the META.json sitting right there in the current directory. lowkey convenient, highkey iconic. πŸ“„

⭐ distribution

the name of the distribution. just the name. that's it. short and sweet. ✨

⭐ version

the version of the distribution β€” and yes, as a version object. not a string, not vibes, a real object. πŸ’…

⭐ main_module

the main module of the distribution. the one in the front of the group photo. πŸ“Έ

⭐ perl_path

the path to the perl executable. where's perl at? right here bestie. πŸͺ

⭐ is_os(@os_names)

this one returns true if the current operating system matches any of the listed ones. you pass in @os_names, it tells you if we're on one of them. simple. clean. slay. βœ…

⭐ is_os_type($os_type)

returns true if the type of the OS matches $os_type. and the legal values? "Unix", "Windows", and "VMS". those three. that's the whole list. no extra options, no secret fourth one. periodt. 🚫

⭐ verbose

the requested verbosity. by default this is a stub that always returns false. so like… default quiet mode. 🀫

⭐ uninst

the value of the "uninst" command line argument. and by default? another stub, always returns false. πŸ™ˆ

⭐ jobs

the requested number of jobs for this build. by default it's a stub that always returns 1. one job. just the one. lonely but employed. πŸ’€

⭐ pureperl_only

the value of the pureperl_only argument. by default it's a stub that always returns false. πŸ“

⭐ new_planner.

this creates a new planner, sharing a configuration object with the current one. that's the move. new planner, same config, shared energy. πŸŽ€


πŸ‘‘ AUTHOR πŸ‘‘

Leon Timmermans <fawaka@gmail.com> β€” the author, the legend, the one who wrote this. πŸ’–


this software is copyright (c) 2013 by Leon Timmermans.

and it's free software! you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. that's the deal, that's the license, no cap. 🫢


k so real talk, if you're reading this on perl v5.42.2 and the date says 2026-03-22, you're holding the exact right version of the page. mwah. take care of her. πŸ’…βœ¨πŸŽ€
πŸ“¦ where this page comes from