summaryrefslogtreecommitdiffhomepage
path: root/subr
diff options
context:
space:
mode:
authorLucio Andrés Illanes Albornoz (arab, vxp) <lucio@lucioillanes.de>2017-11-21 17:17:41 +0000
committerLucio Andrés Illanes Albornoz (arab, vxp) <lucio@lucioillanes.de>2017-11-21 17:17:41 +0000
commit1da591d31225bb64fc2e843a2db6fd0873d908af (patch)
treeef802af64f6167397172c0a34ff20d4d508cc08d /subr
parenta44f58f1c69eb041700f650583d74b0a4d5337ef (diff)
downloadmidipix_build-1da591d31225bb64fc2e843a2db6fd0873d908af.tar.bz2
midipix_build-1da591d31225bb64fc2e843a2db6fd0873d908af.tar.xz
{build.sh,subr/pkg_setup_dispatch.subr}: split.
Diffstat (limited to 'subr')
-rwxr-xr-xsubr/pkg_setup_dispatch.subr67
1 files changed, 67 insertions, 0 deletions
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