diff options
author | Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de> | 2023-03-23 13:03:38 +0100 |
---|---|---|
committer | Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de> | 2023-03-23 13:03:38 +0100 |
commit | 9d89ab1d6353b19702de400c940acbbf649e5206 (patch) | |
tree | 298b448e415b2c76a0f313c52b061fcd142c7e59 | |
parent | bfd92578f5d7772292936774bbacbbc1c50edd43 (diff) | |
download | midipix_build-9d89ab1d6353b19702de400c940acbbf649e5206.tar.bz2 midipix_build-9d89ab1d6353b19702de400c940acbbf649e5206.tar.xz |
Implements ./pkgtool.sh -p.
-rw-r--r-- | etc/README.md | 29 | ||||
-rw-r--r-- | etc/pkgtool.usage | 3 | ||||
-rwxr-xr-x | pkgtool.sh | 88 |
3 files changed, 101 insertions, 19 deletions
diff --git a/etc/README.md b/etc/README.md index 5d01deed..990c651d 100644 --- a/etc/README.md +++ b/etc/README.md @@ -912,25 +912,26 @@ usage: ./build.sh [-a nt32|nt64] [-b debug|release] [-C dir[,..]] [-D kind[ ## 4.6. ``pkgtool.sh``
```
-usage: ./pkgtool.sh [-a nt32|nt64] [-b debug|release] [-i|-m <dname> -M <dname>|-r|-R|-t]
+usage: ./pkgtool.sh [-a nt32|nt64] [-b debug|release] [-i|-m <dname> -M <dname>|-p|-r|-R|-t]
[--theme theme] [-v]
[<variable name>=<variable override>[ ..]] name
- -a nt32|nt64 Selects 32-bit or 64-bit architecture; defaults to nt64.
- -b debug|release Selects debug or release build kind; defaults to debug.
- -i List package variables and dependencies of single named package.
- -m <dname> Setup package archives mirror in <dname> and/or
- -M <dname> Setup Git repositories mirror in <dname>
- Specify "" or '' as <dname> to default to the defaults in
- ${HOME}/pkgtool.vars, if present.
- -r List reverse dependencies of single named package.
- -R List full reverse dependencies of single named package.
- -t Produce tarball of package build root directory and build log
- file for the purpose of distribution given build failure.
- -v Increase verbosity.
+ -a nt32|nt64 Selects 32-bit or 64-bit architecture; defaults to nt64.
+ -b debug|release Selects debug or release build kind; defaults to debug.
+ -i List package variables and dependencies of single named package.
+ -m <dname> Setup package archives mirror in <dname> and/or
+ -M <dname> Setup Git repositories mirror in <dname>
+ Specify "" or '' as <dname> to default to the defaults in
+ ${HOME}/pkgtool.vars, if present.
+ -p <log_fname> Profile last build.
+ -r List reverse dependencies of single named package.
+ -R List recursive reverse dependencies of single named package.
+ -t Produce tarball of package build root directory and build log
+ file for the purpose of distribution given build failure.
+ -v Increase verbosity.
<variable name>=<variable override>[ ..]
- Override build variable.
+ Override build or package variable.
```
> N.B. When using ``pkgtool.sh`` on a build w/ build variables (see section [4.2](#42-build-variables))
diff --git a/etc/pkgtool.usage b/etc/pkgtool.usage index 4b24d09e..47f1daa1 100644 --- a/etc/pkgtool.usage +++ b/etc/pkgtool.usage @@ -1,4 +1,4 @@ -[97musage[90m: [33m./[93mpkgtool.sh [90m[[33m-[93ma nt32[90m|[93mnt64[90m] [[33m-[93mb [93mdebug[90m|[93mrelease[90m] [[33m-[93mi[90m|[33m-[93mm [90m<[93mdname[90m> [33m-[93mM [90m<[93mdname[90m>|[33m-[93mr[90m|[33m-[93mR[90m|[33m-[93mt[90m][0m +[97musage[90m: [33m./[93mpkgtool.sh [90m[[33m-[93ma nt32[90m|[93mnt64[90m] [[33m-[93mb [93mdebug[90m|[93mrelease[90m] [[33m-[93mi[90m|[33m-[93mm [90m<[93mdname[90m> [33m-[93mM [90m<[93mdname[90m>|[33m-[93mp[90m|[33m-[93mr[90m|[33m-[93mR[90m|[33m-[93mt[90m][0m [90m[[93m--theme theme[90m] [90m[[33m-[93mv[90m][0m [90m[<[93mvariable name[90m>[93m=[90m<[93mvariable override[90m>[ ..]] [93mname[90m @@ -9,6 +9,7 @@ [33m-[93mM [90m<[93mdname[90m> [96mSetup Git repositories mirror in [90m<[93mdname[90m>[0m [96mSpecify "" or '' as <dname> to default to the defaults in[0m [93m${HOME}/pkgtool.vars[96m, if present.[0m + [33m-[93mp [90m<[93mlog_fname[90m>[0m [96mProfile last build.[0m [33m-[93mr [96mList reverse dependencies of single named package.[0m [33m-[93mR [96mList recursive reverse dependencies of single named package.[0m [33m-[93mt [96mProduce tarball of package build root directory and build log[0m @@ -7,7 +7,7 @@ pkgtoolp_init() { local _pi_rstatus="${1#\$}" \ _pi_args_long="" \ _pi_name_base="pkgtool" \ - _pi_optstring="a:b:him:M:rRtv" \ + _pi_optstring="a:b:him: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 @@ -52,22 +52,24 @@ pkgtoolp_init_args() { if [ "$((${ARG_INFO:-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 -i, -m and/or -M, -r, -R, -s, or -t must be specified.'; + rtl_setrstatus "${_ppia_rstatus}" 'only one of -i, -m and/or -M, -p, -r, -R, -s, or -t must be specified.'; elif [ "$((${ARG_INFO:-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 -i, -m and/or -M, -r, -R, -s, or -t must be specified.'; + rtl_setrstatus "${_ppia_rstatus}" 'one of -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}"; @@ -132,6 +134,13 @@ pkgtoolp_init_getopts_fn() { 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; ;; @@ -161,7 +170,8 @@ pkgtoolp_init_getopts_fn() { local _ppigf_verb="${1}" _ppigf_rstatus="${2#\$}"; if [ "${PKGTOOL_PKG_NAME:+1}" != 1 ]\ - && [ "${ARG_MIRROR:-0}" -eq 0 ]; then + && [ "${ARG_MIRROR:-0}" -eq 0 ]\ + && [ "${ARG_PROFILE:-0}" -eq 0 ]; then _ppigf_rc=1; rtl_setrstatus "${_ppigf_rstatus}" 'missing package name.'; else @@ -414,6 +424,75 @@ pkgtoolp_mirror_fetch() { 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 _ppr_rstatus="${1}" _ppr_pkg_name="${2}" _ppr_full_rdependsfl="${3}" \ @@ -538,6 +617,7 @@ pkgtool() { case "1" in "${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}"; ;; |