diff options
-rwxr-xr-x | build.sh | 5 | ||||
-rw-r--r-- | etc/build.usage | 2 | ||||
-rw-r--r-- | subr/ex_pkg_dispatch.subr | 5 | ||||
-rw-r--r-- | subr/ex_pkg_exec.subr | 6 |
4 files changed, 12 insertions, 6 deletions
@@ -45,7 +45,10 @@ buildp_dispatch() { else ex_rtl_log_msg fail "${BUILD_WORKDIR}/${_pkg_name}_stderrout.log:"; cat "${BUILD_WORKDIR}/${_pkg_name}_stderrout.log"; - ex_rtl_log_msg failexit "Build failed in \`${_pkg_name}'."; + ex_rtl_log_msg fail "Build failed in \`${_pkg_name}'."; + ex_rtl_log_msg fail "Terminating pending builds..."; + pkill -P "${$}"; + exit 1; fi; ;; disabled_pkg) ex_rtl_log_msg vnfo "Skipping disabled package \`${_pkg_name}.'"; ;; skipped_pkg) ex_rtl_log_msg vnfo "Skipping finished package \`${_pkg_name}.'"; ;; diff --git a/etc/build.usage b/etc/build.usage index d3144847..c9a0466f 100644 --- a/etc/build.usage +++ b/etc/build.usage @@ -15,6 +15,8 @@ usage: ./build.sh [-4|6] [-a nt32|nt64] [-b debug|release] -P [jobs] Enables parallelisation at target-level, whenever applicable. The maximum count of jobs defaults to the number of logical processors on the host system. + If -R is not specified and at least one (1) package fails to build, + all remaining package builds will be forcibly aborted for convenience. -r ALL[:step,..] -r name[,..][:step,..] Restart the all packages/the specified comma-separated package(s) completely or at optionally specified comma-separated step(s). diff --git a/subr/ex_pkg_dispatch.subr b/subr/ex_pkg_dispatch.subr index fea64c8b..21fa6733 100644 --- a/subr/ex_pkg_dispatch.subr +++ b/subr/ex_pkg_dispatch.subr @@ -21,11 +21,6 @@ exp_pkg_dispatch() { "${_dispatch_fn}" start_pkg "${_pkg_name}" "${_tgt_name}"; (set -o errexit -o noglob; BUILD_IS_PARENT=0; ex_pkg_env "${_pkg_name}" "${_tgt_name}" "${_restart_at}"; - trap "if [ \${?} -eq 0 ]; then \ - echo \"done ${_pkg_name} ${_tgt_name}\" >&3; \ - else \ - echo \"fail ${_pkg_name} ${_tgt_name}\" >&3; \ - fi;" EXIT HUP INT TERM USR1 USR2; ex_pkg_exec "${_pkg_name}" "${_tgt_name}" "${_restart_at}" \ "${_dispatch_fn}";) 1>"${_stderrout_path}" 2>&1 3>"${_pipe_path}" & : $((${_njobs_vname}+=1)); diff --git a/subr/ex_pkg_exec.subr b/subr/ex_pkg_exec.subr index ceb9579a..76294763 100644 --- a/subr/ex_pkg_exec.subr +++ b/subr/ex_pkg_exec.subr @@ -24,6 +24,12 @@ exp_pkg_exec_pre() { ex_pkg_exec() { local _pkg_name="${1}" _tgt_name="${2}" _restart_at="${3}" \ _step _step_cmd _step_cmd_pfx _step_rc; + trap "if [ \${?} -eq 0 ]; then \ + echo \"done ${_pkg_name} ${_tgt_name}\" >&3; \ + else \ + echo \"fail ${_pkg_name} ${_tgt_name}\" >&3; \ + pkill -U "${$}"; \ + fi;" EXIT HUP INT TERM USR1 USR2; exp_pkg_exec_pre "${_pkg_name}" "${_tgt_name}" "${_restart_at}"; "${_dispatch_fn}" exec_start "${_pkg_name}" "${_tgt_name}"; if ex_rtl_test_cmd "pkg_${_pkg_name}_all"; then |