# # set -o errexit -o noglob are assumed. # ex_pkg_steps() { local _tgt_name="${1}" _pkg_name="${2}" \ _restart="${3}" _restart_at="${4}" \ _step _step_type \ _step_cmds _step_cmd_args \ _step_cmd_pfx _step_cmd _step_next; set -- $(ex_lfilter -not "${BUILD_STEPS}" "${PKG_BUILD_STEPS_DISABLE}"); while [ ${#} -gt 0 ]; do _step="${1}"; _step_next="${2}"; _step_cmds=""; _step_cmd_args=""; _step_type="${_step#*:}"; _step="${_step%%:*}"; _step_cmd_pfx="pkg_${_pkg_name}_${_step}"; case "${_step_type}" in dynamic) if [ "${_tgt_name}" = "INVARIANTS" ]; then _step_cmds="${_step_cmd_pfx} pkg_${_step}"; elif [ -n "${_restart}" ]; then if [ -z "${_restart_at}" ]\ || ex_lmatch "${_restart_at}" , "${_step}"; then _step_cmds="${_step_cmd_pfx} pkg_${_step}"; fi; elif ! ex_pkg_state_test "${_pkg_name}" "${_step}"; then _step_cmds="${_step_cmd_pfx} pkg_${_step}"; fi; ;; invariant) _step_cmds="pkg_${_step}"; ;; variant) if ex_lmatch "${_restart_at}" "," "${_step}"; then _step_cmds="${_step_cmd_pfx} pkg_${_step}"; fi; ;; virtual) _step_cmds="pkg_${_pkg_name}_${_step}"; _step_cmd_args="${_restart_at:-ALL}"; ;; all) if ex_test_cmd "pkg_${_pkg_name}_${_step}"; then "${_step_cmd_pfx}" "${_restart_at:-ALL}"; break; fi; ;; finish) ex_pkg_state_push "${_pkg_name}" finish; ;; *) ;; esac; for _step_cmd in ${_step_cmds}; do if ex_test_cmd "${_step_cmd}"; then ex_test_cmd "${_step_cmd_pfx}_pre" \ && "${_step_cmd_pfx}_pre" "${_step_cmd}" ${_step_cmd_args}; ex_test_cmd "${_step_cmd_pfx}_post" \ && "${_step_cmd_pfx}_post" if [ "${_step_type}" != "invariant" ] \ && [ -n "${_step_next}" ]; then ex_pkg_state_push "${_pkg_name}" "${_step}"; ex_pkg_state_push "${_pkg_name}" "-${_step_next}"; else ex_pkg_state_push "${_pkg_name}" "${_step}"; fi; break; fi; done; shift; done; }; # vim:filetype=sh