Load when dist.ini contains [@Author::GETTY] — bundle options, POD conventions (=attr/=method/=opt), next-version semantics, dzil release workflow, copyright_year, Changes/{{$NEXT}}
When working with [@Author::GETTY] plugin bundle:
name = Distribution-Name
author = Name <email>
license = Perl_5
copyright_holder = Copyright Owner
no_cpan - Skip UploadToCPANno_podweaver - Skip PodWeaverno_changes - Skip NextReleaseno_installrelease - Skip InstallReleaseno_makemaker - Skip MakeMakerxs - Use ModuleBuildTiny (for pure-Perl XS without Alien deps)deprecated - Add Deprecated pluginadoptme - Add x_adoptme metadataxs_alien = Alien::Foo - Auto-configures MakeMaker::Awesome for XS+Alienxs_object = Name - Override XS object name (default: derived from Alien name)task = 1 - TaskWeaver + AutoVersionmanual_version = x.x - Manual versionmajor_version = 2 - Major version for AutoVersionirc = #channel - IRC channelirc_server - Server (default: irc.perl.org)irc_user - Username for SUPPORT sectionrelease_branch - Branch for releases (default: main)alien_)For wrapping C libraries with Alien::Base:
Required:
alien_repo - URL to download releases fromLibrary identification:
alien_name - Name of the alien packagealien_bins - Executables to install (multi-value)Archive pattern matching:
alien_pattern - Full regex pattern for archive matchingalien_pattern_prefix - Prefix (e.g., mylib-)alien_pattern_version - Version regex (default: ([\d\.]+))alien_pattern_suffix - Suffix (e.g., \.tar\.gz)Build configuration:
alien_msys - Use MSYS on Windowsalien_autoconf_with_pic - Pass --with-pic to autoconfalien_isolate_dynamic - Isolate dynamic librariesalien_version_check - Command to check installed versionCustom build commands (for non-autoconf projects):
alien_build_command - Custom build commands (multi-value, use %s for prefix)alien_install_command - Custom install commands (multi-value)alien_test_command - Custom test commands (multi-value)Dependencies:
alien_bin_requires - Build dependencies (multi-value)run_)run_before_build, run_after_buildrun_before_release, run_after_releaserun_release, run_test=synopsis → =head1 SYNOPSIS=description → =head1 DESCRIPTION=seealso → =head1 SEE ALSO=attr name → =head2 name=method method_name → =head2 method_name=func func_name → =head2 func_name=opt - CLI options=env - Environment variables=hook - Hooks=example - ExamplesAuto-generated sections (do NOT write manually): NAME, VERSION, AUTHOR, SUPPORT, CONTRIBUTING, COPYRIGHT
The version in the repository is always the NEXT release version, not the current one.
Before a release, the files already contain the upcoming version:
dist.ini or module $VERSION = e.g. 1.005Changes has {{$NEXT}} as the placeholder for unreleased changes1.004After dzil release runs:
{{$NEXT}} in Changes is replaced with 1.005 + release date1.006 (or next AutoVersion value)v1.005 is createdDo NOT treat the version in dist.ini as the released version. If the user asks "what version is released?", check CPAN or git tags — not the current $VERSION in the files.
Do NOT bump the version manually before a release — dzil release handles this automatically.
When pinning a GETTY-authored dist (Langertha, Net::Async::, WWW::, DBIO, etc.) as a dependency in another project's cpanfile, the same rule flips around on you:
lib/Foo.pm / dist.ini is the NEXT unreleased versioncpanfile can actually installSo always pin to the metacpan version, not the version you see locally in the source tree.
cpanm --info Net::Async::WebSearch # → GETTY/Net-Async-WebSearch-0.002.tar.gz ← USE 0.002
grep VERSION ~/dev/perl/p5-net-async-websearch/lib/Net/Async/WebSearch.pm
# → our $VERSION = '0.003'; ← NOT this
Pinning to the local-source version means cpm can't resolve it (404 on metacpan). If you need an unreleased feature, ask the author to release first — don't try to pin ahead.
# Before release: check Changes, ensure {{$NEXT}} section has entries
# Then:
dzil release # Builds, tests, uploads to CPAN, bumps version, commits, tags
copyright_year IS used in dist.ini — GETTY has it in ALL distributions, do NOT remove it=head1 SUPPORT/AUTHOR/COPYRIGHT in POD=attr/=method directly after codecpanfile, not dist.ini{{$NEXT}} for unreleasedxs_alien = Alien::Foo (auto-configures MakeMaker::Awesome)