From 60fba634600d0e20726c02d88735cc3d71ff0103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucio=20Andr=C3=A9s=20Illanes=20Albornoz?= Date: Fri, 13 Mar 2020 15:33:05 +0000 Subject: Implements ./pkgtool.sh -[irt] options. etc/{README.md,pkgtool.usage}: updated. subr/ex_pkg.subr:ex_pkg_{find_package,get_packages}(): initial implementation. subr/ex_pkg.subr:ex_pkg_unfold_{,r}depends(): split from ex_pkg_expand_packages(). subr/ex_pkg{,_dispatch}.subr: removes ${EX_PKG_COMPLETE} scoped global. subr/ex_pkg_dispatch.subr:exp_pkg_dispatch_expand_packages(): split from subr/ex_pkg.subr. subr/rtl_list.subr:rtl_lsort(): initial implementation. --- pkgtool.sh | 114 ++++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 86 insertions(+), 28 deletions(-) (limited to 'pkgtool.sh') diff --git a/pkgtool.sh b/pkgtool.sh index 2241f4af..e6768e85 100755 --- a/pkgtool.sh +++ b/pkgtool.sh @@ -1,7 +1,35 @@ #!/bin/sh -# Copyright (c) 2019 Lucio Andrés Illanes Albornoz +# Copyright (c) 2020 Lucio Andrés Illanes Albornoz # +pkgtoolp_info() { + local _group_name="" _pkg_name_uc="$(rtl_toupper "${PKG_NAME}")" _pkg_names="" \ + EX_PKG_DISABLED=""; EX_PKG_FINISHED=""; EX_PKG_NAMES=""; + if ! _group_name="$(ex_pkg_find_package "${BUILD_GROUPS}" "${PKG_NAME}")"; then + rtl_log_msg failexit "Error: unknown package \`${PKG_NAME}'."; + elif ! _pkg_names="$(ex_pkg_get_packages "${_group_name}")"; then + rtl_log_msg failexit "Error: failed to expand package list of build group \`${_group_name}'."; + elif ! ex_pkg_env "${DEFAULT_BUILD_STEPS}" "${DEFAULT_BUILD_VARS}" \ + "${_group_name}" 1 "${PKG_NAME}" "" "${BUILD_WORKDIR}"; then + rtl_log_msg failexit "Error: failed to set package environment for \`${PKG_NAME}'."; + else rtl_log_env_vars "package" $(set | awk -F= '/^PKG_'"${_pkg_name_uc}"'_/{print $1}' | sort); + if [ -z "${PKG_DEPENDS}" ]; then + rtl_log_msg info "Package \`${PKG_NAME}' has no dependencies."; + else rtl_log_msg info "Direct dependencies of \`${PKG_NAME}': ${PKG_DEPENDS}"; + if ! ex_pkg_unfold_depends "${_group_name}" "${_pkg_names}" "${PKG_NAME}" 2 0; then + rtl_log_msg warn "Warning: failed to unfold dependency-expanded package name list for \`${PKG_NAME}'."; + else EX_PKG_NAMES="$(rtl_lfilter "${EX_PKG_NAMES}" "${PKG_NAME}")"; + if [ -n "${EX_PKG_NAMES}" ]; then + rtl_log_msg info "Full dependencies of \`${PKG_NAME}': $(rtl_lsort "${EX_PKG_NAMES}")"; + fi; + if [ -n "${EX_PKG_DISABLED}" ]; then + rtl_log_msg info "Full dependencies of \`${PKG_NAME}' (disabled packages:) $(rtl_lsort "${EX_PKG_DISABLED}")"; + fi; + fi; + fi; + fi; +}; + pkgtoolp_restart_at() { case "${ARG_RESTART_AT}" in ALL) "${MIDIPIX_BUILD_PWD}/build.sh" -P -r "${PKG_NAME}" -v; ;; @@ -9,7 +37,27 @@ pkgtoolp_restart_at() { esac; }; +pkgtoolp_rdepends() { + local _group_name="" _pkg_names="" EX_PKG_DISABLED=""; EX_PKG_FINISHED=""; EX_PKG_NAMES=""; + if ! _group_name="$(ex_pkg_find_package "${BUILD_GROUPS}" "${PKG_NAME}")"; then + rtl_log_msg failexit "Error: unknown package \`${PKG_NAME}'."; + elif ! _pkg_names="$(ex_pkg_get_packages "${_group_name}")"; then + rtl_log_msg failexit "Error: failed to expand package list of build group \`${_group_name}'."; + elif ! ex_pkg_unfold_rdepends "${_group_name}" "${_pkg_names}" "${PKG_NAME}" 0; then + rtl_log_msg failexit "Error: failed to unfold reverse dependency-expanded package name list for \`${PKG_NAME}'."; + elif [ -z "${EX_PKG_NAMES}" ] && [ -z "${EX_PKG_DISABLED}" ]; then + rtl_log_msg info "Package \`${PKG_NAME}' has no reverse dependencies."; + else if [ -n "${EX_PKG_NAMES}" ]; then + rtl_log_msg info "Reverse dependencies of \`${PKG_NAME}': $(rtl_lsort "${EX_PKG_NAMES}")"; + fi; + if [ -n "${EX_PKG_DISABLED}" ]; then + rtl_log_msg info "Reverse dependencies of \`${PKG_NAME}' (disabled packages:) $(rtl_lsort "${EX_PKG_DISABLED}")"; + fi; + fi; +}; + pkgtoolp_shell() { + rtl_log_env_vars "build" $(set | awk -F= '/^PKG_/{print $1}' | sort); 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}'"; @@ -27,6 +75,35 @@ pkgtoolp_shell() { "${SHELL}"; }; +pkgtoolp_tarball() { + local _date="" _group_name="" _hname="" _pkg_name_full="" _pkg_version="" _tarball_fname=""; + if ! _group_name="$(ex_pkg_find_package "${BUILD_GROUPS}" "${PKG_NAME}")"; then + rtl_log_msg failexit "Error: unknown package \`${PKG_NAME}'."; + elif ! ex_pkg_env "${DEFAULT_BUILD_STEPS}" "${DEFAULT_BUILD_VARS}" \ + "${_group_name}" "${PKG_NAME}" "" "${BUILD_WORKDIR}"; then + rtl_log_msg failexit "Error: failed to set package environment for \`${PKG_NAME}'."; + elif ! _date="$(date +%Y%m%d_%H%M%S)"; then + rtl_log_msg failexit "Error: failed to call date(1)."; + elif ! _hname="$(hostname -f)"; then + rtl_log_msg failexit "Error: failed to call hostname(1)."; + else if [ -n "${PKG_VERSION}" ]; then + _pkg_name_full="${PKG_NAME}-${PKG_VERSION}"; + else + _pkg_name_full="${PKG_NAME}"; + fi; + _tarball_fname="${_pkg_name_full}@${_hname}-${_date}.tbz2"; + rtl_log_msg info "Creating compressed tarball of \`${PKG_BASE_DIR}' and \`${PKG_NAME}_stderrout.log'..."; + if ! tar -C "${BUILD_WORKDIR}" -cpf - \ + "${PKG_BASE_DIR#${BUILD_WORKDIR%/}/}" \ + "${PKG_NAME}_stderrout.log" |\ + bzip2 -c -9 - > "${_tarball_fname}"; then + rtl_log_msg failexit "Error: failed to create compressed tarball of \`${PKG_BASE_DIR}' and \`${PKG_NAME}_stderrout.log'."; + else + rtl_log_msg info "Created compressed tarball of \`${PKG_BASE_DIR}' and \`${PKG_NAME}_stderrout.log'."; + fi; + fi; +}; + pkgtoolp_update_diff() { local _diff_fname_dst="" _diff_fname_src="" _fname="" _fname_base=""; if [ -n "${PKG_VERSION}" ]; then @@ -56,43 +133,24 @@ pkgtoolp_update_diff() { fi; }; -pkgtoolp_env() { - local _rc=0; _status=""; - if [ ! -e "${BUILD_WORKDIR}/${PKG_NAME}.dump" ]; then - rtl_log_msg fail "Warning: failed to locate environment dump for package \`${PKG_NAME}' in \`${BUILD_WORKDIR}'."; - rtl_log_msg info "Rebuilding package \`${PKG_NAME}' w/ --dump-in build..."; - (export ARCH BUILD \ - BUILD_DLCACHEDIR BUILD_WORKDIR \ - PREFIX PREFIX_CROSS PREFIX_MINGW32 PREFIX_MINIPIX \ - PREFIX_NATIVE PREFIX_ROOT PREFIX_RPM; - ./build.sh -a "${ARCH}" -b "${BUILD}" --dump-in build -P -r "${PKG_NAME}" -v); - if [ ! -e "${BUILD_WORKDIR}/${PKG_NAME}.dump" ]; then - _rc=1; _status="Error: failed to locate environment dump for package \`${PKG_NAME}' in \`${BUILD_WORKDIR}'."; - fi; - else - _rc=0; - fi; - if [ "${_rc:-0}" -eq 0 ]\ - && ! . "${BUILD_WORKDIR}/${PKG_NAME}.dump"; then - _rc=1; _status="Error: failed to source environment dump for package \`${PKG_NAME}' from \`${BUILD_WORKDIR}'."; - fi; return "${_rc}"; -}; - pkgtool() { local _status=""; if ! cd "$(dirname "${0}")"\ || ! . ./subr/pkgtool_init.subr\ || ! pkgtool_init "${@}"; then printf "Error: failed to setup environment.\n"; exit 1; - elif ! pkgtoolp_env; then - rtl_log_msg failexit "${_status}"; - 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; + elif [ "${ARG_INFO:-0}" -eq 1 ]; then + pkgtoolp_info; + elif [ "${ARG_RDEPENDS:-0}" -eq 1 ]; then + pkgtoolp_rdepends; + elif [ "${ARG_SHELL:-0}" -eq 1 ]; then + pkgtoolp_shell; + elif [ "${ARG_TARBALL:-0}" -eq 1 ]; then + pkgtoolp_tarball; fi; }; -- cgit v1.2.3