home · contact · privacy
Replace make build system with redo, serve erlehmann's redo as fallback.
[plomrogue] / build / redo_scripts / redo
1 #!/bin/sh
2 # redo – bourne shell implementation of DJB redo
3 # Copyright © 2014  Nils Dagsson Moskopp (erlehmann)
4
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License as
7 # published by the Free Software Foundation, either version 3 of the
8 # License, or (at your option) any later version.
9
10 # Dieses Programm hat das Ziel, die Medienkompetenz der Leser zu
11 # steigern. Gelegentlich packe ich sogar einen handfesten Buffer
12 # Overflow oder eine Format String Vulnerability zwischen die anderen
13 # Codezeilen und schreibe das auch nicht dran.
14
15 set +e
16
17 bold=""
18 green=""
19 plain=""
20 red=""
21 if [ -n "$TERM" -a "$TERM" != "dumb" ] && tty <&2 >/dev/null 2>&1; then
22   bold="$(printf '\033[1m')"
23   green="$(printf '\033[32m')"
24   plain="$(printf '\033[m')"
25   red="$(printf '\033[31m')"
26 fi
27 export bold green plain red
28
29 for argument; do
30   if [ "$argument" = "-d" ] || [ "$argument" = "--debug" ]; then
31     export REDO_DEBUG='1'
32   elif [ "$argument" = "-h" ] || [ "$argument" = "--help" ]; then
33     cat <<EOF >&2
34 Usage: redo [OPTIONS] [TARGETS...]
35
36   -d, --debug          print dependency checks as they happen
37   -h, --help           print usage instructions and exit
38   -x, --xtrace         print commands as they are executed (variables expanded)
39
40 Report bugs to <nils+redo@dieweltistgarnichtso.net>.
41 EOF
42     exit 0
43   elif [ "$argument" = "-s" ] || [ "$argument" = "--shuffle" ]; then
44     export REDO_SHUFFLE='1'
45   elif [ "$argument" = "-x" ] || [ "$argument" = "--xtrace" ]; then
46     export REDO_XTRACE='1'
47   else
48     REDO_HAS_TARGETS='1'
49     export REDO_TARGET=''
50     # If this is build directory, create .redo database directory.
51     if [ -z "$REDO_BASE" ]; then
52       export REDO_BASE="$(pwd)"
53       export REDO_DIR="$REDO_BASE/.redo"
54       mkdir -p $REDO_DIR
55     fi
56     argument_abspath="$(readlink -f "$argument")"
57     (
58       echo '0' > "$REDO_DIR/$argument_abspath".ctime
59       echo '0' > "$REDO_DIR/$argument_abspath".md5sum
60     ) 2>/dev/null
61     redo-ifchange "$argument"
62     [ "$?" = 0 ] || exit 1
63   fi
64 done
65
66 [ "$REDO_HAS_TARGETS" = "1" ] || exec redo all