mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-10 07:04:03 +00:00
7610a280b5
overlays are a way to help users to integrate their own ports tree with the official ports tree without having to maintain clone of the official tree and remerge on regular basis. The ports tree will lookup in the overlays (in the order the are listed in OVERLAY variable) for the dependencies and the USES. It will use the first found. in order to use it the user have to declare his overlays that way in their make.conf: OVERLAYS= overlay1 overlay2 overlay3 Reviewed by: manu Approved by: swills Differential Revision: https://reviews.freebsd.org/D21468
142 lines
2.9 KiB
Bash
142 lines
2.9 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_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 $@
|