1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-04 01:48:54 +00:00
freebsd-ports/Mk/Scripts/depends-list.sh
Mathieu Arnold f916081e1c Add set pipefail in most framework scripts.
set pipefail changes the pipeline return status from being the return
status of the last command to the last non 0 exit status of any command
in the pipeline.  This is needed to make sure all the commands in a
pipeline did actually return a non 0 status and not only the last one.

PR:		250723
Exp-run by:	antoine
Reviewed by:	bapt
Approved by:	bapt
Differential Revision:	https://reviews.freebsd.org/D27007
2020-11-11 13:29:52 +00:00

143 lines
2.9 KiB
Bash

#!/bin/sh
# MAINTAINER: portmgr@FreeBSD.org
# $FreeBSD$
set -e
set -o pipefail
. ${dp_SCRIPTSDIR}/functions.sh
flavors=0
recursive=0
missing=0
requires_wrkdir=0
while getopts "fmrw" FLAG; do
case "${FLAG}" in
f)
flavors=1
;;
m)
missing=1
recursive=1
;;
r)
recursive=1
;;
w)
# Only list dependencies that have a WRKDIR. Used for
# 'make clean-depends'.
# Without -r recurse when WRKDIR exists; with -r
# always recurse.
requires_wrkdir=1
;;
*)
echo "Unknown flag" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
validate_env PORTSDIR dp_OVERLAYS 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
[ -n "${DEBUG_MK_SCRIPTS}" -o -n "${DEBUG_MK_SCRIPTS_DEPENDS_LIST}" ] && set -x
set -u
if [ ${missing} -eq 1 ]; then
existing=$(${dp_PKG_INFO} -aoq|paste -d ' ' -s -)
fi
check_dep() {
local _dep wrkdir show_dep
for _dep ; do
unset FLAVOR
myifs=${IFS}
IFS=:
set -- ${_dep}
IFS=${myifs}
case "${2}" in
/*) d=${2} ;;
*) for overlay in ${dp_OVERLAYS} ${PORTSDIR}; do
d=${overlay}/${2}
f=
case "${d}" in
*@*/*) ;; # Ignore @ in the path which would not be a flavor
*@*)
f=${d##*@}
d=${d%@*}
;;
esac
if [ -f ${d}/Makefile ]; then
if [ -n $f ]; then
export FLAVOR=$f
fi
break
fi
done
esac
if [ ${flavors} -eq 1 -a -n "${FLAVOR:-}" ]; then
port_display="${d}@${FLAVOR}"
else
port_display="${d}"
fi
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}: \"${port_display}\" non-existent -- dependency list incomplete" >&2
continue
fi
# If only looking for missing, show if missing
if [ ${missing} -eq 1 ]; then
case " ${existing} " in
*\ ${d#${PORTSDIR}/}\ *) continue ;; # We have it, nothing to see
esac
fi
# Grab any needed vars from the port.
if [ ${requires_wrkdir} -eq 1 ]; then
# shellcheck disable=SC2046
# We want word splitting here.
set -- $(${dp_MAKE} -C ${d} -VWRKDIR -V_UNIFIED_DEPENDS)
wrkdir="$1"
shift
elif [ ${recursive} -eq 1 ]; then
# shellcheck disable=SC2046
# We want word splitting here.
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 "${port_display}"
if [ ${recursive} -eq 1 -o ${requires_wrkdir} -eq 1 -a ${show_dep} -eq 1 ]; then
# shellcheck disable=SC2068
# Do not add quotes, we want to split the string here.
check_dep $@
fi
done
}
checked=
# shellcheck disable=SC2068
# Do not add quotes, we want to split the string here.
check_dep $@