03cbdf3b574263dcad924dcc87f48160d43a2efc
[m6w6/btr] / share / btr / btr.sh
1 #!/bin/sh
2
3 function btr-help {
4 btr-banner
5 echo
6 echo "Usage: $(basename $0) [-hyvqcC] [<options>]"
7 echo
8 echo " -h, --help Display this help"
9 echo " -y, --yes Always assume yes"
10 echo " -v, --verbose Be more verbose"
11 echo " -q, --quiet Be more quiet"
12 echo " -c, --clean Clean build"
13 echo " -C, --vcsclean Clean repo/branch"
14 echo
15 echo " Options:"
16 echo " -f, --config=<file> Read configuration from a file"
17 echo " -s, --source=<rules> Use the specified source ruleset"
18 echo " -b, --build=<rules> Use the specified build ruleset"
19 echo " -r, --report=<rules> Use the specifued report ruleset"
20 echo " -T, --test=<args> Provide test runner arguments"
21 echo " -B, --branch=<branch> Checkout this branch"
22 echo " -D, --directory=<directory> Use this directory as work root"
23 echo " -S, --suffix=<suffix> Append suffix to the build name"
24 echo
25 echo " Rules format:"
26 echo " type=argument e.g: git=git@github.com:m6w6/btr.git"
27 echo " irc=irc://btr@chat.freenode.org/#btr"
28 echo " mail=\"-c copy@to rcpt@to\""
29 echo " notify-send=\"-u low\""
30 echo
31 echo " Note though, that some rules do not use any argument."
32 echo
33 echo " Rulesets:"
34 for ruleset in source build report
35 do
36 printf " %10s: %s\n" $ruleset \
37 "$(find "$BTR_LIBDIR/$ruleset" -name '*.mk' -exec basename {} .mk \; | sort | xargs)"
38 done
39 echo
40 exit
41 }
42 export -f btr-help
43
44 function btr-parseopts {
45 local shortoptions="hvqycCf:T:B:D:S:s:b:r:"
46 local longoptions="help,verbose,quiet,yes,clean,vcsclean,config:,test:,branch:,directory:,suffix:,source:,build:,report:"
47 local options=$(getopt \
48 --options "$shortoptions" \
49 --longoptions "$longoptions" \
50 -- "$@" \
51 )
52
53 if test $? -ne 0 ; then
54 help
55 fi
56
57 eval set -- "$options"
58
59 while test $# -gt 0
60 do
61 case "$1" in
62 -h|--help)
63 btr-help
64 ;;
65 -v|--verbose)
66 BTR_QUIET=false
67 BTR_VERBOSE=true
68 ;;
69 -q|--quiet)
70 BTR_QUIET=true
71 BTR_VERBOSE=false
72 ;;
73 -y|--yes)
74 BTR_FORCEYES=true
75 ;;
76 -c|--clean)
77 BTR_BUILD_CLEAN=true
78 ;;
79 -C|--vcsclean)
80 BTR_SOURCE_CLEAN=true
81 ;;
82 ####
83 -f|--config)
84 source "$2"
85 shift
86 ;;
87 ####
88 -B|--branch)
89 BTR_BRANCH="$2"
90 shift
91 ;;
92 -D|--directory)
93 BTR_RUNDIR="$2"
94 shift
95 ;;
96 -S|--suffix)
97 BTR_SUFFIX="$2"
98 shift
99 ;;
100 -T|--test)
101 BTR_TEST_ARGS="$2"
102 shift
103 ;;
104 ####
105 -s|--source)
106 case "$2" in
107 git*)
108 test -z "$BTR_BRANCH" && BTR_BRANCH=master
109 ;;
110 svn*)
111 test -z "$BTR_BRANCH" && BTR_BRANCH=trunk
112 ;;
113 cvs*)
114 test -z "$BTR_BRANCH" && BTR_BRANCH=HEAD
115 ;;
116 esac
117 BTR_SOURCE_RULES="$(cut -d= -f1 <<<$2)"
118 BTR_SOURCE_ARGS="$(cut -s -d= -f2- <<<$2)"
119 shift
120 ;;
121 -b|--build)
122 BTR_BUILD_RULES="$(cut -d= -f1 <<<$2)"
123 BTR_BUILD_ARGS="$(cut -s -d= -f2- <<<$2)"
124 shift
125 ;;
126 -r|--report)
127 BTR_REPORT_RULES="$(cut -d= -f1 <<<$2)"
128 BTR_REPORT_ARGS="$(cut -s -d= -f2- <<<$2)"
129 shift
130 ;;
131 ####
132 --)
133 # legacy
134 if test "$2"
135 then
136 BTR_SOURCE_ARGS="$2"
137 fi
138 shift
139 ;;
140 esac
141 shift
142 done
143 }
144 export -f btr-parseopts
145
146 function btr-setup {
147 if test -z "$BTR_SOURCE_RULES" -o -z "$BTR_BUILD_RULES" -o -z "$BTR_REPORT_RULES"
148 then
149 btr-help
150 fi
151
152 btr-setup-verbosity true
153 btr-setup-rundir
154
155 export BTR_SOURCE_RULES BTR_BUILD_RULES BTR_REPORT_RULES
156 test -z "$BTR_SOURCE_ARGS" || export BTR_SOURCE_ARGS
157 test -z "$BTR_SOURCE_CLEAN" || export BTR_SOURCE_CLEAN
158 test -z "$BTR_BUILD_ARGS" || export BTR_BUILD_ARGS
159 test -z "$BTR_BUILD_CLEAN" || export BTR_BUILD_CLEAN
160 test -z "$BTR_TEST_ARGS" || export BTR_TEST_ARGS
161 test -z "$BTR_REPORT_ARGS" || export BTR_REPORT_ARGS
162 BTR_REPO=$(basename $(sed -re 's~^.*[/:#]~~' <<<"$BTR_SOURCE_ARGS") .git)
163 BTR_SAFE_BRANCH=$(tr ":/" "_" <<<$(basename "$BTR_BRANCH"))
164 export BTR_REPO BTR_BRANCH BTR_SAFE_BRANCH
165
166 if test -z "$BTR_SUFFIX"
167 then
168 export BTR_BUILD="$BTR_REPO@$BTR_SAFE_BRANCH"
169 else
170 export BTR_BUILD="$BTR_REPO@$BTR_SAFE_BRANCH-$BTR_SUFFIX"
171 fi
172
173 export BTR_REPO_DIR="$BTR_REPO"
174 export BTR_BRANCH_DIR="$BTR_BUILD/checkout"
175 export BTR_BUILD_DIR="$BTR_BUILD/build"
176 export BTR_LOG_DIR="$BTR_BUILD/log"
177 export BTR_CONFIG_REPORT="$BTR_LOG_DIR/config@$DATE.log"
178 export BTR_BUILD_REPORT="$BTR_LOG_DIR/build@$DATE.log"
179 export BTR_TEST_REPORT="$BTR_LOG_DIR/test@$DATE.log"
180 export BTR_LAST_REPORT=$(basename $(ls -t "$BTR_RUNDIR/$BTR_LOG_DIR/test@"* 2>/dev/null | head -n1) 2>/dev/null)
181 export BTR_REPORT="$BTR_LOG_DIR/report@$DATE.log"
182 }
183 export -f btr-setup
184
185 function btr-conf-dump {
186 echo "BTR_QUIET='$BTR_QUIET'"
187 echo "BTR_VERBOSE='$BTR_VEROSE'"
188 echo "BTR_FORCEYES='$BTR_FORCEYES'"
189 echo "BTR_BRANCH='$BTR_BRANCH'"
190 echo "BTR_SUFFIX='$BTR_SUFFIX'"
191 echo "BTR_RUNDIR='$BTR_RUNDIR'"
192 echo "BTR_SOURCE_RULES='$BTR_SOURCE_RULES'"
193 test ${BTR_SOURCE_ARGS+defined} && echo "BTR_SOURCE_ARGS='$BTR_SOURCE_ARGS'"
194 test ${BTR_SOURC_CLEAN+defined} && echo "BTR_SOURCE_CLEAN='$BTR_SOURCE_CLEAN'"
195 echo "BTR_BUILD_RULES='$BTR_BUILD_RULES'"
196 test ${BTR_BUILD_ARGS+defined} && echo "BTR_BUILD_ARGS='$BTR_BUILD_ARGS'"
197 test ${BTR_BUILD_CLEAN+defined} && echo "BTR_BUILD_CLEAN='$BTR_BUILD_CLEAN'"
198 test ${BTR_TEST_ARGS+defined} && echo "BTR_TEST_ARGS='$BTR_TEST_ARGS'"
199 echo "BTR_REPORT_RULES='$BTR_REPORT_RULES'"
200 test ${BTR_REPORT_ARGS+defined} && echo "BTR_REPORT_ARGS='$BTR_REPORT_ARGS'"
201 }
202 export -f btr-conf-dump
203
204 function btr-conf-show {
205 echo
206 echo "# Configuration:"
207 echo
208 echo "BTR_RUNDIR = $BTR_RUNDIR"
209 echo "BTR_BINDIR = $BTR_BINDIR"
210 echo "BTR_LIBDIR = $BTR_LIBDIR"
211 echo
212 echo "BTR_SOURCE_RULES = $BTR_SOURCE_RULES"
213 echo "BTR_SOURCE_ARGS = $BTR_SOURCE_ARGS"
214 echo "BTR_SOURCE_CLEAN = $BTR_SOURCE_CLEAN"
215 echo "BTR_BUILD_RULES = $BTR_BUILD_RULES"
216 echo "BTR_BUILD_ARGS = $BTR_BUILD_ARGS"
217 echo "BTR_BUILD_CLEAN = $BTR_BUILD_CLEAN"
218 echo "BTR_TEST_ARGS = $BTR_TEST_ARGS"
219 echo "BTR_REPORT_RULES = $BTR_REPORT_RULES"
220 echo "BTR_REPORT_ARGS = $BTR_REPORT_ARGS"
221 echo "BTR_REPO = $BTR_REPO"
222 echo "BTR_BRANCH = $BTR_BRANCH"
223 echo "BTR_SAFE_BRANCH = $BTR_SAFE_BRANCH"
224 echo "BTR_BUILD = $BTR_BUILD"
225 echo
226 echo "BTR_REPO_DIR = $BTR_REPO_DIR"
227 echo "BTR_BRANCH_DIR = $BTR_BRANCH_DIR"
228 echo "BTR_BUILD_DIR = $BTR_BUILD_DIR"
229 echo "BTR_LOG_DIR = $BTR_LOG_DIR"
230 echo "BTR_CONFIG_REPORT = $BTR_CONFIG_REPORT"
231 echo "BTR_BUILD_REPORT = $BTR_BUILD_REPORT"
232 echo "BTR_TEST_REPORT = $BTR_TEST_REPORT"
233 echo "BTR_LAST_REPORT = $BTR_LAST_REPORT"
234 echo
235 }
236 export -f btr-conf-show
237
238 function btr-run {
239 set -e
240 make -e $BTR_SILENT_FLAG -C $BTR_RUNDIR -f $BTR_LIBDIR/source/$BTR_SOURCE_RULES.mk
241 make -e $BTR_SILENT_FLAG -C $BTR_RUNDIR -f $BTR_LIBDIR/build/$BTR_BUILD_RULES.mk
242 make -e $BTR_SILENT_FLAG -C $BTR_RUNDIR -f $BTR_LIBDIR/report/$BTR_REPORT_RULES.mk
243 set +e
244 }
245 export -f btr-run
246
247 # vim: noet