xref: /OK3568_Linux_fs/buildroot/utils/brmake (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# (C) 2016, "Yann E. MORIN" <yann.morin.1998@free.fr>
3*4882a593Smuzhiyun# License: WTFPL, https://spdx.org/licenses/WTFPL.html
4*4882a593Smuzhiyun
5*4882a593Smuzhiyunmain() {
6*4882a593Smuzhiyun    local found ret start d h m mf
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun    if ! which unbuffer >/dev/null 2>&1; then
9*4882a593Smuzhiyun        printf "you need to install 'unbuffer' (from package expect or expect-dev)\n" >&2
10*4882a593Smuzhiyun        exit 1
11*4882a593Smuzhiyun    fi
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun    start=${SECONDS}
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun    ( exec 2>&1; unbuffer make "${@}"; ) \
16*4882a593Smuzhiyun    > >( while read line; do
17*4882a593Smuzhiyun             printf "%(%Y-%m-%dT%H:%M:%S)T %s\n" -1 "${line}"
18*4882a593Smuzhiyun         done \
19*4882a593Smuzhiyun         |tee -a br.log \
20*4882a593Smuzhiyun         |grep --line-buffered --colour=never -E '>>>'
21*4882a593Smuzhiyun       )
22*4882a593Smuzhiyun    ret=${?}
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun    d=$((SECONDS-start))
25*4882a593Smuzhiyun    printf "Done in "
26*4882a593Smuzhiyun    h=$((d/3600))
27*4882a593Smuzhiyun    d=$((d%3600))
28*4882a593Smuzhiyun    [ ${h} -eq 0 ] || { printf "%dh " ${h}; mf="02"; }
29*4882a593Smuzhiyun    m=$((d/60))
30*4882a593Smuzhiyun    d=$((d%60))
31*4882a593Smuzhiyun    [ ${m} -eq 0 ] || { printf "%${mf}dmin " ${m}; sf="02"; }
32*4882a593Smuzhiyun    printf "%${sf}ds" ${d}
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun    if [ ${ret} -ne 0 ]; then
35*4882a593Smuzhiyun        printf "  (error code: %s)" ${ret}
36*4882a593Smuzhiyun    fi
37*4882a593Smuzhiyun    printf "\n"
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun    return ${ret}
40*4882a593Smuzhiyun}
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunmain "${@}"
43