# in Makefile.PL or Build.PL use inc::latest 'Some::Configure::Prereq';
The "inc::latest" module helps bootstrap configure-time dependencies for CPAN distributions. These dependencies get bundled into the "inc" directory within a distribution and are used by Makefile.PL or Build.PL.
Arguments to "inc::latest" are module names that are checked against both the current @INC array and against specially-named directories in "inc". If the bundled version is newer than the installed one (or the module isn't installed, then, the bundled directory is added to the start of @INC and the module is loaded from there.
There are actually two variations of "inc::latest" --- one for authors and one for the "inc" directory. For distribution authors, the "inc::latest" installed in the system will record modules loaded via "inc::latest" and can be used to create the bundled files in "inc", including writing the second variation as "inc/latest.pm".
This second "inc::latest" is the one that is loaded in a distribution being installed (e.g. from Makefile.PL or Build.PL). This bundled "inc::latest" is the one that determines which module to load.
Thus, the module-name provided should usually be the ``top-level'' module name of a distribution, though this is not strictly required. "inc::latest" has a number of heuristics to discover module names, allowing users to do things like this:
use inc::latest 'Devel::AssertOS::Unix';
even though Devel::AssertOS::Unix is contained within the Devel-CheckOS distribution.
At the current time, packlists are required. Thus, bundling dual-core modules may require a 'forced install' over versions in the latest version of perl in order to create the necessary packlist for bundling.
For example, if you need "Wibble", but "Wibble" depends on "Wobble", and you have bundled "Module::Build", your Build.PL might look like this:
use inc::latest 'Wobble'; use inc::latest 'Wibble'; use inc::latest 'Module::Build'; Module::Build->new( module_name => 'Foo::Bar', license => 'perl', )->create_build_script;
Authors are strongly suggested to limit the bundling of additional dependencies if at all possible and to carefully test their distribution tarballs before uploading to CPAN.
When calling "use", the bundled "inc::latest" takes a single module name and optional arguments to pass to that module's own import method.
use inc::latest 'Foo::Bar' qw/foo bar baz/;
The implementation is private. Only the "import" method is public.
if ( inc::latest->can('write') ) { inc::latest->write('inc'); }
Using author-mode, you can create the stub inc/latest.pm and bundle modules into inc.
my @list = inc::latest->loaded_modules;
This takes no arguments and always returns a list of module names requested for loading via ``use inc::latest 'MODULE''', regardless of whether the load was successful or not.
inc::latest->write( 'inc' );
This writes the bundled version of inc::latest to the directory name given as an argument. It almost all cases, it should be '"inc"'.
for my $mod ( inc::latest->loaded_modules ) { inc::latest->bundle_module($mod, $dir); }
If $mod corresponds to a packlist, then this function creates a specially-named directory in $dir and copies all .pm files from the modlist to the new directory (which almost always should just be 'inc'). For example, if Foo::Bar is the name of the module, and $dir is 'inc', then the directory would be 'inc/inc_Foo-Bar' and contain files like this:
inc/inc_Foo-Bar/Foo/Bar.pm
Currently, $mod must have a packlist. If this is not the case (e.g. for a dual-core module), then the bundling will fail. You may be able to create a packlist by forced installing the module on top of the version that came with core Perl.
<https://github.com/dagolden/inc-latest>
git clone https://github.com/dagolden/inc-latest.git
This is free software, licensed under:
The Apache License, Version 2.0, January 2004