summaryrefslogtreecommitdiffhomepage
path: root/pkgtool.sh
diff options
context:
space:
mode:
authorLucio Andrés Illanes Albornoz <lucio@lucioillanes.de>2020-03-11 16:09:22 +0000
committerLucio Andrés Illanes Albornoz <lucio@lucioillanes.de>2020-03-11 16:09:22 +0000
commit8a27f992e5b7c62e144dbbfc3435a90c470d92a4 (patch)
tree52aa6aabc1ab3c79a0475bed758828d316180377 /pkgtool.sh
parentfca18e9d6857d335027d012d462f61ac648ef93a (diff)
downloadmidipix_build-8a27f992e5b7c62e144dbbfc3435a90c470d92a4.tar.bz2
midipix_build-8a27f992e5b7c62e144dbbfc3435a90c470d92a4.tar.xz
Initial implementation of pkgtool.sh.
build.sh:build(): move cd(1) to $(dirname "${0}"). etc/{build.usage,README.md}: updated. midipix.env:${DEFAULT_CLEAR_ENV_VARS_EXCEPT}: allow inheriting ARCH, BUILD, BUILD_DLCACHEDIR, BUILD_WORKDIR, and PREFIX* from the environment. pkgtool.sh: initial implementation. subr/build_init.subr:buildp_init_defaults(): allow inheriting ARCH, BUILD, BUILD_DLCACHEDIR, BUILD_WORKDIR, and PREFIX* from the environment. subr/build_init.subr:buildp_init_env(): move cd(1) to $(dirname "${0}"). subr/build_init.subr:buildp_init_files(): correctly pass ${_status} from rtl_check_path_vars(). subr/ex_pkg_exec.subr:ex_pkg_exec(): dump subset of variables and exported variables on build failure and --dump-on-abort. subr/pkgtool_init.subr: adapted from subr/build_init.subr. subr/rtl_complex.subr:rtl_filter_vars(): initial implementation. subr/rtl_string.subr:rtl_subst(): initial implementation.
Diffstat (limited to 'pkgtool.sh')
-rwxr-xr-xpkgtool.sh80
1 files changed, 80 insertions, 0 deletions
diff --git a/pkgtool.sh b/pkgtool.sh
new file mode 100755
index 00000000..ec17cc0e
--- /dev/null
+++ b/pkgtool.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+# Copyright (c) 2019 Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de>
+#
+
+pkgtoolp_restart_at() {
+ case "${ARG_RESTART_AT}" in
+ ALL) "${MIDIPIX_BUILD_PWD}/build.sh" -P -r "${PKG_NAME}" -v; ;;
+ *) "${MIDIPIX_BUILD_PWD}/build.sh" -P -r "${PKG_NAME}:${ARG_RESTART_AT}" -v; ;;
+ esac;
+};
+
+pkgtoolp_shell() {
+ rtl_log_msg info "Launching shell \`${SHELL}' within package environment and \`${PKG_BUILD_DIR}'.";
+ rtl_log_msg info "Run \$R to rebuild \`${PKG_NAME}'.";
+ rtl_log_msg info "Run \$RS <step> to restart the specified build step of \`${PKG_NAME}'";
+ rtl_log_msg info "Run \$D to automatically regenerate the patch for \`${PKG_NAME}'.";
+ export ARCH BUILD \
+ BUILD_DLCACHEDIR BUILD_WORKDIR \
+ MAKE="make LIBTOOL=${PKG_LIBTOOL:-slibtool}" \
+ MIDIPIX_BUILD_PWD \
+ PKG_NAME \
+ PREFIX PREFIX_CROSS PREFIX_MINGW32 PREFIX_MINIPIX \
+ PREFIX_NATIVE PREFIX_ROOT PREFIX_RPM;
+ D="${MIDIPIX_BUILD_PWD}/${0##*/} --update-diff" \
+ R="${MIDIPIX_BUILD_PWD}/${0##*/} --restart-at ALL" \
+ RS="${MIDIPIX_BUILD_PWD}/${0##*/} --restart-at " \
+ "${SHELL}";
+};
+
+pkgtoolp_update_diff() {
+ local _diff_fname_dst="" _diff_fname_src="" _fname="" _fname_base="";
+ if [ -n "${PKG_VERSION}" ]; then
+ _diff_fname_dst="${PKG_NAME}-${PKG_VERSION}.local.patch";
+ else
+ _diff_fname_dst="${PKG_NAME}.local.patch";
+ fi;
+ if ! _diff_fname_src="$(mktemp)"; then
+ rtl_log_msg failexit "Error: failed to create temporary target diff(1) file.";
+ else trap "rm -f \"${_diff_fname_src}\" >/dev/null 2>&1" EXIT HUP INT TERM USR1 USR2;
+ (cd "${PKG_BASE_DIR}" && printf "" > "${_diff_fname_src}";
+ for _fname in $(find "${PKG_SUBDIR}" -iname \*.orig); do
+ _fname_base="${_fname##*/}"; _fname_base="${_fname_base%.orig}";
+ case "${_fname_base}" in
+ config.sub)
+ continue; ;;
+ *) diff -u "${_fname}" "${_fname%.orig}" >> "${_diff_fname_src}"; ;;
+ esac;
+ done);
+ if [ "${?}" -ne 0 ]; then
+ rtl_log_msg failexit "Error: failed to create diff(1).";
+ elif ! rtl_fileop mv "${_diff_fname_src}" "${MIDIPIX_BUILD_PWD}/patches/${_diff_fname_dst}"; then
+ rtl_log_msg failexit "Error: failed to rename diff(1) to \`${MIDIPIX_BUILD_PWD}/patches/${_diff_fname_dst}'.";
+ else trap - EXIT HUP INT TERM USR1 USR2;
+ rtl_log_msg info "Updated \`${MIDIPIX_BUILD_PWD}/patches/${_diff_fname_dst}'.";
+ fi;
+ fi;
+};
+
+pkgtool() {
+ if ! cd "$(dirname "${0}")"\
+ || ! . ./subr/pkgtool_init.subr\
+ || ! pkgtool_init "${@}"; then
+ printf "Error: failed to setup environment.\n"; exit 1;
+ elif [ ! -e "${BUILD_WORKDIR}/${PKG_NAME}.dump" ]; then
+ rtl_log_msg failexit "Error: failed to locate environment dump for package \`${PKG_NAME}' in \`${BUILD_WORKDIR}'.";
+ elif ! . "${BUILD_WORKDIR}/${PKG_NAME}.dump"; then
+ rtl_log_msg failexit "Error: failed to source environment dump for package \`${PKG_NAME}' from \`${BUILD_WORKDIR}'.";
+ elif ! rtl_fileop cd "${PKG_BUILD_DIR}"; then
+ rtl_log_msg failexit "Error: failed to change working directory to \`${PKG_BUILD_DIR}'.";
+ elif [ -n "${ARG_RESTART_AT}" ]; then
+ pkgtoolp_restart_at;
+ elif [ "${ARG_UPDATE_DIFF:-0}" -eq 1 ]; then
+ pkgtoolp_update_diff;
+ else pkgtoolp_shell;
+ fi;
+};
+
+set +o errexit -o noglob; pkgtool "${@}";
+
+# vim:filetype=sh textwidth=0