From 4757ea7c7a66da198caacf53ffd972c9b6892524 Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Mon, 9 Jul 2012 02:28:31 -0500 Subject: [PATCH] script/makepkg: avoid loading packages with incomplete depgraphs --- script/makepkg | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/script/makepkg b/script/makepkg index 8ee3183..904cac9 100755 --- a/script/makepkg +++ b/script/makepkg @@ -411,6 +411,36 @@ port_fetch_recursive() { # ######## +# Recursively compute all dependencies to load; avoid loading packages whose +# depgraph is incomplete, since that can cause strange behaviour at build time +port_available_deps() { + # Clear cache if first value isn't '-r' + [ "${1}" = '-r' ] && shift || kvs_unset_all 'port_available_deps' + + local port="${1}" + local dependency + local good=good + + if kvs_has_key 'port_available_deps' "${port}" + then + good="$(kvs_get 'port_available_deps' "${port}")" + #echo "S==> Skipping ${port} (${good:-not good})" >&2 + else + #echo "D==> Port ${port} deps: $(port_deps "${port}" | sort | tr '\n' ' ')" >&2 + for dependency in $(port_deps "${port}" | sort) + do + #echo "C==> Computing ${dependency}" >&2 + # Recurse into dependency + port_available_deps -r "${dependency}" || unset good + done + local pkgfile="${final_bdeps_dir}/$(port2pkg "${port}").tbz" + [ "${good}" -a -f "${pkgfile}" ] && echo "${port}" || unset good + kvs_set 'port_available_deps' "${port}" "${good}" + #echo "R==> ${port} is ${good:-not good}" + fi + [ "${good}" ] +} + # Copy in and install dependency packages # Missing dependencies are not fatal, since a port build will rebuild them anyways port_load_deps() { @@ -427,7 +457,7 @@ port_load_deps() { fi # And now for the dependencies - for pkg in $(port2pkg $(port_all_deps "${port}")) + for pkg in $(port2pkg $(port_available_deps "${port}" | sort -u)) do cp -f "${final_bdeps_dir}/${pkg}.tbz" "${bdeps_dir}" 2>/dev/null && meh "Loading dependent ${pkg}" done -- 2.45.0