#!/bin/bash
set -e -o pipefail
main() {
local version=${1:-`git describe --tags HEAD`}
echo "# Cleaning up previous fatpack/"
mkdir -p fatpack
rm -rf fatpack/lib fatpack/fatlib fatpack/trace
echo
echo "# Copying our own libs for packing"
cp -rv lib fatpack
echo
echo "# Tracing modules"
cpanfile-dump --no-configure --no-build --no-test --no-recommends --no-suggests \
| grep -vF perl \
| grep -vF App::RecordStream::Operation \
| xargs printf "use %s;\n" \
| fatpack trace --to=fatpack/trace >/dev/null 2>&1
pushd fatpack >/dev/null
echo
echo "# Copying non-core deps into fatlib"
filter-modules < trace \
| xargs fatpack packlists-for \
| xargs fatpack tree
echo
echo "# Stripping Perl libs"
find fatlib lib -type f -name '*.pm' \
| xargs perlstrip --size --cache
echo
echo "# Fatpacking into bio.pm"
fatpack file <(stub-script "$version") > bio.pm
popd >/dev/null
}
filter-modules() {
perl -Mutf8 -CSAD -MModule::CoreList -nE '
chomp;
my $mod = s</><::>rg =~ s/\.pm$//r;
# TODO: does not account for modules which are removed from core after
# 5.8.1... though that is fairly rare.
# -trs, 21 July 2017
next if $Module::CoreList::version{5.008001}{$mod};
warn "→ $mod\n";
say;
' "$@"
}
stub-script() {
echo "use App::RecordStream::Bio;"
if [[ -n "$1" ]]; then
printf '$App::RecordStream::Bio::VERSION = q[%s];\n' "$1"
fi
echo "1;"
}
main "$@"