summaryrefslogtreecommitdiffhomepage
path: root/pkgtool.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgtool.sh')
-rwxr-xr-xpkgtool.sh940
1 files changed, 701 insertions, 239 deletions
diff --git a/pkgtool.sh b/pkgtool.sh
index 276ab7b..4f04e48 100755
--- a/pkgtool.sh
+++ b/pkgtool.sh
@@ -1,301 +1,763 @@
#!/bin/sh
-# Copyright (c) 2020, 2021 Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de>
+# Copyright (c) 2020, 2021, 2022, 2023 Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de>
#
+# {{{ pkgtoolp_init($_rstatus)
+pkgtoolp_init() {
+ local _pi_rstatus="${1#\$}" \
+ _pi_args_long="" \
+ _pi_name_base="pkgtool" \
+ _pi_optstring="a:b:efhim:M:p:rRtv" \
+ _pi_prereqs="
+ awk bzip2 cat chmod cp date find grep hostname mkdir
+ mktemp mv paste printf readlink rm sed sort tar test
+ touch tr uniq" \
+ _pi_fname="" _pi_rc=0;
+ shift;
+
+ if [ -e "${HOME}/pkgtool.vars" ]; then
+ . "${HOME}/pkgtool.vars" || exit 1;
+ fi;
+
+ if ! . "${0%/*}/subr.ex/ex_init.subr"; then
+ _pi_rc=1;
+ _pi_status='failed to source \`'"${0%/*}/subr/ex_init.subr"\';
+ eval ${_pi_rstatus}=\"${_pi_status}\";
+ elif ! ex_init_help \
+ "${_pi_rstatus}" "${_pi_args_long}" \
+ "${_pi_name_base}" "${_pi_optstring}" "${@}" \
+ || ! ex_init_env \
+ "${_pi_rstatus}" \$BUILD_HNAME \$BUILD_USER \
+ "${_pi_name_base}" \
+ || ! ex_init_getopts \
+ "${_pi_rstatus}" "pkgtoolp_init_getopts_fn" \
+ "${_pi_optstring}" "${@}" \
+ || ! ex_init_theme \
+ "${_pi_rstatus}" "${BUILD_HNAME}" \
+ "${_pi_name_base}" "${ARG_THEME:-}" \
+ || ! ex_init_prereqs "${_pi_rstatus}" "${_pi_prereqs}" \
+ || ! ex_pkg_load_vars \
+ "${_pi_rstatus}" \$ARCH \$BUILD_KIND \
+ || ! pkgtoolp_init_args "${_pi_rstatus}";
+ then
+ _pi_rc=1;
+ fi;
+ return "${_pi_rc}";
+};
+# }}}
+# {{{ pkgtoolp_init_args($_rstatus)
+pkgtoolp_init_args() {
+ local _ppia_rstatus="${1#\$}" \
+ _ppia_rc=0;
+
+ if [ "$((${ARG_INFO:-0}
+ + ${ARG_EDIT:-0}
+ + ${ARG_FILES:-0}
+ + ${ARG_MIRROR:-0}
+ + ${ARG_PROFILE:-0}
+ + ${ARG_RDEPENDS:-0}
+ + ${ARG_RDEPENDS_FULL:-0}
+ + ${ARG_TARBALL:-0}))" -gt 1 ];
+ then
+ cat etc/pkgtool.usage;
+ _ppia_rc=1;
+ rtl_setrstatus "${_ppia_rstatus}" 'only one of -e, -f, -i, -m and/or -M, -p, -r, -R, -s, or -t must be specified.';
+ elif [ "$((${ARG_INFO:-0}
+ + ${ARG_EDIT:-0}
+ + ${ARG_FILES:-0}
+ + ${ARG_MIRROR:-0}
+ + ${ARG_PROFILE:-0}
+ + ${ARG_RDEPENDS:-0}
+ + ${ARG_RDEPENDS_FULL:-0}
+ + ${ARG_TARBALL:-0}))" -eq 0 ];
+ then
+ cat etc/pkgtool.usage;
+ _ppia_rc=1;
+ rtl_setrstatus "${_ppia_rstatus}" 'one of -e, -f, -i, -m and/or -M, -p, -r, -R, -s, or -t must be specified.';
+ else
+ _ppia_rc=0;
+ export TMP="${BUILD_WORKDIR}" TMPDIR="${BUILD_WORKDIR}";
+ fi;
+
+ return "${_ppia_rc}";
+};
+# }}}
+# {{{ pkgtoolp_init_getopts_fn(...)
+pkgtoolp_init_getopts_fn() {
+ local _ppigf_rc=0 _ppigf_shiftfl=0;
+
+ case "${1}" in
+ init)
+ local _ppigf_verb="${1}" _ppigf_rstatus="${2#\$}";
+
+ : ${ARCH:="nt64"};
+ : ${BUILD_KIND:="debug"};
+
+ ARG_INFO=0; ARG_EDIT=0; ARG_MIRROR=0; ARG_RDEPENDS=0;
+ ARG_RDEPENDS_FULL=0; ARG_TARBALL=0; ARG_VERBOSE=0;
+ ;;
+
+ longopt)
+ local _ppigf_verb="${1}" _ppigf_rstatus="${2#\$}" _ppigf_opt="${3}";
+
+ case "${_ppigf_opt}" in
+ --theme) shift 3;
+ if [ "${#}" != 1 ]; then
+ rtl_setrstatus "${_ppigf_rstatus}" 'missing argument to --theme option';
+ return 1;
+ else
+ ARG_THEME="${1:-}"; _ppigf_shiftfl=2;
+ fi;
+ ;;
+
+ *) _ppigf_shiftfl=0; ;;
+ esac;
+ ;;
+
+ opt)
+ local _ppigf_verb="${1}" _ppigf_rstatus="${2#\$}" \
+ _ppigf_opt="${3}" _ppigf_optarg="${4:-}";
+ shift 4;
+
+ case "${_ppigf_opt}" in
+ a) ARCH="${OPTARG}"; _ppigf_shiftfl=2; ;;
+ b) BUILD_KIND="${OPTARG}"; _ppigf_shiftfl=2; ;;
+ h) cat etc/pkgtool.usage; exit 0; ;;
+ e) ARG_EDIT=1; _ppigf_shiftfl=1; ;;
+ f) ARG_FILES=1; _ppigf_shiftfl=1; ;;
+ i) ARG_INFO=1; _ppigf_shiftfl=1; ;;
+ m) ARG_MIRROR=1;
+ if [ "${OPTARG:+1}" = 1 ]; then
+ ARG_MIRROR_DNAME="${OPTARG}";
+ elif [ "${ARG_MIRROR_DNAME:+1}" != 1 ]; then
+ rtl_setrstatus "${_ppigf_rstatus}" 'missing -m argument and no default present.';
+ fi;
+ _ppigf_shiftfl=2; ;;
+ M) ARG_MIRROR=1;
+ if [ "${OPTARG:+1}" = 1 ]; then
+ ARG_MIRROR_DNAME_GIT="${OPTARG}";
+ elif [ "${ARG_MIRROR_DNAME_GIT:+1}" != 1 ]; then
+ rtl_setrstatus "${_ppigf_rstatus}" 'missing -M argument and no default present.';
+ fi;
+ _ppigf_shiftfl=2; ;;
+ p) ARG_PROFILE=1;
+ if [ "${OPTARG:+1}" = 1 ]; then
+ ARG_PROFILE_LOG_FNAME="${OPTARG}";
+ else
+ rtl_setrstatus "${_ppigf_rstatus}" 'missing -p argument.';
+ fi;
+ _ppigf_shiftfl=2; ;;
+ r) ARG_RDEPENDS=1; _ppigf_shiftfl=1; ;;
+ R) ARG_RDEPENDS_FULL=1; _ppigf_shiftfl=1; ;;
+ t) ARG_TARBALL=1; _ppigf_shiftfl=1; ;;
+ v) ARG_VERBOSE=1; _ppigf_shiftfl=1; ;;
+ *) cat etc/pkgtool.usage; exit 1; ;;
+ esac;
+ ;;
+
+ nonopt)
+ local _ppigf_verb="${1}" _ppigf_rstatus="${2#\$}";
+ shift 2;
+
+ case "${1}" in
+ *=*) rtl_set_var_from_spec "${_ppigf_rstatus}" "${1}";
+ _ppigf_rc="${?}"; ;;
+ *) PKGTOOL_PKG_NAME="${1}"; ;;
+ esac;
+
+ if [ "${_ppigf_rc}" -ne 0 ]; then
+ return "${_ppigf_rc}";
+ else
+ _ppigf_shiftfl=1;
+ fi;
+ ;;
+
+ done)
+ local _ppigf_verb="${1}" _ppigf_rstatus="${2#\$}";
+
+ if [ "${PKGTOOL_PKG_NAME:+1}" != 1 ]\
+ && [ "${ARG_MIRROR:-0}" -eq 0 ]\
+ && [ "${ARG_PROFILE:-0}" -eq 0 ]; then
+ _ppigf_rc=1;
+ rtl_setrstatus "${_ppigf_rstatus}" 'missing package name.';
+ else
+ export PKGTOOL_PKG_NAME;
+ case "${ARG_VERBOSE:-0}" in
+
+ 0) rtl_log_enable_tagsV "${LOG_TAGS_normal}"; ;;
+ 1) rtl_log_enable_tagsV "${LOG_TAGS_verbose}"; ;;
+ *) _ppigf_rc=1;
+ rtl_setrstatus "${_ppigf_rstatus}" 'invalid verbosity level (max. -v)';
+ ;;
+
+ esac;
+ fi;
+
+ if [ "${_ppigf_rc}" -ne 0 ]; then
+ return "${_ppigf_rc}";
+ fi;
+ ;;
+
+ *)
+ return 1;
+ ;;
+ esac;
+
+ if [ "${_ppigf_shiftfl}" -ge 1 ]; then
+ return "$((${_ppigf_shiftfl} + 1))";
+ else
+ return 0;
+ fi;
+
+ return "${_ppigf_rc}";
+};
+# }}}
+
+# {{{ pkgtoolp_edit($_rstatus, $_pkg_name)
+pkgtoolp_edit() {
+ local _ppe_rstatus="${1}" _ppe_pkg_name="${2}" \
+ _ppe_fname="" _ppe_group_fname="" _ppe_group_fname_nline="" _ppe_group_name="" \
+ _ppe_patch_idx=0 _ppe_pkg_disabled="" _ppe_pkg_finished="" _ppe_pkg_name_uc="" \
+ _ppe_pkg_names="" _ppe_pkg_vars="" _ppe_rc=0;
+ rtl_toupper2 \$_ppe_pkg_name \$_ppe_pkg_name_uc;
+
+ if ! ex_pkg_load_groups \$_ppe_groups \$_ppe_groups_noauto; then
+ _ppi_rc=1;
+ rtl_setrstatus "${_ppi_rstatus}" 'Error: failed to load build groups.';
+ elif ! ex_pkg_find_package \$_ppe_group_name "${_ppe_groups}" "${_ppe_pkg_name}"; then
+ _ppe_rc=1;
+ rtl_setrstatus "${_ppe_rstatus}" 'Error: unknown package \`'"${_ppe_pkg_name}'"'.';
+ elif ! ex_pkg_get_packages \$_ppe_pkg_names "${_ppe_group_name}"; then
+ _ppe_rc=1;
+ rtl_setrstatus "${_ppe_rstatus}" 'Error: failed to expand package list of build group \`'"${_ppe_group_name}'"'.';
+ elif ! ex_pkg_env "${DEFAULT_BUILD_STEPS}" "${DEFAULT_BUILD_VARS}"\
+ "${_ppe_group_name}" "${_ppe_pkg_name}" "" "${BUILD_WORKDIR}"; then
+ _ppe_rc=1;
+ rtl_setrstatus "${_ppe_rstatus}" 'Error: failed to set package environment for \`'"${_ppe_pkg_name}'"'.';
+ else
+ rtl_get_var_unsafe \$_ppe_group_fname -u "PKG_${_ppe_pkg_name}_GROUP_FNAME";
+
+ case "${EDITOR}" in
+ "")
+ rtl_setrstatus "${_ppe_rstatus}" 'Error: \${EDITOR} unset.';
+ ;;
+
+ nano)
+ _ppe_group_fname_nline="$( \
+ grep -n "PKG_${_ppe_pkg_name_uc}_" "${_ppe_group_fname}" |\
+ awk -F: 'NR == 1 { print $1 }')";
+ "${EDITOR}" \
+ ${_ppe_group_fname_nline:+"+${_ppe_group_fname_nline}"} \
+ "${_ppe_group_fname}"
+ _ppe_rc="${?}";
+ ;;
+
+ vi|vim|nvi|nvim)
+ "${EDITOR}" "${_ppe_group_fname}" "+/PKG_${_ppe_pkg_name_uc}_/";
+ _ppe_rc="${?}";
+ ;;
+ *)
+ "${EDITOR}" "${_ppe_group_fname}";
+ _ppe_rc="${?}";
+ ;;
+ esac;
+ fi;
+
+ return "${_ppe_rc}";
+};
+# }}}
+# {{{ pkgtoolp_files($_rstatus, $_pkg_name)
+pkgtoolp_files() {
+ local _ppf_rstatus="${1}" _ppf_pkg_name="${2}" \
+ _ppf_destdir="" _ppf_group_name="" _ppf_groups="" \
+ _ppf_groups_noauto="" _ppf_pkg_name_uc="" _ppf_pkg_vars="" \
+ _ppf_rc=0;
+ rtl_toupper2 \$_ppf_pkg_name \$_ppf_pkg_name_uc;
+
+ if ! ex_pkg_load_groups \$_ppf_groups \$_ppf_groups_noauto; then
+ _ppf_rc=1;
+ rtl_setrstatus "${_ppf_rstatus}" 'Error: failed to load build groups.';
+ elif ! ex_pkg_find_package \$_ppf_group_name "${_ppf_groups}" "${_ppf_pkg_name}"; then
+ _ppf_rc=1;
+ rtl_setrstatus "${_ppf_rstatus}" 'Error: unknown package \`'"${_ppf_pkg_name}'"'.';
+ elif ! ex_pkg_get_packages \$_ppf_pkg_names "${_ppf_group_name}"; then
+ _ppf_rc=1;
+ rtl_setrstatus "${_ppf_rstatus}" 'Error: failed to expand package list of build group \`'"${_ppf_group_name}'"'.';
+ elif ! ex_pkg_env "${DEFAULT_BUILD_STEPS}" "${DEFAULT_BUILD_VARS}"\
+ "${_ppf_group_name}" "${_ppf_pkg_name}" "" "${BUILD_WORKDIR}"; then
+ _ppf_rc=1;
+ rtl_setrstatus "${_ppf_rstatus}" 'Error: failed to set package environment for \`'"${_ppf_pkg_name}'"'.';
+ else
+ ex_pkg_get_package_vars \$_ppf_pkg_vars "${DEFAULT_BUILD_VARS}" "${_ppf_pkg_name}";
+ rtl_get_var_unsafe \$_ppf_destdir -u "PKG_DESTDIR";
+
+ if [ "${_ppf_destdir:+1}" != 1 ]; then
+ _ppf_rc=1;
+ rtl_setrstatus "${_ppf_rstatus}" 'Error: empty or unset \$PKG_DESTDIR.';
+ else
+ printf "%s/:\n" "${_ppf_destdir%/}";
+ (cd "${_ppf_destdir}" && find . -ls);
+ _ppf_rc="${?}";
+ fi;
+ fi;
+
+ return "${_ppf_rc}";
+};
+# }}}
+# {{{ pkgtoolp_info($_rstatus, $_pkg_name)
pkgtoolp_info() {
- local _pkg_name="${1}" _group_name="" _pkg_name_uc="$(rtl_toupper "${1}")" _fname="" _pkg_names=""\
- _rc=0 EX_PKG_BUILD_GROUPS="" EX_PKG_DISABLED="" EX_PKG_FINISHED="" EX_PKG_NAMES=""; _status="";
-
- if ! ex_pkg_load_groups; then
- _rc=1; _status="Error: failed to load build groups.";
- elif ! _group_name="$(ex_pkg_find_package "${EX_PKG_BUILD_GROUPS}" "${_pkg_name}")"; then
- _rc=1; _status="Error: unknown package \`${_pkg_name}'.";
- elif ! _pkg_names="$(ex_pkg_get_packages "${_group_name}")"; then
- _rc=1; _status="Error: failed to expand package list of build group \`${_group_name}'.";
+ local _ppi_rstatus="${1}" _ppi_pkg_name_list="${2}" \
+ _ppi_groups="" _ppi_groups_noauto="" \
+ _ppi_pkg_name="" _ppi_rc=0 _ppi_rc_single=0 \
+ _ppi_status="";
+ rtl_llift \$_ppi_pkg_name_list "," " ";
+
+ if ! ex_pkg_load_groups \$_ppi_groups \$_ppi_groups_noauto; then
+ _ppi_rc=1;
+ rtl_setrstatus "${_ppi_rstatus}" 'Error: failed to load build groups.';
+ else
+ for _ppi_pkg_name in ${_ppi_pkg_name_list}; do
+ pkgtoolp_info_single \
+ "${_ppi_rstatus}" "${_ppi_pkg_name}" \
+ "${_ppi_groups}" "${_ppi_groups_noauto}";
+ _ppi_rc_single="${?}";
+ if [ "${_ppi_rc_single}" -ne 0 ]; then
+ _ppi_rc="${_ppi_rc_single}";
+ eval _ppi_status="\${${_ppi_rstatus#\$}}";
+ rtl_log_msgV "fatal" "0;${_ppi_status}";
+ fi;
+ done;
+ fi;
+
+ if [ "${_ppi_rc}" -ne 0 ]; then
+ rtl_setrstatus "${_ppi_rstatus}" 'Failure in one or more package(s).';
+ fi;
+ return "${_ppi_rc}";
+};
+# }}}
+# {{{ pkgtoolp_info_single($_rstatus, $_pkg_name)
+pkgtoolp_info_single() {
+ local _ppis_rstatus="${1}" _ppis_pkg_name="${2}" _ppis_groups="${3}" _ppis_groups_noauto="${4}" \
+ _ppis_fname="" _ppis_group_fname="" _ppis_group_name="" _ppis_patch_idx=0 _ppis_pkg_disabled="" \
+ _ppis_pkg_finished="" _ppis_pkg_name_uc="" _ppis_pkg_names="" _ppis_pkg_vars="" _ppis_rc=0;
+ rtl_toupper2 \$_ppis_pkg_name \$_ppis_pkg_name_uc;
+
+ if ! ex_pkg_find_package \$_ppis_group_name "${_ppis_groups}" "${_ppis_pkg_name}"; then
+ _ppis_rc=1;
+ rtl_setrstatus "${_ppis_rstatus}" 'Error: unknown package \`'"${_ppis_pkg_name}'"'.';
+ elif ! ex_pkg_get_packages \$_ppis_pkg_names "${_ppis_group_name}"; then
+ _ppis_rc=1;
+ rtl_setrstatus "${_ppis_rstatus}" 'Error: failed to expand package list of build group \`'"${_ppis_group_name}'"'.';
elif ! ex_pkg_env "${DEFAULT_BUILD_STEPS}" "${DEFAULT_BUILD_VARS}"\
- "${_group_name}" 1 "${_pkg_name}" "" "${BUILD_WORKDIR}"; then
- _rc=1; _status="Error: failed to set package environment for \`${_pkg_name}'.";
- else _pkg_version="$(rtl_get_var_unsafe -u "PKG_"${_pkg_name}"_VERSION")";
- rtl_log_env_vars "verbose" "package" $(rtl_get_vars_fast "^PKG_${_pkg_name_uc}");
- rtl_log_msg "info" "${MSG_pkgtool_build_group}" "${_group_name}";
- if [ -z "${PKG_DEPENDS:-}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkg_no_deps}" "${_pkg_name}";
- else rtl_log_msg "info" "${MSG_pkgtool_pkg_direct_deps}" "${_pkg_name}" "${PKG_DEPENDS}";
- if ! ex_pkg_unfold_depends 1 1 "${_group_name}" "${_pkg_names}" "${_pkg_name}" 0; then
- rtl_log_msg "warning" "${MSG_pkgtool_pkg_deps_fail}" "${_pkg_name}";
- else EX_PKG_NAMES="$(rtl_lfilter "${EX_PKG_NAMES}" "${_pkg_name}")";
- if [ -n "${EX_PKG_NAMES}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkg_deps_full}"\
- "${_pkg_name}" "$(rtl_lsort "${EX_PKG_NAMES}")";
+ "${_ppis_group_name}" "${_ppis_pkg_name}" "" "${BUILD_WORKDIR}"; then
+ _ppis_rc=1;
+ rtl_setrstatus "${_ppis_rstatus}" 'Error: failed to set package environment for \`'"${_ppis_pkg_name}'"'.';
+ else
+ rtl_get_var_unsafe \$_ppis_group_fname -u "PKG_${_ppis_pkg_name}_GROUP_FNAME";
+ rtl_get_var_unsafe \$_ppis_pkg_version -u "PKG_${_ppis_pkg_name}_VERSION";
+ ex_pkg_get_package_vars \$_ppis_pkg_vars "${DEFAULT_BUILD_VARS}" "${_ppis_pkg_name}";
+ rtl_log_env_vars "package_vars" "Package variables" ${_ppis_pkg_vars};
+ rtl_log_msgV "info_build_group" "${MSG_info_build_group}" "${_ppis_group_name}" "${_ppis_group_fname}";
+
+ if [ "${PKG_DISABLED:-0}" -eq 1 ]; then
+ rtl_log_msgV "info_pkg_disabled" "${MSG_info_pkg_disabled}" "${_ppis_pkg_name}";
+ fi;
+
+ if [ "${PKG_DEPENDS:+1}" != 1 ]; then
+ rtl_log_msgV "info_pkg_no_deps" "${MSG_info_pkg_no_deps}" "${_ppis_pkg_name}";
+ else
+ rtl_log_msgV "info_pkg_direct_deps" "${MSG_info_pkg_direct_deps}" "${_ppis_pkg_name}" "${PKG_DEPENDS}";
+ if ! ex_pkg_unfold_depends \
+ \$_ppis_pkg_disabled \$_ppis_pkg_finished \
+ \$_ppis_pkg_names 1 1 "${_ppis_group_name}" \
+ "${_ppis_pkg_names}" "${_ppis_pkg_name}" 0 \
+ "${BUILD_WORKDIR}";
+ then
+ rtl_log_msgV "warning" "${MSG_info_pkg_deps_fail}" "${_ppis_pkg_name}";
+ else
+ rtl_lfilter \$_ppis_pkg_names "${_ppis_pkg_name}";
+
+ if [ "${_ppis_pkg_names:+1}" = 1 ]; then
+ rtl_log_msgV "info_pkg_deps_full" "${MSG_info_pkg_deps_full}"\
+ "${_ppis_pkg_name}" "$(rtl_lsortV "${_ppis_pkg_names}")";
fi;
- if [ -n "${EX_PKG_DISABLED}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkg_deps_full_disabled}"\
- "${_pkg_name}" "$(rtl_lsort "${EX_PKG_DISABLED}")";
+
+ if [ "${_ppis_pkg_disabled:+1}" = 1 ]; then
+ rtl_log_msgV "info_pkg_deps_full_disabled" "${MSG_info_pkg_deps_full_disabled}"\
+ "${_ppis_pkg_name}" "$(rtl_lsortV "${_ppis_pkg_disabled}")";
fi;
fi;
fi;
- set +o noglob;
- for _fname in \
- "vars/${_pkg_name}.vars" \
- "patches/${_pkg_name}/"*.patch \
- "patches/${_pkg_name}${_pkg_version:+-${_pkg_version}}.local.patch" \
- "patches/${_pkg_name}${_pkg_version:+-${_pkg_version}}.local@${BUILD_HNAME}.patch" \
- "patches/${_pkg_name}${_pkg_version:+-${_pkg_version}}_pre.local.patch" \
- "patches/${_pkg_name}${_pkg_version:+-${_pkg_version}}_pre.local@${BUILD_HNAME}.patch" \
- "${BUILD_WORKDIR}/chainport/patches/${_pkg_name%%_*}/${_pkg_name%%_*}-${_pkg_version}.midipix.patch"; do
- if [ -e "${_fname}" ]; then
- sha256sum "${_fname}";
+
+ _ppis_patch_idx=1;
+ while ex_pkg_get_default \
+ \$_ppis_fname "${_ppis_patch_idx}" \
+ "${_ppis_pkg_name}" \
+ "${_ppis_pkg_version}" \
+ "vars_files patches_pre patches" \
+ && [ "${_ppis_fname:+1}" = 1 ];
+ do
+ : $((_ppis_patch_idx += 1));
+ if [ -e "${_ppis_fname}" ]; then
+ sha256sum "${_ppis_fname}";
fi;
done;
- set -o noglob;
- fi; return "${_rc}";
-};
+ fi;
+ return "${_ppis_rc}";
+};
+# }}}
+# {{{ pkgtoolp_mirror($_rstatus, $_mirror_dname, $_mirror_dname_git)
pkgtoolp_mirror() {
- local _mirror_dname="${1}" _mirror_dname_git="${2}" _group_name="" _pkg_name="" _pkg_parent="" _rc=0;
+ local _ppm_rstatus="${1}" _ppm_mirror_dname="${2}" _ppm_mirror_dname_git="${3}" \
+ _ppm_group_name="" _ppm_groups="" _ppm_groups_noauto="" _ppm_pkg_name="" \
+ _ppm_pkg_names="" _ppm_pkg_parent="" _ppm_pkgs_failed="" _ppm_rc=0;
umask 022;
- _mirror_dname="$(rtl_subst "${_mirror_dname}" "~" "${HOME}")";
- _mirror_dname_git="$(rtl_subst "${_mirror_dname_git}" "~" "${HOME}")";
- if ! ex_pkg_load_groups; then
- _rc=1; _status="Error: failed to load build groups.";
- elif [ -n "${_mirror_dname}" ]\
- && ! rtl_fileop mkdir "${_mirror_dname}"; then
- _rc=1; _status="Error: failed to create \`${_mirror_dname}'.";
- elif [ -n "${_mirror_dname_git}" ]\
- && ! rtl_fileop mkdir "${_mirror_dname_git}"; then
- _rc=1; _status="Error: failed to create \`${_mirror_dname_git}'.";
- else for _group_name in ${EX_PKG_BUILD_GROUPS}; do
- for _pkg_name in $(ex_pkg_get_packages "${_group_name}"); do
- _pkg_parent="$(rtl_get_var_unsafe -u "PKG_${_pkg_name}_INHERIT_FROM")";
- if ! pkgtoolp_mirror_fetch \
- "${_mirror_dname}" "${_mirror_dname_git}" "${_pkg_name}"\
- "${_pkg_parent:-${_pkg_name}}"; then
- _rc=1; _status="Warning: failed to mirror one or more packages.";
+ rtl_subst \$_ppm_mirror_dname "~" "${HOME}";
+ rtl_subst \$_ppm_mirror_dname_git "~" "${HOME}";
+
+ if ! ex_pkg_load_groups \$_ppm_groups \$_ppm_groups_noauto; then
+ _ppm_rc=1;
+ rtl_setrstatus "${_ppm_rstatus}" 'Error: failed to load build groups.';
+ elif [ "${_ppm_mirror_dname:+1}" = 1 ]\
+ && ! rtl_fileop mkdir "${_ppm_mirror_dname}"; then
+ _ppm_rc=1;
+ rtl_setrstatus "${_ppm_rstatus}" 'Error: failed to create \`${_ppm_mirror_dname}'"'"'.';
+ elif [ "${_ppm_mirror_dname_git:+1}" = 1 ]\
+ && ! rtl_fileop mkdir "${_ppm_mirror_dname_git}"; then
+ _ppm_rc=1;
+ rtl_setrstatus "${_ppm_rstatus}" 'Error: failed to create \`${_ppm_mirror_dname_git}'"'"'.';
+ else
+ for _ppm_group_name in ${_ppm_groups}; do
+ ex_pkg_get_packages \$_ppm_pkg_names "${_ppm_group_name}";
+
+ for _ppm_pkg_name in ${_ppm_pkg_names}; do
+ rtl_get_var_unsafe \$_ppm_pkg_parent -u "PKG_${_ppm_pkg_name}_INHERIT_FROM";
+ if ! pkgtoolp_mirror_fetch \
+ "${_ppm_rstatus}" "${_ppm_mirror_dname}" \
+ "${_ppm_mirror_dname_git}" "${_ppm_pkg_name}" \
+ "${_ppm_pkg_parent:-${_ppm_pkg_name}}" \
+ \$_ppm_pkgs_failed;
+ then
+ _ppm_rc=1;
+ rtl_setrstatus "${_ppm_rstatus}" 'Warning: failed to mirror one or more packages: '"${_ppm_pkgs_failed}";
fi;
done;
done;
- fi; return "${_rc}";
-};
+ fi;
+ return "${_ppm_rc}";
+};
+# }}}
+# {{{ pkgtoolp_mirror_fetch($_rstatus, $_mirror_dname, $_mirror_dname_git, $_pkg_name, $_pkg_name_real, $_rpkgs_failed)
pkgtoolp_mirror_fetch() {
- local _mirror_dname="${1}" _mirror_dname_git="${2}" _pkg_name="${3}" _pkg_name_real="${4}"\
- _fname="" _pkg_disabled=0 _pkg_fname="" _pkg_sha256sum="" _pkg_url="" _pkg_urls_git=""\
- _rc=0;
-
- if _pkg_disabled="$(rtl_get_var_unsafe -u "PKG_${_pkg_name_real}_DISABLED")"\
- && [ "${_pkg_disabled:-0}" -eq 1 ]; then
- rtl_log_msg "verbose" "${MSG_pkgtool_pkg_disabled}" "${_pkg_name}" "${_pkg_name_real}";
- else if _pkg_url="$(rtl_get_var_unsafe -u "PKG_${_pkg_name_real}_URL")"\
- && _pkg_sha256sum="$(rtl_get_var_unsafe -u "PKG_${_pkg_name_real}_SHA256SUM")"; then
- if [ -z "${_mirror_dname}" ]; then
- _rc=0; rtl_log_msg "verbose" "${MSG_pkgtool_pkg_skip_archive_mirror}" "${_pkg_name}";
- elif [ "${_pkg_name}" != "${_pkg_name_real}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkg_archive_mirroring_parent}" "${_pkg_name}" "${_pkg_name_real}" "${_pkg_url}";
- if ! rtl_fileop ln_symbolic "${_pkg_name_real}" "${_mirror_dname}/${_pkg_name}"; then
- _rc=1; rtl_log_msg "warning" "${MSG_pkgtool_pkg_link_fail}"\
- "${_mirror_dname}/${_pkg_name}" "${_pkg_name}" "${_pkg_name_real}";
+ local _ppmf_rstatus="${1}" _ppmf_mirror_dname="${2}" _ppmf_mirror_dname_git="${3}" _ppmf_pkg_name="${4}" \
+ _ppmf_pkg_name_real="${5}" _ppmf_rpkgs_failed="${6#\$}" \
+ _ppmf_fname="" _ppmf_pkg_disabled=0 _ppmf_pkg_fname="" _ppmf_pkg_mirrors_git="" _ppmf_pkg_sha256sum="" \
+ _ppmf_pkg_url="" _ppmf_pkg_urls_git="" _ppmf_rc=0;
+
+ if rtl_get_var_unsafe \$_ppmf_pkg_disabled -u "PKG_${_ppmf_pkg_name_real}_DISABLED"\
+ && [ "${_ppmf_pkg_disabled:-0}" -eq 1 ]; then
+ rtl_log_msgV "verbose" "${MSG_mirror_pkg_disabled}" "${_ppmf_pkg_name}" "${_ppmf_pkg_name_real}";
+ else
+ if rtl_get_var_unsafe \$_ppmf_pkg_url -u "PKG_${_ppmf_pkg_name_real}_URL"\
+ && rtl_get_var_unsafe \$_ppmf_pkg_sha256sum -u "PKG_${_ppmf_pkg_name_real}_SHA256SUM"\
+ && [ "${_ppmf_pkg_url:+1}" = 1 ]\
+ && [ "${_ppmf_pkg_sha256sum:+1}" = 1 ];
+ then
+
+ if [ "${_ppmf_mirror_dname:+1}" != 1 ]; then
+ _ppmf_rc=0; rtl_log_msgV "verbose" "${MSG_mirror_pkg_skip_archive_mirror}" "${_ppmf_pkg_name}";
+
+ elif [ "${_ppmf_pkg_name}" != "${_ppmf_pkg_name_real}" ]; then
+ rtl_log_msgV "mirror_pkg_archive_mirroring_parent" "${MSG_mirror_pkg_archive_mirroring_parent}" "${_ppmf_pkg_name}" "${_ppmf_pkg_name_real}" "${_ppmf_pkg_url}";
+ if ! rtl_fileop ln_symbolic "${_ppmf_pkg_name_real}" "${_ppmf_mirror_dname}/${_ppmf_pkg_name}"; then
+ _ppmf_rc=1; rtl_log_msgV "warning" "${MSG_mirror_pkg_link_fail}"\
+ "${_ppmf_mirror_dname}/${_ppmf_pkg_name}" "${_ppmf_pkg_name}" "${_ppmf_pkg_name_real}";
fi;
+
else
- if ! _pkg_fname="$(rtl_get_var_unsafe -u "PKG_${_pkg_name_real}_FNAME")"; then
- _pkg_fname="${_pkg_url##*/}";
+ if rtl_get_var_unsafe \$_ppmf_pkg_fname -u "PKG_${_ppmf_pkg_name_real}_FNAME"\
+ && [ "${_ppmf_pkg_fname:+1}" != 1 ]; then
+ _ppmf_pkg_fname="${_ppmf_pkg_url##*/}";
fi;
- rtl_log_msg "info" "${MSG_pkgtool_pkg_archive_mirroring}" "${_pkg_name}" "${_pkg_url}";
- if ! rtl_fileop mkdir "${_mirror_dname}/${_pkg_name}"\
- || ! rtl_fetch_url_wget "${_pkg_url}" "${_pkg_sha256sum}" "${_mirror_dname}/${_pkg_name}" "${_pkg_fname}" "${_pkg_name_real}" ""; then
- _rc=1; rtl_log_msg "warning" "${MSG_pkgtool_pkg_mirror_fail}" "${_pkg_name}";
+ rtl_log_msgV "mirror_pkg_archive_mirroring" "${MSG_mirror_pkg_archive_mirroring}" "${_ppmf_pkg_name}" "${_ppmf_pkg_url}";
+
+ if ! rtl_fileop mkdir "${_ppmf_mirror_dname}/${_ppmf_pkg_name}"\
+ || ! rtl_fetch_url_wget \
+ "${_ppmf_pkg_url}" \
+ "${_ppmf_pkg_sha256sum}" \
+ "${_ppmf_mirror_dname}/${_ppmf_pkg_name}" \
+ "${_ppmf_pkg_fname}" "${_ppmf_pkg_name_real}" \
+ "";
+ then
+ _ppmf_rc=1;
+ rtl_log_msgV "warning" "${MSG_mirror_pkg_mirror_fail}" "${_ppmf_pkg_name}";
+ rtl_lconcat "${_ppmf_rpkgs_failed}" "${_ppmf_pkg_name}";
else
- pkg_fetch_download_clean_dlcache "${_mirror_dname}" "${_pkg_name}" "${_pkg_fname}" "${_pkg_urls_git}";
+ rtl_fetch_clean_dlcache \
+ "${_ppmf_mirror_dname}" \
+ "${_ppmf_pkg_name}" \
+ "${_ppmf_pkg_fname}" \
+ "${_ppmf_pkg_urls_git}";
fi;
fi;
+
fi;
- if _pkg_urls_git="$(rtl_get_var_unsafe -u "PKG_${_pkg_name_real}_URLS_GIT")"; then
- if [ -z "${_mirror_dname_git}" ]; then
- _rc=0; rtl_log_msg "verbose" "${MSG_pkgtool_pkg_skip_git_mirror}" "${_pkg_name}";
- elif [ "$(rtl_get_var_unsafe -u "PKG_${_pkg_name_real}_MIRRORS_GIT")" = "skip" ]; then
- _rc=0; rtl_log_msg "verbose" "${MSG_pkgtool_pkg_skip_git_mirror_disabled}" "${_pkg_name}";
- elif [ "${_pkg_name}" != "${_pkg_name_real}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkg_git_mirroring_parent}" "${_pkg_name}" "${_pkg_name_real}" "${_pkg_urls_git}";
- if ! rtl_fileop ln_symbolic "${_pkg_name_real}" "${_mirror_dname_git}/${_pkg_name}"; then
- _rc=1; rtl_log_msg "warning" "${MSG_pkgtool_pkg_link_fail}"\
- "${_mirror_dname_git}/${_pkg_name}" "${_pkg_name}" "${_pkg_name_real}";
+
+ if rtl_get_var_unsafe \$_ppmf_pkg_urls_git -u "PKG_${_ppmf_pkg_name_real}_URLS_GIT"\
+ && [ "${_ppmf_pkg_urls_git:+1}" = 1 ];
+ then
+
+ if [ "${_ppmf_mirror_dname_git:+1}" != 1 ]; then
+ _ppmf_rc=0; rtl_log_msgV "verbose" "${MSG_mirror_pkg_skip_git_mirror}" "${_ppmf_pkg_name}";
+
+ elif rtl_get_var_unsafe \$_ppmf_pkg_mirrors_git -u "PKG_${_ppmf_pkg_name_real}_MIRRORS_GIT"\
+ && [ "${_ppmf_pkg_mirrors_git}" = "skip" ]; then
+ _ppmf_rc=0; rtl_log_msgV "verbose" "${MSG_mirror_pkg_skip_git_mirror_disabled}" "${_ppmf_pkg_name}";
+
+ elif [ "${_ppmf_pkg_name}" != "${_ppmf_pkg_name_real}" ]; then
+ rtl_log_msgV "mirror_pkg_git_mirroring_parent" "${MSG_mirror_pkg_git_mirroring_parent}" "${_ppmf_pkg_name}" "${_ppmf_pkg_name_real}" "${_ppmf_pkg_urls_git}";
+ if ! rtl_fileop ln_symbolic "${_ppmf_pkg_name_real}" "${_ppmf_mirror_dname_git}/${_ppmf_pkg_name}"; then
+ _ppmf_rc=1;
+ rtl_log_msgV "warning" "${MSG_mirror_pkg_link_fail}" \
+ "${_ppmf_mirror_dname_git}/${_ppmf_pkg_name}" "${_ppmf_pkg_name}" "${_ppmf_pkg_name_real}";
+ rtl_lconcat "${_ppmf_rpkgs_failed}" "${_ppmf_pkg_name}";
fi;
+
else
- rtl_log_msg "info" "${MSG_pkgtool_pkg_git_mirroring}" "${_pkg_name}" "${_pkg_urls_git}";
- if ! rtl_fileop mkdir "${_mirror_dname_git}/${_pkg_name}"\
- || ! rtl_fetch_mirror_urls_git "${DEFAULT_GIT_ARGS}" "${_mirror_dname_git}/${_pkg_name}" ${_pkg_urls_git}; then
- _rc=1; rtl_log_msg "warning" "${MSG_pkgtool_pkg_mirror_fail}" "${_pkg_name}";
+ rtl_log_msgV "mirror_pkg_git_mirroring" "${MSG_mirror_pkg_git_mirroring}" "${_ppmf_pkg_name}" "${_ppmf_pkg_urls_git}";
+ if ! rtl_fileop mkdir "${_ppmf_mirror_dname_git}/${_ppmf_pkg_name}"\
+ || ! rtl_fetch_mirror_urls_git "${DEFAULT_GIT_ARGS}" "${_ppmf_mirror_dname_git}/${_ppmf_pkg_name}" ${_ppmf_pkg_urls_git}; then
+ _ppmf_rc=1;
+ rtl_log_msgV "warning" "${MSG_mirror_pkg_mirror_fail}" "${_ppmf_pkg_name}";
+ rtl_lconcat "${_ppmf_rpkgs_failed}" "${_ppmf_pkg_name}";
else
- pkg_fetch_download_clean_dlcache "${_mirror_dname_git}" "${_pkg_name}" "${_pkg_fname}" "${_pkg_urls_git}";
+ rtl_fetch_clean_dlcache "${_ppmf_mirror_dname_git}" "${_ppmf_pkg_name}" "${_ppmf_pkg_fname}" "${_ppmf_pkg_urls_git}";
fi;
fi;
+
fi;
- if [ -z "${_pkg_url}" ]\
- && [ -z "${_pkg_sha256sum}" ]\
- && [ -z "${_pkg_urls_git}" ]; then
- _rc=0; rtl_log_msg "verbose" "${MSG_pkgtool_pkg_skip_no_urls}" "${_pkg_name}";
+
+ if [ "${_ppmf_pkg_url:+1}" != 1 ]\
+ && [ "${_ppmf_pkg_sha256sum:+1}" != 1 ]\
+ && [ "${_ppmf_pkg_urls_git:+1}" != 1 ]; then
+ _ppmf_rc=0; rtl_log_msgV "verbose" "${MSG_mirror_pkg_skip_no_urls}" "${_ppmf_pkg_name}";
fi;
- fi; return "${_rc}";
-};
+ fi;
-pkgtoolp_restart_at() {
- local _pkg_name="${1}" _rc=0; _status="";
-
- if ! ex_pkg_load_dump "${_pkg_name}" "${BUILD_WORKDIR}"; then
- _rc=1; _status="${_status}";
- else case "${ARG_RESTART_AT}" in
- ALL) if ! "${MIDIPIX_BUILD_PWD}/build.sh" -P -r "${_pkg_name}" -v; then
- _rc=1; _status="Error: failed to run command line ${MIDIPIX_BUILD_PWD}/build.sh -P -r ${_pkg_name} -v";
- fi; ;;
- *) if ! "${MIDIPIX_BUILD_PWD}/build.sh" -P -r "${_pkg_name}:${ARG_RESTART_AT}" -v; then
- _rc=1; _status="Error: failed to run command line ${MIDIPIX_BUILD_PWD}/build.sh -P -r ${_pkg_name}:${ARG_RESTART_AT} -v";
- fi; ;;
- esac;
- fi; return "${_rc}";
+ return "${_ppmf_rc}";
};
+# }}}
+# {{{ pkgtoolp_profile($_rstatus)
+pkgtoolp_profile() {
+ local _ppp_rstatus="${1}" _ppp_log_fname="${2}" \
+ _ppp_line="" \
+ _ppp_ts=0 _ppp_ts_delta=0 _ppp_ts_last=0 _ppp_ts_max=0 \
+ _ppp_pkg_name="" _ppp_pkg_step_max="" _ppp_rc=0 \
+ IFS0="${IFS}" IFS;
+
+ _ppp_log_fname="profile.log";
+
+ for _ppp_pkg_name in $(find \
+ "${BUILD_WORKDIR}" \
+ -maxdepth 1 \
+ -mindepth 1 \
+ -name ".*.start" \
+ -printf "%P\n");
+ do
+ _ppp_pkg_name="${_ppp_pkg_name%.start}";
+ _ppp_pkg_name="${_ppp_pkg_name##.}";
+ _ppp_ts_last=0; _ppp_ts_max=0; _ppp_pkg_step_max="";
+ rtl_set_IFS_nl;
+ for _ppp_line in $( \
+ find \
+ "${BUILD_WORKDIR}" \
+ -maxdepth 1 \
+ -mindepth 1 \
+ -name ".${_ppp_pkg_name}.*" \
+ -printf "%T@ %P\n" | \
+ sort -nk1);
+ do
+ IFS=" "; set -- ${_ppp_line}; rtl_set_IFS_nl;
+ _ppp_ts="${1}"; _ppp_pkg_step="${2}";
+ _ppp_ts="${_ppp_ts%%.*}";
+ if [ "${_ppp_ts_last}" -eq 0 ]; then
+ _ppp_ts_last="${_ppp_ts}";
+ fi;
+
+ _ppp_ts_delta="$((${_ppp_ts}-${_ppp_ts_last}))";
+ _ppp_ts_last="${_ppp_ts}";
+
+ if [ "${_ppp_ts_delta}" -gt "${_ppp_ts_max}" ]; then
+ _ppp_ts_max="${_ppp_ts_delta}";
+ _ppp_pkg_step_max="${_ppp_pkg_step#.${_ppp_pkg_name}.}";
+ fi;
+ done;
+ printf "%20s %5u %s\n" \
+ "${_ppp_pkg_step_max}" \
+ "${_ppp_ts_max}" \
+ "${_ppp_pkg_name}";
+ done | sort -nk2 >"${_ppp_log_fname}";
+ IFS="${IFS0}";
+
+ printf "%5u items written to \`%s'; tail -n25 follows:\n" \
+ "$(wc -l < "${_ppp_log_fname}")" \
+ "${_ppp_log_fname}";
+ tail -n15 "${_ppp_log_fname}";
+
+ printf "\n";
+ printf "By build step:\n";
+ for _ppp_step in ${DEFAULT_BUILD_STEPS}; do
+ printf "%20s %d\n" \
+ "${_ppp_step}" \
+ "$(grep " ${_ppp_step} " "${_ppp_log_fname}" | wc -l)";
+ done | grep -v " [01]$" | sort -nk2;
+
+ return "${_ppp_rc}";
+};
+# }}}
+# {{{ pkgtoolp_rdepends($_rstatus, $_pkg_name, $_full_rdependsfl)
pkgtoolp_rdepends() {
- local _pkg_name="${1}" _group_name="" _pkg_depends="" _pkg_name_rdepend="" _pkg_names=""\
- _pkg_rdepends="" _rc=0 EX_PKG_BUILD_GROUPS="" EX_PKG_DISABLED="" EX_PKG_RDEPENDS_DIRECT=""; _status="";
-
- if ! ex_pkg_load_groups; then
- _rc=1; _status="Error: failed to load build groups.";
- elif ! _group_name="$(ex_pkg_find_package "${EX_PKG_BUILD_GROUPS}" "${_pkg_name}")"; then
- _rc=1; _status="Error: unknown package \`${_pkg_name}'.";
- elif ! _pkg_names="$(ex_pkg_get_packages "${_group_name}")"; then
- _rc=1; _status="Error: failed to expand package list of build group \`${_group_name}'.";
- elif ! ex_pkg_unfold_rdepends_direct "${_group_name}" "${_pkg_names}" "${_pkg_name}"; then
- _rc=1; _status="Error: failed to unfold reverse dependency-expanded package name list for \`${_pkg_name}'.";
- elif [ -z "${EX_PKG_DISABLED}" ] && [ -z "${EX_PKG_RDEPENDS_DIRECT}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkg_deps_rev_none}" "${_pkg_name}";
- else for _pkg_name_rdepend in $(rtl_lsort "${EX_PKG_RDEPENDS_DIRECT}"); do
- _pkg_rdepends="$(rtl_lconcat "${_pkg_rdepends}" "${_pkg_name_rdepend}")";
- if _pkg_depends="$(rtl_lunfold_depends 'PKG_${_name}_DEPENDS' $(rtl_get_var_unsafe -u "PKG_"${_pkg_name}"_DEPENDS"))"\
- && [ -n "${_pkg_depends}" ]; then
- _pkg_rdepends="$(rtl_lconcat "${_pkg_rdepends}" "${_pkg_depends}")";
+ local _ppr_rstatus="${1}" _ppr_pkg_name="${2}" _ppr_full_rdependsfl="${3}" \
+ _ppr_depends="" _ppr_group_name="" _ppr_groups="" _ppr_groups_noauto="" \
+ _ppr_pkg_depends="" _ppr_pkg_disabled="" _ppr_pkg_finished="" \
+ _ppr_pkg_name_rdepend="" _ppr_pkg_names="" _ppr_pkg_rdepends="" \
+ _ppr_pkg_rdepends_direct="" _ppr_rc=0;
+
+ if ! ex_pkg_load_groups \$_ppr_groups \$_ppr_groups_noauto; then
+ _ppr_rc=1;
+ rtl_setrstatus "${_ppr_rstatus}" 'Error: failed to load build groups.';
+ elif ! ex_pkg_find_package \$_ppr_group_name "${_ppr_groups}" "${_ppr_pkg_name}"; then
+ _ppr_rc=1;
+ rtl_setrstatus "${_ppr_rstatus}" 'Error: unknown package \`'"${_ppr_pkg_name}'"'.';
+ elif ! ex_pkg_get_packages \$_ppr_pkg_names "${_ppr_group_name}"; then
+ _ppr_rc=1;
+ rtl_setrstatus "${_ppr_rstatus}" 'Error: failed to expand package list of build group \`'"${_ppr_group_name}'"'.';
+ elif ! ex_pkg_unfold_rdepends \
+ \$_ppr_pkg_disabled \$_ppr_pkg_finished \
+ \$_ppr_pkg_rdepends_direct \
+ "${_ppr_group_name}" "${_ppr_pkg_names}" \
+ "${_ppr_pkg_name}" 1 "${BUILD_WORKDIR}";
+ then
+ _ppr_rc=1;
+ rtl_setrstatus "${_ppr_rstatus}" 'Error: failed to unfold reverse dependency-expanded package name list for \`'"${_ppr_pkg_name}'"'.';
+ elif [ "${_ppr_pkg_disabled:+1}" != 1 ]\
+ && [ "${_ppr_pkg_finished:+1}" != 1 ]\
+ && [ "${_ppr_pkg_rdepends_direct:+1}" != 1 ];
+ then
+ rtl_log_msgV "info" "${MSG_rdepends_pkg_deps_rev_none}" "${_ppr_pkg_name}";
+ else
+ for _ppr_pkg_name_rdepend in $(rtl_lsortV \
+ ${_ppr_pkg_finished} \
+ ${_ppr_pkg_rdepends_direct});
+ do
+ rtl_lconcat \$_ppr_pkg_rdepends "${_ppr_pkg_name_rdepend}";
+
+ if [ "${_ppr_full_rdependsfl}" -eq 1 ]; then
+ rtl_get_var_unsafe \$_ppr_depends -u "PKG_"${_ppr_pkg_name}"_DEPENDS";
+ if rtl_lunfold_dependsV 'PKG_${_rld_name}_DEPENDS' \$_ppr_pkg_depends ${_ppr_depends}\
+ && [ "${_ppr_pkg_depends:+1}" = 1 ]; then
+ rtl_lconcat \$_ppr_pkg_rdepends "${_ppr_pkg_depends}";
+ fi;
fi;
done;
- if [ -n "${_pkg_rdepends}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkgs_deps_rev}" "${_pkg_name}" "${_pkg_rdepends}";
+
+ if [ "${_ppr_pkg_rdepends:+1}" = 1 ]; then
+ if [ "${_ppr_full_rdependsfl}" -eq 1 ]; then
+ rtl_log_msgV "info" "${MSG_rdepends_pkgs_deps_rev_recurse}" "${_ppr_pkg_name}" "${_ppr_pkg_rdepends}";
+ else
+ rtl_log_msgV "info" "${MSG_rdepends_pkgs_deps_rev}" "${_ppr_pkg_name}" "${_ppr_pkg_rdepends}";
+ fi;
fi;
- if [ -n "${EX_PKG_DISABLED}" ]; then
- rtl_log_msg "info" "${MSG_pkgtool_pkgs_deps_rev_disabled}" "${_pkg_name}" "$(rtl_lsort "${EX_PKG_DISABLED}")";
+
+ if [ "${_ppr_pkg_disabled:+1}" = 1 ]; then
+ rtl_log_msgV "info" "${MSG_rdepends_pkgs_deps_rev_disabled}" "${_ppr_pkg_name}" "$(rtl_lsortV "${_ppr_pkg_disabled}")";
fi;
- fi; return "${_rc}";
-};
+ fi;
-pkgtoolp_shell() {
- local _pkg_name="${1}" _rc=0; _status="";
-
- if ! ex_pkg_load_dump "${_pkg_name}" "${BUILD_WORKDIR}"; then
- _rc=1; _status="${_status}";
- else rtl_log_env_vars "verbose" "package" $(rtl_get_vars_fast "^PKG_");
- rtl_log_msg "info" "${MSG_pkgtool_shell_env1}" "${SHELL}" "${PKG_BUILD_DIR}";
- rtl_log_msg "info" "${MSG_pkgtool_shell_env2}" "${_pkg_name}";
- rtl_log_msg "info" "${MSG_pkgtool_shell_env3}" "${_pkg_name}";
- rtl_log_msg "info" "${MSG_pkgtool_shell_env4}" "${_pkg_name}";
- export ARCH BUILD_KIND \
- 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}";
- fi; return "${_rc}";
+ return "${_ppr_rc}";
};
-
+# }}}
+# {{{ pkgtoolp_tarball($_rstatus, $_pkg_name)
pkgtoolp_tarball() {
- local _pkg_name="${1}" _date="" _group_name="" _hname="" _pkg_name_full=""\
- _pkg_version="" _rc=0 _tarball_fname="" EX_PKG_BUILD_GROUPS=""; _status="";
+ local _ppt_rstatus="${1}" _ppt_pkg_name="${2}" \
+ _ppt_date="" _ppt_group_name="" _ppt_groups="" _ppt_groups_noauto="" \
+ _ppt_hname="" _ppt_pkg_name_full="" _ppt_pkg_version="" _ppt_rc=0 \
+ _ppt_tarball_fname="";
- if ! ex_pkg_load_groups; then
- _rc=1; _status="Error: failed to load build groups.";
- elif ! _group_name="$(ex_pkg_find_package "${EX_PKG_BUILD_GROUPS}" "${_pkg_name}")"; then
- _rc=1; _status="Error: unknown package \`${_pkg_name}'.";
+ if ! ex_pkg_load_groups \$_ppt_groups \$_ppt_groups_noauto; then
+ _ppt_rc=1;
+ rtl_setrstatus "${_ppt_rstatus}" 'Error: failed to load build groups.';
+ elif ! ex_pkg_find_package \$_ppt_group_name "${_ppt_groups}" "${_ppt_pkg_name}"; then
+ _ppt_rc=1;
+ rtl_setrstatus "${_ppt_rstatus}" 'Error: unknown package \`'"${_ppt_pkg_name}'"'.';
elif ! ex_pkg_env "${DEFAULT_BUILD_STEPS}" "${DEFAULT_BUILD_VARS}" \
- "${_group_name}" 0 "${_pkg_name}" "" "${BUILD_WORKDIR}"; then
- _rc=1; _status="Error: failed to set package environment for \`${_pkg_name}'.";
- elif ! _date="$(date +%Y%m%d_%H%M%S)"; then
- _rc=1; _status="Error: failed to call date(1).";
- elif ! _hname="$(hostname -f)"; then
- _rc=1; _status="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" "${MSG_pkgtool_tarball_creating}" "${PKG_BASE_DIR}" "${_pkg_name}";
- if ! tar -C "${BUILD_WORKDIR}" -cpf - \
- "${PKG_BASE_DIR#${BUILD_WORKDIR%/}/}" \
- "${_pkg_name}_stderrout.log" |\
- bzip2 -c -9 - > "${_tarball_fname}"; then
- _rc=1; _status="Error: failed to create compressed tarball of \`${PKG_BASE_DIR}' and \`${_pkg_name}_stderrout.log'.";
+ "${_ppt_group_name}" 0 "${_ppt_pkg_name}" "" "${BUILD_WORKDIR}";
+ then
+ _ppt_rc=1;
+ rtl_setrstatus "${_ppt_rstatus}" 'Error: failed to set package environment for \`'"${_ppt_pkg_name}'"'.';
+ elif ! _ppt_date="$(date +%Y%m%d_%H%M%S)"; then
+ _ppt_rc=1;
+ rtl_setrstatus "${_ppt_rstatus}" 'Error: failed to call date(1).';
+ elif ! _ppt_hname="$(hostname -f)"; then
+ _ppt_rc=1;
+ rtl_setrstatus "${_ppt_rstatus}" 'Error: failed to call hostname(1).';
+ else
+ if [ "${PKG_VERSION:+1}" = 1 ]; then
+ _ppt_pkg_name_full="${_ppt_pkg_name}-${PKG_VERSION}";
else
- rtl_log_msg "info" "${MSG_pkgtool_tarball_created}" "${PKG_BASE_DIR}" "${_pkg_name}";
+ _ppt_pkg_name_full="${_ppt_pkg_name}";
fi;
- fi; return "${_rc}";
-};
-pkgtoolp_update_diff() {
- local _pkg_name="${1}" _diff_fname_dst="" _diff_fname_src="" _fname=""\
- _fname_base="" _rc=0; _status="";
+ _ppt_tarball_fname="${_ppt_pkg_name_full}@${_ppt_hname}-${_ppt_date}.tbz2";
+ rtl_log_msgV "info" "${MSG_tarball_creating}" "${PKG_BASE_DIR}" "${_ppt_pkg_name}";
- if ! ex_pkg_load_dump "${_pkg_name}" "${BUILD_WORKDIR}"; then
- _rc=1; _status="${_status}";
- else if [ -n "${PKG_VERSION}" ]; then
- _diff_fname_dst="${_pkg_name}-${PKG_VERSION}.local.patch";
+ if ! tar -C "${BUILD_WORKDIR}" -cpf - \
+ "${PKG_BASE_DIR#${BUILD_WORKDIR%/}/}" \
+ "${_ppt_pkg_name}_stderrout.log" |\
+ bzip2 -c -9 - > "${_ppt_tarball_fname}";
+ then
+ _ppt_rc=1;
+ rtl_setrstatus "${_ppt_rstatus}" 'Error: failed to create compressed tarball of \`'"${PKG_BASE_DIR}'"' and \`'"${_ppt_pkg_name}"'_stderrout.log'"'"'.';
else
- _diff_fname_dst="${_pkg_name}.local.patch";
- fi;
- if ! _diff_fname_src="$(mktemp)"; then
- _rc=1; _status="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
- _rc=1; _status="Error: failed to create diff(1).";
- elif ! rtl_fileop mv "${_diff_fname_src}" "${MIDIPIX_BUILD_PWD}/patches/${_diff_fname_dst}"; then
- _rc=1; _status="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" "${MSG_pkgtool_updated_patches}" "${MIDIPIX_BUILD_PWD}" "${_diff_fname_dst}";
- fi;
+ rtl_log_msgV "info" "${MSG_tarball_created}" "${PKG_BASE_DIR}" "${_ppt_pkg_name}";
fi;
- fi; return "${_rc}";
+ fi;
+
+ return "${_ppt_rc}";
};
+# }}}
pkgtool() {
- local _rc=0 _status="" BUILD_GROUPS="" ARCH BUILD_KIND BUILD_WORKDIR PKGTOOL_PKGNAME PREFIX;
-
- if ! . "${0%/*}/subr/pkgtool_init.subr"; then
- _rc=1; printf "Error: failed to source \`${0%/*}/subr/pkgtool_init.subr'." >&2;
- elif ! pkgtool_init "${@}"; then
- _rc=1; _status="${_status}";
- else case "1" in
- "${ARG_INFO:-0}") pkgtoolp_info "${PKGTOOL_PKG_NAME}"; ;;
- "${ARG_MIRROR:-0}") pkgtoolp_mirror "${ARG_MIRROR_DNAME}" "${ARG_MIRROR_DNAME_GIT}"; ;;
- "${ARG_RDEPENDS:-0}") pkgtoolp_rdepends "${PKGTOOL_PKG_NAME}"; ;;
- "${ARG_RESTART_AT:+1}") pkgtoolp_restart_at "${PKGTOOL_PKG_NAME}"; ;;
- "${ARG_SHELL:-0}") pkgtoolp_shell "${PKGTOOL_PKG_NAME}"; ;;
- "${ARG_TARBALL:-0}") pkgtoolp_tarball "${PKGTOOL_PKG_NAME}"; ;;
- "${ARG_UPDATE_DIFF:-0}") pkgtoolp_update_diff "${PKGTOOL_PKG_NAME}"; ;;
+ local _rc=0 _status="" \
+ BUILD_GROUPS="" ARCH BUILD_KIND \
+ BUILD_WORKDIR PKGTOOL_PKGNAME PREFIX;
+
+ if ! pkgtoolp_init \$_status "${@}"; then
+ _rc=1;
+ _status="Error: ${_status}";
+ else
+ case "1" in
+ "${ARG_EDIT:-0}") pkgtoolp_edit \$_status "${PKGTOOL_PKG_NAME}"; ;;
+ "${ARG_FILES:-0}") pkgtoolp_files \$_status "${PKGTOOL_PKG_NAME}"; ;;
+ "${ARG_INFO:-0}") pkgtoolp_info \$_status "${PKGTOOL_PKG_NAME}"; ;;
+ "${ARG_MIRROR:-0}") pkgtoolp_mirror \$_status "${ARG_MIRROR_DNAME}" "${ARG_MIRROR_DNAME_GIT}"; ;;
+ "${ARG_PROFILE:-0}") pkgtoolp_profile \$_status "${ARG_PROFILE_LOG_FNAME}"; ;;
+ "${ARG_RDEPENDS:-0}") pkgtoolp_rdepends \$_status "${PKGTOOL_PKG_NAME}" 0; ;;
+ "${ARG_RDEPENDS_FULL:-0}") pkgtoolp_rdepends \$_status "${PKGTOOL_PKG_NAME}" 1; ;;
+ "${ARG_TARBALL:-0}") pkgtoolp_tarball \$_status "${PKGTOOL_PKG_NAME}"; ;;
esac; _rc="${?}";
fi;
+
if [ "${_rc}" -ne 0 ]; then
- rtl_log_msg "fatalexit" "0;${_status}";
- elif [ -n "${_status}" ]; then
- rtl_log_msg "info" "0;${_status}";
+ rtl_log_enable_tagsV "${LOG_TAGS_all}";
+ rtl_log_msgV "fatalexit" "0;${_status}";
+ elif [ "${_status:+1}" = 1 ]; then
+ rtl_log_enable_tagsV "${LOG_TAGS_all}";
+ rtl_log_msgV "info" "0;${_status}";
fi;
};