Project

General

Profile

1 1947 aaronmk
#!/bin/bash
2
# Runs a make target on all inputs at once.
3
# Creates a job in the calling shell for each process.
4 1956 aaronmk
# Must be run from the root svn directory.
5 1947 aaronmk
6 14034 aaronmk
isset() { declare -p "$1" &>-; } # "${var+isset}" doesn't work for empty arrays
7
8 11416 aaronmk
main()
9 1952 aaronmk
{
10
    local self="${BASH_SOURCE[0]}"
11
    local selfDir="$(dirname -- "$self")"
12
13
    # Was run without initial ".", or with insufficient parameters
14 1953 aaronmk
    if test "${BASH_LINENO[1]}" = 0 -o "$#" -lt 1; then
15 11374 aaronmk
        echo "Usage: [hidden_srcs=1] [inputs=(inputs/src/ ...)]; . $self \
16
make_target [vars...] (note initial \".\")"|fold -s >&2
17 1952 aaronmk
        return 2
18
    fi
19 14034 aaronmk
    if ! isset inputs; then local inputs=(inputs/*/); fi
20 11456 aaronmk
    if test "$hidden_srcs"; then local inputs=(inputs/.[^as.]*/ "${inputs[@]}")
21
    fi # not . .. .svn .archive
22 1952 aaronmk
23 6202 aaronmk
    for input in "${inputs[@]}"; do
24 8836 aaronmk
        eval "yes|make ${input}$* &"
25 1952 aaronmk
        disown -h "$(jobs|tail -1|"$selfDir/jobspecs")" # ignore SIGHUP
26
        sleep 2 # wait for initial output so that outputs don't become jumbled
27
    done
28
}
29 11416 aaronmk
main "$@"