From 1da591d31225bb64fc2e843a2db6fd0873d908af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucio=20Andr=C3=A9s=20Illanes=20Albornoz=20=28arab=2C=20vx?= =?UTF-8?q?p=29?= Date: Tue, 21 Nov 2017 17:17:41 +0000 Subject: {build.sh,subr/pkg_setup_dispatch.subr}: split. --- subr/pkg_setup_dispatch.subr | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 subr/pkg_setup_dispatch.subr (limited to 'subr') diff --git a/subr/pkg_setup_dispatch.subr b/subr/pkg_setup_dispatch.subr new file mode 100755 index 00000000..bd47f401 --- /dev/null +++ b/subr/pkg_setup_dispatch.subr @@ -0,0 +1,67 @@ +# +# set -o errexit -o noglob are assumed. +# + +pkg_setup_dispatch() { + local _tgt_name="${1}" _pkg_name="${2}" \ + _restart="${3}" _restart_at="${4}" \ + _pkg_name_parent _pkg_step_cmds _pkg_step_cmd_args; + if [ "${_pkg_name#*_flavour_*}" != "${_pkg_name}" ]; then + _pkg_name_parent="${_pkg_name%_flavour_*}"; + fi; + (set -o errexit -o noglob; + if [ -n "${_restart}" ]\ + || [ "${_tgt_name}" = "INVARIANTS" ]\ + || ! is_build_script_done "${_pkg_name}" finish; then + set -- $(lfilter -not "${BUILD_STEPS}" \ + "$(get_var_unsafe PKG_$(toupper "${_pkg_name}")_BUILD_STEPS_DISABLE)"); + while [ ${#} -gt 0 ]; do + _pkg_step_cmds=""; _pkg_step_cmd_args=""; + case "${1#*:}" in + dynamic) + if [ "${_tgt_name}" = "INVARIANTS" ]; then + _pkg_step_cmds="pkg_${_pkg_name}_${1%:*} pkg_${1%:*}"; + elif [ -n "${_restart}" ]; then + if [ -z "${_restart_at}" ]\ + || lmatch "${_restart_at}" , "${1%:*}"; then + _pkg_step_cmds="pkg_${_pkg_name}_${1%:*} pkg_${1%:*}"; + fi; + elif ! is_build_script_done "${_pkg_name}" "${1%:*}"; then + _pkg_step_cmds="pkg_${_pkg_name}_${1%:*} pkg_${1%:*}"; + fi; ;; + invariant) + _pkg_step_cmds="pkg_${1%:*}"; ;; + variant) + if lmatch "${_restart_at}" "," "${1%:*}"; then + _pkg_step_cmds="pkg_${_pkg_name}_${1%:*} pkg_${1%:*}"; + fi; ;; + virtual) + _pkg_step_cmds="pkg_${_pkg_name}_${1%:*}"; + _pkg_step_cmd_args="${_restart_at:-ALL}"; ;; + all) + if test_cmd "pkg_${_pkg_name}_${1%:*}"; then + "pkg_${_pkg_name}_${1%:*}" "${_restart_at:-ALL}"; + break; + fi; ;; + *) continue; ;; + esac; + for __ in ${_pkg_step_cmds}; do + if test_cmd "${__}"; then + test_cmd "pkg_${_pkg_name}_${1%:*}_pre" \ + && "pkg_${_pkg_name}_${1%:*}_pre" + "${__}" ${_pkg_step_cmd_args}; + test_cmd "pkg_${_pkg_name}_${1%:*}_post" \ + && "pkg_${_pkg_name}_${1%:*}_post" + if [ "${1#*:}" != "always" ]\ + && [ ${#} -ge 2 ]; then + set_build_script_done "${_pkg_name}" "${1%:*}" "-${2#*:}"; + else + set_build_script_done "${_pkg_name}" "${1%:*}"; + fi; break; + fi; + done; + shift; done; + fi); return ${?}; +}; + +# vim:filetype=sh -- cgit v1.2.3