summaryrefslogtreecommitdiffstats
path: root/_testing/travis/autoinstall-perl-prereqs.zsh
blob: 4e47b37e3759fe15897b41602594b0816da7ce19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/zsh

. ./_testing/_get_files_arr.zsh

local -a modlist
modlist=($(scan-perl-prereqs $filelist))
echo -n ... >&2

sudo apt-file update

local -a ubu_pkgs
local -a cpan_mods
for mod ($modlist) {
    mod=${mod%\~*}
    if [[ $mod != Irssi* && $mod != feature ]] {
        echo -n $mod >&2
        if { ! perl -M$mod -E1 2>/dev/null } {
            local -a ubu_pkg
            ubu_pkg=($(apt-file -l search "/perl5/${mod//:://}.pm"))
            if [[ $#ubu_pkg -gt 0 ]] { ubu_pkgs+=($ubu_pkg); echo -n '(u)' >&2 } \
            else { cpan_mods+=($mod) }
        }
        echo -n ' ' >&2
    }
}
echo >&2

if [[ $#ubu_pkgs -gt 0 ]] { sudo apt-get install -qq $ubu_pkgs }

typeset -A broken_tests
typeset -A broken_mods

broken_tests=($(perl -MYAML::Tiny=LoadFile -e'print "$_ 1 " for @{LoadFile(+shift)->{cpan}{broken_tests}}' _testing/config.yml))
broken_mods=($(perl -MYAML::Tiny=LoadFile -e'print "$_ 1 " for @{LoadFile(+shift)->{cpan}{broken_modules}}' _testing/config.yml))

echo ... >&2
for mod ($cpan_mods) {
    if { ! perl -M$mod -E1 2>/dev/null } {
        local skip_test=
        if [[ -n $broken_tests[$mod] ]] {
            skip_test=--notest
            echo Skipping broken test on $mod
        }
        if [[ -n $broken_mods[$mod] ]] {
            echo SKIPPING AUTOINSTALL OF BROKEN MODULE $mod
        } \
        else {
            echo Auto-installing $mod
            sudo cpanm -q --skip-satisfied $skip_test $mod
        }
    }
}
exit 0