summaryrefslogtreecommitdiffstats
path: root/lib/deps.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/deps.sh')
-rw-r--r--lib/deps.sh100
1 files changed, 80 insertions, 20 deletions
diff --git a/lib/deps.sh b/lib/deps.sh
index 03f0685..5584e65 100644
--- a/lib/deps.sh
+++ b/lib/deps.sh
@@ -25,12 +25,13 @@ ob_use metadata
ob_parse_dep()
{
_ob_local _obpd_opt _obpd_pkg_var _obpd_archqual_var _obpd_rel_var \
- _obpd_ver_var _obpd_arches_var _obpd_host_arch _obpd_dep \
+ _obpd_ver_var _obpd_arches_var _obpd_plats_var \
+ _obpd_host_arch _obpd_host_plat _obpd_dep \
_obpd_pkgarchqual _obpd_pkg _obpd_archqual \
- _obpd_relver _obpd_rel _obpd_ver _obpd_arches \
+ _obpd_relver _obpd_rel _obpd_ver _obpd_arches _obpd_plats \
_obpd_comp _obpd_comp_var
- while getopts 'p:q:r:v:A:a:' _obpd_opt; do
+ while getopts 'p:q:r:v:A:l:a:P:' _obpd_opt; do
case "${_obpd_opt}" in
p)
_obpd_pkg_var="${OPTARG}"
@@ -67,9 +68,19 @@ ob_parse_dep()
return ${?}
fi
;;
+ l)
+ _obpd_plats_var="${OPTARG}"
+ if ! _ob_validate_var_name "${_obpd_plats_var}"; then
+ _ob_return 125
+ return ${?}
+ fi
+ ;;
a)
_obpd_host_arch="${OPTARG}"
;;
+ P)
+ _obpd_host_plat="${OPTARG}"
+ ;;
?)
_ob_return 125
return ${?}
@@ -90,7 +101,7 @@ ob_parse_dep()
return ${?}
fi
- # <pkg>[:<archqual>] [(<rel> <ver>)] [\[<arches>\]]
+ # <pkg>[:<archqual>] [(<rel> <ver>)] [\[<arches>\]] [\<<plats>\>]
_obpd_pkgarchqual="${_obpd_dep%% *}"
_obpd_dep=" ${_obpd_dep#* }"
@@ -110,45 +121,62 @@ ob_parse_dep()
if [ "${_obpd_dep# \[*\]}" != "${_obpd_dep}" ]; then
_obpd_arches="${_obpd_dep# \[}"
_obpd_arches="${_obpd_arches%%\]*}"
+ _obpd_dep="${_obpd_dep# \[*\]}"
+ fi
+
+ if [ "${_obpd_dep# <*>}" != "${_obpd_dep}" ]; then
+ _obpd_plats="${_obpd_dep# <}"
+ _obpd_plats="${_obpd_arches%%>*}"
+ _obpd_dep="${_obpd_dep# <*>}"
fi
# Set the specified variables.
- for _obpd_comp in pkg archqual rel ver arches; do
+ for _obpd_comp in pkg archqual rel ver arches plats; do
_obpd_comp_var="$(eval echo \"\$\{_obpd_${_obpd_comp}_var\}\")"
[ -z "${_obpd_comp_var}" ] && continue
eval ${_obpd_comp_var}=\"\$\{_obpd_${_obpd_comp}\}\"
done
- if [ -z "${_obpd_host_arch}" ]; then
- printf '%s' "${_obpd_pkg}"
- [ -n "${_obpd_archqual}" ] && printf ':%s' "${_obpd_archqual}"
- [ -n "${_obpd_ver}" ] && printf ' (%s %s)' "${_obpd_rel}" "${_obpd_ver}"
- [ -n "${_obpd_arches}" ] && printf ' [%s]' "${_obpd_arches}"
- printf '\n'
- elif _ob_dep_arch_is_concerned "${_obpd_host_arch}" "${_obpd_arches}"; then
- printf '%s' "${_obpd_pkg}"
- [ -n "${_obpd_archqual}" ] && printf ':%s' "${_obpd_archqual}"
- [ -n "${_obpd_ver}" ] && printf ' (%s %s)' "${_obpd_rel}" "${_obpd_ver}"
- printf '\n'
+ if [ -n "${_obpd_host_arch}" ] && ! _ob_dep_arch_is_concerned \
+ "${_obpd_host_arch}" "${_obpd_arches}"; then
+ _ob_return 0
+ return ${?}
+ fi
+ if [ -n "${_obpd_host_plat}" ] && ! _ob_dep_plat_is_concerned \
+ "${_obpd_host_plat}" "${_obpd_plats}"; then
+ _ob_return 0
+ return ${?}
fi
+ printf '%s' "${_obpd_pkg}"
+ [ -n "${_obpd_archqual}" ] && printf ':%s' "${_obpd_archqual}"
+ [ -n "${_obpd_ver}" ] && printf ' (%s %s)' "${_obpd_rel}" "${_obpd_ver}"
+ [ -z "${_obpd_host_arch}" -a -n "${_obpd_arches}" ] && \
+ printf ' [%s]' "${_obpd_arches}"
+ [ -z "${_obpd_host_plat}" -a -n "${_obpd_plats}" ] && \
+ printf ' [%s]' "${_obpd_plats}"
+ printf '\n'
+
_ob_return 0
return ${?}
}
ob_reduce_deps()
{
- _ob_local _obrd_opt _obrd_host_arch _obrd_deps \
+ _ob_local _obrd_opt _obrd_host_arch _obrd_host_plat _obrd_deps \
_obrd_orig_ifs _obrd_dep_and _obrd_dep_or \
_obrd_dep_list _obrd_dep_or_list _obrd_dep
_obrd_union='false'
- while getopts 'a:u' _obrd_opt; do
+ while getopts 'a:P:u' _obrd_opt; do
case "${_obrd_opt}" in
a)
_obrd_host_arch="${OPTARG}"
;;
+ P)
+ _obrd_host_plat="${OPTARG}"
+ ;;
u)
_obrd_union='true'
;;
@@ -177,7 +205,7 @@ ob_reduce_deps()
for _obrd_dep_or in ${_obrd_dep_and}; do
IFS="${_obrd_orig_ifs}"
_obrd_dep="$(ob_parse_dep -a "${_obrd_host_arch}" \
- "${_obrd_dep_or}")"
+ -P "${_obrd_host_plat}" "${_obrd_dep_or}")"
if [ -n "${_obrd_dep}" ]; then
if [ -n "${_obrd_dep_or_list}" ]; then
_obrd_dep_or_list="${_obrd_dep_or_list} | "
@@ -193,7 +221,7 @@ ob_reduce_deps()
fi
else
_obrd_dep="$(ob_parse_dep -a "${_obrd_host_arch}" \
- "${_obrd_dep_and}")"
+ -P "${_obrd_host_plat}" "${_obrd_dep_and}")"
if [ -n "${_obrd_dep}" ]; then
if [ -n "${_obrd_dep_list}" ]; then
_obrd_dep_list="${_obrd_dep_list}, "
@@ -240,3 +268,35 @@ _ob_dep_arch_is_concerned()
_ob_return ${_obdaic_seen_arch}
return ${?}
}
+
+_ob_dep_plat_is_concerned()
+{
+ _ob_local _obdpic_host_plat _obdpic_plats \
+ _obdpic_plat _obdpic_not_plat _obdpic_seen_plat
+
+ _obdpic_host_plat="${1}"
+ _obdpic_plats="${2}"
+ _obdpic_seen_plat=1
+
+ if [ -z "${_obdpic_plats}" ]; then
+ _obdpic_seen_plat=0
+ fi
+
+ for _obdpic_plat in ${_obdpic_plats}; do
+ _obdpic_not_plat="${_obdpic_plat#!}"
+ if [ "${_obdpic_not_plat}" != "${_obdpic_plat}" ]; then
+ if ob_match_plat "${_obdpic_host_plat}" "${_obdpic_not_plat}"; then
+ _obdpic_seen_plat=1
+ break
+ else
+ _obdpic_seen_plat=0
+ fi
+ elif ob_match_plat "${_obdpic_host_plat}" "${_obdpic_plat}"; then
+ _obdpic_seen_plat=0
+ break
+ fi
+ done
+
+ _ob_return ${_obdpic_seen_plat}
+ return ${?}
+}