summaryrefslogtreecommitdiff
path: root/scripts/force-make
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2020-07-08 18:09:02 +0200
committerKarel Kočí <cynerd@email.cz>2020-07-08 18:09:02 +0200
commit7ed748910f1927a55abdb52511c94f79435d9cd7 (patch)
tree0f3e8e294edec9f337bff2333e4d72b5d291bcfd /scripts/force-make
parent09e0b373a617b4c6cffbbcf63e62e393159da44d (diff)
downloadlaminar-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-xscripts/force-make82
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[@]}"