#!/bin/bash

install () {

    cpm install -L packer Module::CoreList

    # target latest perl to get modules evicted from core
    # so can run on latest perl
    local CPM_OPTS=(
        -L packed
        --top-level-phase=runtime
        --target-perl=5.42.0
    )

    CPM_OPTS+=( --pureperl-only )
    cpm install "${CPM_OPTS[@]}"

    if (( ${#EXTRAS[*]} )); then
        cpm install "${CPM_OPTS[@]}" "${EXTRAS[@]}"
    fi
}

cpm () {
    local exe=packer/bin/cpm
    if [ ! -x $exe ]; then
        curl -fsSL --compressed https://raw.githubusercontent.com/skaji/cpm/main/cpm -o $exe
        chmod +x $exe
    fi
    unset -f cpm
    cpm "$@"
}

fatpack-simple () {
    if [ ! -f $PWD/packer/bin/fatpack-simple ]; then
        cpm install -L packer App::FatPacker::Simple
    fi
    unset -f fatpack-simple
    fatpack-simple "$@"
}

pack () {

    local exclude=(   )

    if [ "${#exclude[*]}" -gt 0 ]; then
        exclude=(--exclude $(IFS=,; echo "${exclude[*]}"))
    fi

    fatpack-simple                                      \
        "${exclude[@]}"                                 \
        --dir $PWD/packed,$DIR/lib                      \
        -o $DIR/$EXE  $DIR/script/$EXE |& tee pack.log

    perl -i.bak -pe 's{/usr/bin/perl}{/usr/bin/env perl}' $DIR/$EXE
    rm -f $DIR/$EXE.bak

    chmod +x $DIR/$EXE
}

all () {
    install
    pack
}

DIR=./
USEPERL=$(plenv version)
while getopts d:p: arg ; do

    case $arg in
        d)
            DIR=$OPTARG
            ;;

        p)
            USEPERL=$OPTARG
            ;;

    esac
done

shift $(( OPTIND - 1 ))

mkdir -p packer/bin

EXE=mkpkgconfig

export PERL_ONLY=1

PATH="$HOME/.plenv/bin:$PATH"
eval "$(plenv init -)"

unset PERL5LIB
plenv shell $USEPERL
eval $(perl -V:archname)

PATH=$PWD/packer/bin:${PATH}
export PERL5LIB=$PWD/packer/lib/perl5${PERL5LIB:+:$PERL5LIB}

# EXTRAS=( Devel::GlobalDestruction  )

eval "$@"


