summaryrefslogtreecommitdiffhomepage
path: root/pkgtool.sh
diff options
context:
space:
mode:
authorLucio Andrés Illanes Albornoz <lucio@lucioillanes.de>2020-03-13 15:33:05 +0000
committerLucio Andrés Illanes Albornoz <lucio@lucioillanes.de>2020-03-13 15:33:05 +0000
commit60fba634600d0e20726c02d88735cc3d71ff0103 (patch)
treed42d7e13716ccae6e326d3bec8b30fbd3d38b612 /pkgtool.sh
parent4e5750f7ba7c84d09f0e8a60d92a7fc3e7ca410f (diff)
downloadmidipix_build-60fba634600d0e20726c02d88735cc3d71ff0103.tar.bz2
midipix_build-60fba634600d0e20726c02d88735cc3d71ff0103.tar.xz
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.
Diffstat (limited to 'pkgtool.sh')
-rwxr-xr-xpkgtool.sh114
1 files changed, 86 insertions, 28 deletions
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 <lucio@lucioillanes.de>
+# Copyright (c) 2020 Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de>
#
+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 <step> 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;
};