freebsd-ports/Mk/Scripts/depends-list.sh
Bryan Drewery baf3ba05d0 Use normal PORTSDIR rather than dp_PORTSDIR so it is passed around properly.
This fixes errors when PORTSDIR is not set and /usr/ports is not used.  The
/usr/share/bsd.port.mk logic will auto set PORTSDIR, but this was not being
passed into children in the dependency scripts.

With hat:	portmgr
Reported by:	bapt
2015-12-04 22:18:29 +00:00

89 lines
1.8 KiB
Bash

#!/bin/sh
# MAINTAINER: portmgr@FreeBSD.org
# $FreeBSD$
set -e
. ${dp_SCRIPTSDIR}/functions.sh
recursive=0
requires_wrkdir=0
while getopts "rw" FLAG; do
case "${FLAG}" in
r)
recursive=1
;;
w)
# Only list dependencies that have a WRKDIR. Used for
# 'make clean-depends'.
requires_wrkdir=1
;;
*)
echo "Unknown flag" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
validate_env PORTSDIR dp_PKGNAME
if [ ${recursive} -eq 1 -o ${requires_wrkdir} -eq 1 ]; then
validate_env dp_MAKE
# Cache command executions to avoid looking them up again in every
# sub-make.
MAKE="${dp_MAKE}" export_ports_env >/dev/null
fi
set -u
check_dep() {
local _dep wrkdir show_dep
for _dep ; do
myifs=${IFS}
IFS=:
set -- ${_dep}
IFS=${myifs}
case "${2}" in
/*) d=${2} ;;
*) d=${PORTSDIR}/${2} ;;
esac
case " ${checked} " in
*\ ${d}\ *) continue ;; # Already checked
esac
checked="${checked} ${d}"
# Check if the dependency actually exists or skip otherwise.
if [ ! -d ${d} ]; then
echo "${dp_PKGNAME}: \"${d}\" non-existent -- dependency list incomplete" >&2
continue
fi
# Grab any needed vars from the port.
if [ ${requires_wrkdir} -eq 1 -a ${recursive} -eq 1 ]; then
set -- $(${dp_MAKE} -C ${d} -VWRKDIR -V_UNIFIED_DEPENDS)
wrkdir="$1"
shift
elif [ ${requires_wrkdir} -eq 1 -a ${recursive} -eq 0 ]; then
set -- "$(${dp_MAKE} -C ${d} -VWRKDIR)"
wrkdir="$1"
elif [ ${recursive} -eq 1 ]; then
set -- $(${dp_MAKE} -C ${d} -V_UNIFIED_DEPENDS)
fi
# If a WRKDIR is required to show the dependency, check for it.
show_dep=1
if [ ${requires_wrkdir} -eq 1 ] && ! [ -d "${wrkdir}" ]; then
show_dep=0
fi
[ ${show_dep} -eq 1 ] && echo ${d}
if [ ${recursive} -eq 1 ]; then
check_dep $@
fi
done
}
checked=
check_dep $@