From 8a27f992e5b7c62e144dbbfc3435a90c470d92a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucio=20Andr=C3=A9s=20Illanes=20Albornoz?= Date: Wed, 11 Mar 2020 16:09:22 +0000 Subject: 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. --- pkgtool.sh | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 pkgtool.sh (limited to 'pkgtool.sh') 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 +# + +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 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 -- cgit v1.2.3