#!/bin/bash

# Creates a Makefile that runs "port livecheck" for each port I maintain,
# then runs "make" with multiple simultaneous jobs, then deletes the Makefile.
# The results don't always display in the same order each time, but they do
# come in much faster.

HANDLE=ryandesign
JOBS="$(sysctl -n hw.ncpu)"

PORTS=$(port echo '(' \
'maintainer:(\s|^)'$HANDLE'(\s|$)' or \
'maintainer:(\s|^)'$HANDLE'@macports.org(\s|$)' or \
'maintainer:(\s|^)macports.org:'$HANDLE'(\s|$)' ')' \
| sed -E 's/ +//g' \
| tr '\n' ' ')

MAKEFILE="$(mktemp "${TMPDIR:=/tmp}/portmylivecheck.XXXXXXXXXX")"
MAKEFILE_FD=3

eval exec "$MAKEFILE_FD>$MAKEFILE"

echo "all: $PORTS" >&$MAKEFILE_FD
echo >&$MAKEFILE_FD
echo ".PHONY: $PORTS" >&$MAKEFILE_FD

for PORT in $PORTS; do
    echo >&$MAKEFILE_FD
    echo "$PORT:" >&$MAKEFILE_FD
    echo $'\t'"port livecheck $PORT" >&$MAKEFILE_FD
done

eval exec "$MAKEFILE_FD>&-"

make -f "$MAKEFILE" -j "$JOBS" -s || exit $?

rm -f "$MAKEFILE"