summaryrefslogtreecommitdiff
path: root/src/dependencies.bash
blob: 538263843253e50f2d4dcbcf40837385921de60d (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
#!/bin/false

intersection()
{
        comm -12 "$@"
}

difference()
{
        comm -23 "$@"
}

extract_words()
{
        grep -o -E '\b\w[-._[:alnum:]]*' | sort -u
}

immediate_dependencies1()
{
        intersection \
                <(compgen -A function | sort -u) \
                <(declare -f "$1" | extract_words)
}

immediate_dependencies()
{
        (for f
        do
                immediate_dependencies1 "$f"
        done) | sort -u
}

recursive_dependencies()
{
        local seen=()
        while [ $# -gt 0 ]
        do
                seen+=("$@")
                set -- $(difference <(immediate_dependencies "$@") \
                                    <(printf '%s\n' "${seen[@]}" | sort -u))
        done
        printf '%s\n' "${seen[@]}"
}