diff options
author | Karel Kočí <cynerd@email.cz> | 2020-07-08 18:09:02 +0200 |
---|---|---|
committer | Karel Kočí <cynerd@email.cz> | 2020-07-08 18:09:02 +0200 |
commit | 7ed748910f1927a55abdb52511c94f79435d9cd7 (patch) | |
tree | 0f3e8e294edec9f337bff2333e4d72b5d291bcfd /scripts/force-make | |
parent | 09e0b373a617b4c6cffbbcf63e62e393159da44d (diff) | |
download | laminar-cnf-7ed748910f1927a55abdb52511c94f79435d9cd7.tar.gz laminar-cnf-7ed748910f1927a55abdb52511c94f79435d9cd7.tar.bz2 laminar-cnf-7ed748910f1927a55abdb52511c94f79435d9cd7.zip |
turris: use force-make machinery to not need to debug on server
This is now configured so that if build of package fails it runs
compilation again with logs printed.
Diffstat (limited to 'scripts/force-make')
-rwxr-xr-x | scripts/force-make | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/force-make b/scripts/force-make new file mode 100755 index 0000000..7aa6513 --- /dev/null +++ b/scripts/force-make @@ -0,0 +1,82 @@ +#!/bin/bash +# Make wrapper with ability to decrease paralelism and try again. +# (C) 2018-2020 CZ.NIC, z.s.p.o. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +set -eu + +usage() { + echo "Usage: $0 [OPTION].. [-- [ARGUMENTS]..]" >&2 +} + +help() { + usage + cat >&2 <<EOF +This is make wrapper that tries to run build really hard. It runs build multiple +times while it decreases paralelism. You can set amount of retries done given +number of parallel jobs. You can also specify speed how fast number of parallel +jobs are going to decay using -d option. There is last additional run on top of it +all that appends all arguments to make call passed to -f option. + +Options: + -j NUM Number of parallel jobs, modified and passed to make (in default 1) + -d OP Divider used to decrease number of parallel jobs (in default 2) + -c NUM Number of retries before paralelism is decreased (in default set to 1) + -f ARGS Additional argument to be used for last single job attempt (can be + passed multiple times) +EOF +} + +jobs_count="1" +jobs_divider="2" +retry_count="1" +fallback=() +while getopts "j:d:c:f:h" opt; do + case "$opt" in + j) + jobs_count="$OPTARG" + ;; + d) + jobs_divider="$OPTARG" + ;; + c) + retry_count="$OPTARG" + ;; + f) + fallback+=("$OPTARG") + ;; + h) + help + exit 0 + ;; + *) + usage + exit 1 + ;; + esac +done +shift $((OPTIND - 1)) + + +while [ "$jobs_count" -gt 1 ]; do + while [ "$retry_count" -gt 0 ]; do + if make -j "$jobs_count" "$@"; then + exit 0 # Success + fi + retry_count="$((retry_count - 1))" + done + jobs_count="$((jobs_count / jobs_divider))" +done + +make "$@" "${fallback[@]}" |