NAME
Alien::Xrepo::MB - A Module::Build subclass that runs the xrepo build pipeline
SYNOPSIS
# Build.PL
use v5.40;
use Alien::Xrepo::MB;
Alien::Xrepo::MB->new(
module_name => 'Exotic::Zstandard',
dist_abstract => 'Build & install zstd via xrepo',
requires => {
'perl' => 'v5.40.0',
'Alien::Xrepo::Runtime' => 0,
'File::ShareDir' => '1.00'
},
configure_requires => {
'Alien::Xrepo::MB' => 0,
'Module::Build' => 0
},
test_requires => { 'Test2::V0' => 0 }
)->create_build_script;
DESCRIPTION
Alien::Xrepo::MB is a Module::Build subclass for the Alien::Xrepo build engine. Running ./Build (which is what ./Build test invokes) first runs the xrepo pipeline through Alien::Xrepo::Build. It writes the hermetic run-time snapshot into the distribution's share directory inside blib before the normal code action runs.
A package that fails to build or install fails the whole run. The pipeline first records every package that broke (one broken package never hides the siblings that did install), then "assert_installed" in Alien::Xrepo::Build reports them and ./Build dies. The partially written snapshot is discarded at the same time, so the next ./Build rebuilds rather than trusting an incomplete one. This is deliberate: an Alien that quietly ships a family of libraries with one member missing is worse than a build that stops and says which member is absent.
The dist contains no xrepo.json. The Alien class (module_name) is loaded from lib/, and its recipe() method acts as the single declaration for both the build engine and the run-time layer (see Alien::Xrepo::Runtime). Packages are shallow-installed into the dist's share directory, and the snapshot records share-relative paths. As a result, consumers resolve from the dist's share directory (never the xmake cache) and the same snapshot remains valid after ./Build install relocates the directory.
Staleness
The pipeline only (re)runs when the snapshot is missing or older than any of:
Build.PLlib/<class.pm>The engine modules themselves (
Alien::Xrepo::MB,Alien::Xrepo::Build,Alien::Xrepo::Runtime,Alien::Xrepo::Build::Recipe)Any files under the dist's local
recipes/tree
This mirrors Module::Build's copy_if_modified semantics, ensuring ./Build test does not rewrite an up-to-date snapshot.
PROPERTIES
In addition to the standard Module::Build properties, you can configure:
xrepo_snapshot: Where to write the snapshot. Defaults to the conventionalblib/lib/auto/share/dist/<Dist>/xrepo-snapshot.json, which is derived from the module name by translating::to-(e.g.,Alien::ZstandardbecomesAlien-Zstandard;Exotic::ZlibbecomesExotic-Zlib). Set this explicitly if the dist name does not match that derivation.xrepo_share_dir: Where packages are shallow-installed. Defaults to the snapshot's parent directory (the dist'ssharedirectory).xrepo_cache: Pass0(the default) to bypassAlien::Xrepo's on-disk resolution cache so no cache file lands inside thesharedirectory. Set to1to keep the cache.xrepo_update_repo: Pass1to refreshxrepo's repository index (xrepo update-repo) once and retry an install that fails. Useful when a stale registry reports a precompiled artifact with a checksum that no longer matches the mirror.
SEE ALSO
Alien::Xrepo::Build, Alien::Xrepo::Runtime, Alien::Xrepo, Alien::Xrepo::MM
LICENSE
Copyright (C) Sanko Robinson.
This library is free software; you can redistribute it and/or modify it under the terms found in the Artistic License 2. Other copyrights, terms, and conditions may apply to data transmitted through this module.
AUTHOR
Sanko Robinson https://github.com/sanko