Project

General

Profile

1
#!/bin/bash
2
# Runs a make target on all inputs at once.
3
# Creates a job in the calling shell for each process.
4
# Must be run from the root svn directory.
5

    
6
isset() { declare -p "$1" &>-; } # "${var+isset}" doesn't work for empty arrays
7

    
8
main()
9
{
10
    local self="${BASH_SOURCE[0]}"
11
    local selfDir="$(dirname -- "$self")"
12
    
13
    # Was run without initial ".", or with insufficient parameters
14
    if test "${BASH_LINENO[1]}" = 0 -o "$#" -lt 1; then
15
        echo "Usage: [hidden_srcs=1] [inputs=(inputs/src/ ...)]; . $self \
16
make_target [vars...] (note initial \".\")"|fold -s >&2
17
        return 2
18
    fi
19
    declare -p inputs
20
    if ! isset inputs; then local inputs=(inputs/*/); fi
21
    declare -p inputs
22
    if test "$hidden_srcs"; then local inputs=(inputs/.[^as.]*/ "${inputs[@]}")
23
    fi # not . .. .svn .archive
24
    
25
    for input in "${inputs[@]}"; do
26
        eval "yes|make ${input}$* &"
27
        disown -h "$(jobs|tail -1|"$selfDir/jobspecs")" # ignore SIGHUP
28
        sleep 2 # wait for initial output so that outputs don't become jumbled
29
    done
30
}
31
main "$@"
(84-84/86)