mirror of
https://git.freebsd.org/ports.git
synced 2025-06-14 01:00:33 -04:00
When command expansions are unquoted, word splitting and globbing will occur. This often manifests itself by breaking when filenames contain spaces. Trying to fix it by adding quotes or escapes to the data will not work. Instead, quote the command substitution itself. If the command substitution outputs multiple pieces of data, use a loop instead. Add an exception when using set -- where splitting is intended. PR: 227109 Submitted by: mat Exp-run by: antoine Sponsored by: Absolight
132 lines
2.8 KiB
Bash
132 lines
2.8 KiB
Bash
#!/bin/sh
|
|
# MAINTAINER: portmgr@FreeBSD.org
|
|
# $FreeBSD$
|
|
|
|
set -e
|
|
|
|
. ${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_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} ;;
|
|
*) d=${PORTSDIR}/${2} ;;
|
|
esac
|
|
|
|
case "${d}" in
|
|
*@*/*) ;; # Ignore @ in the path which would not be a flavor
|
|
*@*)
|
|
export FLAVOR=${d##*@}
|
|
d=${d%@*}
|
|
;;
|
|
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 $@
|