44 lines
943 B
Bash
Executable File
44 lines
943 B
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
if [ "$#" -lt 3 ]; then
|
|
printf '%s\n' \
|
|
"usage: install-depends.sh PORTSDIR PACKAGE_COMMAND BMAKE DEPENDENCY..." >&2
|
|
exit 2
|
|
fi
|
|
|
|
portsdir=$1
|
|
package_command=$2
|
|
bmake=$3
|
|
shift 3
|
|
|
|
case "$bmake" in
|
|
/*/bmake|bmake) ;;
|
|
*) printf '%s\n' "invalid BSD make command: $bmake" >&2; exit 1 ;;
|
|
esac
|
|
|
|
for dependency in "$@"; do
|
|
case "$dependency" in
|
|
*:*/*) ;;
|
|
*) printf '%s\n' "invalid dependency: $dependency" >&2; exit 1 ;;
|
|
esac
|
|
name=${dependency%%:*}
|
|
origin=${dependency#*:}
|
|
category=${origin%%/*}
|
|
port=${origin#*/}
|
|
case "$origin" in
|
|
*/*/*) printf '%s\n' "invalid dependency origin: $origin" >&2; exit 1 ;;
|
|
esac
|
|
for component in "$name" "$category" "$port"; do
|
|
case "$component" in
|
|
""|[!a-z]*|*[!a-z0-9-]*)
|
|
printf '%s\n' "invalid dependency: $dependency" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
if ! "$package_command" status "$name" >/dev/null 2>&1; then
|
|
"$bmake" -C "$portsdir/$origin" install
|
|
fi
|
|
done
|