Remove pandora
[awesomized/libmemcached] / bootstrap.sh
1 #!/bin/bash
2 #
3 # Copyright (C) 2012 Brian Aker
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
8 # met:
9 #
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 #
13 # * Redistributions in binary form must reproduce the above
14 # copyright notice, this list of conditions and the following disclaimer
15 # in the documentation and/or other materials provided with the
16 # distribution.
17 #
18 # * The names of its contributors may not be used to endorse or
19 # promote products derived from this software without specific prior
20 # written permission.
21 #
22 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
34 die() { echo "$@"; exit 1; }
35
36 command_exists () {
37 type "$1" &> /dev/null ;
38 }
39
40 determine_target_platform () {
41 if [ $(uname) = "Darwin" ]; then
42 PLATFORM="darwin"
43 elif [[ -f "/etc/fedora-release" ]]; then
44 PLATFORM="fedora"
45 elif [[ -f "/etc/lsb-release" ]]; then
46 debian_version=`cat /etc/lsb-release | grep DISTRIB_CODENAME | awk -F= ' { print $2 } '`
47 case $debian_version in
48 precise)
49 PLATFORM="precise"
50 ;;
51 *)
52 ;;
53 esac
54 fi
55
56 PLATFORM_VERSION=`uname -r`
57
58 if [ "$PLATFORM" == "unknown" ]; then
59 PLATFORM=`uname -s`
60 fi
61
62 TARGET_PLATFORM="$PLATFORM-$PLATFORM_VERSION"
63 }
64
65 configure_target_platform () {
66 # If we are executing on OSX use CLANG, otherwise only use it if we find it in the ENV
67 case $TARGET_PLATFORM in
68 darwin-*)
69 CC=clang CXX=clang++ ./configure $DEBUG_ARG $ASSERT_ARG $PREFIX_ARG || die "Cannot execute CC=clang CXX=clang++ configure $DEBUG_ARG $ASSERT_ARG $PREFIX_ARG"
70 ;;
71 *)
72 ./configure $DEBUG_ARG $ASSERT_ARG $PREFIX_ARG || die "Cannot execute configure $DEBUG_ARG $ASSERT_ARG $PREFIX_ARG"
73 ;;
74 esac
75 }
76
77 setup_gdb_command () {
78 GDB_TMPFILE=$(mktemp /tmp/gdb.XXXXXXXXXX)
79 echo "set logging overwrite on" > $GDB_TMPFILE
80 echo "set logging on" >> $GDB_TMPFILE
81 echo "set environment LIBTEST_IN_GDB=1" >> $GDB_TMPFILE
82 echo "run" >> $GDB_TMPFILE
83 echo "thread apply all bt" >> $GDB_TMPFILE
84 echo "quit" >> $GDB_TMPFILE
85 GDB_COMMAND="gdb -f -batch -x $GDB_TMPFILE"
86 }
87
88 setup_valgrind_command () {
89 VALGRIND_COMMAND="valgrind --error-exitcode=1 --leak-check=yes --show-reachable=yes --track-fds=yes --malloc-fill=A5 --free-fill=DE"
90 }
91
92 make_valgrind () {
93 if [ "$PLATFORM" = "darwin" ]; then
94 make_darwin_malloc
95 else
96 if command_exists valgrind; then
97
98 if [ -n "$TESTS_ENVIRONMENT" ]; then
99 OLD_TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT
100 export -n TESTS_ENVIRONMENT
101 fi
102
103 # Set ENV VALGRIND_COMMAND
104 if [ -z "$VALGRIND_COMMAND" ]; then
105 setup_valgrind_command
106 fi
107
108 if [[ -f libtool ]]; then
109 TESTS_ENVIRONMENT="$LIBTOOL_COMMAND $VALGRIND_COMMAND"
110 else
111 TESTS_ENVIRONMENT="$VALGRIND_COMMAND"
112 fi
113 export TESTS_ENVIRONMENT
114
115 export TESTS_ENVIRONMENT
116 make_target check
117 export -n TESTS_ENVIRONMENT
118
119 if [ -n "$OLD_TESTS_ENVIRONMENT" ]; then
120 TESTS_ENVIRONMENT=$OLD_TESTS_ENVIRONMENT
121 export TESTS_ENVIRONMENT
122 fi
123
124 fi
125 fi
126 }
127
128 make_install_system () {
129 make_distclean
130
131 INSTALL_LOCATION=$(mktemp -d /tmp/XXXXXXXXXX)
132 PREFIX_ARG="--prefix=$INSTALL_LOCATION"
133
134 configure_target_platform
135
136 if [ -n "$TESTS_ENVIRONMENT" ]; then
137 OLD_TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT
138 export -n TESTS_ENVIRONMENT
139 fi
140
141 make_target all
142
143 make_target "install"
144
145 make_target "installcheck"
146
147 make_target "uninstall"
148
149 export -n TESTS_ENVIRONMENT
150
151 if [ -n "$OLD_TESTS_ENVIRONMENT" ]; then
152 TESTS_ENVIRONMENT=$OLD_TESTS_ENVIRONMENT
153 export TESTS_ENVIRONMENT
154 fi
155
156 rm -r -f $INSTALL_LOCATION
157 }
158
159 make_darwin_malloc () {
160 MallocGuardEdges=1
161 MallocErrorAbort=1
162 MallocScribble=1
163 export MallocGuardEdges MallocErrorAbort MallocScribble
164 make_check
165 export -n MallocGuardEdges MallocErrorAbort MallocScribble
166 }
167
168 make_local () {
169 case $TARGET_PLATFORM in
170 darwin-*)
171 make_distcheck
172 make_valgrind
173 ;;
174 *)
175 make_target_platform
176 ;;
177 esac
178 }
179
180 make_target_platform () {
181 case $TARGET_PLATFORM in
182 fedora-*)
183 # make rpm includes "make distcheck"
184 if [ -f rpm.am ]; then
185 make_rpm
186 else
187 make_distcheck
188 fi
189 ;;
190 precise-*)
191 make_distcheck
192 make_valgrind
193 make_gdb
194 ;;
195 unknown-*)
196 make_all
197 ;;
198 *)
199 make_all
200 ;;
201 esac
202
203 make_install_system
204
205 make_distclean
206 }
207
208 make_gdb () {
209 if command_exists gdb; then
210
211 if [ -n "$TESTS_ENVIRONMENT" ]; then
212 OLD_TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT
213 export -n TESTS_ENVIRONMENT
214 fi
215
216 # Set ENV GDB_COMMAND
217 if [ -z "$GDB_COMMAND" ]; then
218 setup_gdb_command
219 fi
220
221 if [[ -f libtool ]]; then
222 TESTS_ENVIRONMENT="$LIBTOOL_COMMAND $GDB_COMMAND"
223 else
224 TESTS_ENVIRONMENT="$GDB_COMMAND"
225 fi
226
227 export TESTS_ENVIRONMENT
228 make_target check
229 export -n TESTS_ENVIRONMENT
230
231 MAKE_TARGET=
232 if [[ -f gdb.txt ]]; then
233 rm -f gdb.txt
234 fi
235
236 if [ -n "$OLD_TESTS_ENVIRONMENT" ]; then
237 TESTS_ENVIRONMENT=$OLD_TESTS_ENVIRONMENT
238 export TESTS_ENVIRONMENT
239 fi
240 fi
241 }
242
243 make_target () {
244 if [ -n "$MAKE_TARGET" ]; then
245 OLD_MAKE_TARGET=$MAKE_TARGET
246 fi
247
248 MAKE_TARGET=$1
249 run $MAKE $MAKE_TARGET || die "Cannot execute $MAKE $MAKE_TARGET"
250
251 if [ -n "$MAKE_TARGET" ]; then
252 MAKE_TARGET=$OLD_MAKE_TARGET
253 fi
254 }
255
256 make_distcheck () {
257 make_target distcheck
258 }
259
260 make_rpm () {
261 make_target "rpm"
262 }
263
264 make_distclean () {
265 make_target distclean
266 }
267
268 make_maintainer_clean () {
269 make_target maintainer-clean
270 }
271
272 make_check () {
273 make_target check
274 }
275
276 make_all () {
277 make_target all
278 }
279
280 run() {
281 if [ -n "$TESTS_ENVIRONMENT" ]; then
282 echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
283 fi
284 echo "\`$@' $ARGS"
285 $@ $ARGS
286 }
287
288 parse_command_line_options() {
289
290 if ! options=$(getopt -o c --long configure -n 'bootstrap' -- "$@"); then
291 exit 1
292 fi
293
294 eval set -- "$options"
295
296 while [ $# -gt 0 ]; do
297 case $1 in
298 -c | --configure )
299 CONFIGURE_OPTION="yes" ; shift;;
300 -- )
301 shift; break;;
302 -* )
303 echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
304 *)
305 break;;
306 esac
307 done
308 }
309
310
311
312 bootstrap() {
313 parse_command_line_options $@
314 determine_target_platform
315
316 DEFAULT_DEV_AUTORECONF_FLAGS="--install --force --verbose -Wall -Werror"
317 DEFAULT_AUTORECONF_FLAGS="--install --force --verbose -Wall"
318
319 if [ -d .git ]; then
320 AUTORECONF_FLAGS=$DEFAULT_DEV_AUTORECONF_FLAGS
321 VCS_CHECKOUT=git
322 elif [ -d .bzr ]; then
323 AUTORECONF_FLAGS=$DEFAULT_DEV_AUTORECONF_FLAGS
324 VCS_CHECKOUT=bzr
325 elif [ -d .svn ]; then
326 AUTORECONF_FLAGS=$DEFAULT_DEV_AUTORECONF_FLAGS
327 VCS_CHECKOUT=svn
328 elif [ -d .hg ]; then
329 AUTORECONF_FLAGS=$DEFAULT_DEV_AUTORECONF_FLAGS
330 VCS_CHECKOUT=hg
331 else
332 AUTORECONF_FLAGS=$DEFAULT_AUTORECONF_FLAGS
333 fi
334
335 if [ -z "$LIBTOOLIZE_FLAGS" ]; then
336 LIBTOOLIZE_FLAGS="--force --verbose --install"
337 fi
338
339 if [ "$PLATFORM" = "darwin" ]; then
340 LIBTOOLIZE=glibtoolize
341 elif [ -z "$LIBTOOLIZE" ]; then
342 LIBTOOLIZE=libtoolize
343 fi
344
345 AUTORECONF=autoreconf
346
347 # Set ENV DEBUG in order to enable debugging
348 if [ -n "$DEBUG" ]; then
349 DEBUG_ARG="--enable-debug"
350 fi
351
352 # Set ENV ASSERT in order to enable assert
353 if [ -n "$ASSERT" ]; then
354 ASSERT_ARG="--enable-assert"
355 fi
356
357 # Set ENV MAKE in order to override "make"
358 if [ -z "$MAKE" ]; then
359 MAKE="make"
360 fi
361
362 # Set ENV PREFIX in order to set --prefix for ./configure
363 if [ -n "$PREFIX" ]; then
364 PREFIX_ARG="--prefix=$PREFIX"
365 fi
366
367 if [ -f Makefile ]; then
368 make_maintainer_clean
369 rm -f Makefile.in
370 rm -f aminclude.am
371 fi
372
373 run $LIBTOOLIZE $LIBTOOLIZE_FLAGS || die "Cannot execute $LIBTOOLIZE $LIBTOOLIZE_FLAGS"
374 run $AUTORECONF $AUTORECONF_FLAGS || die "Cannot execute $AUTORECONF $AUTORECONF_FLAGS"
375
376 configure_target_platform
377
378 if [ "$CONFIGURE_OPTION" == "yes" ]; then
379 exit
380 fi
381
382 # Backwards compatibility
383 if [ -n "$VALGRIND" ]; then
384 MAKE_TARGET="valgrind"
385 fi
386
387 # Setup LIBTOOL_COMMAND if we need it
388 if [[ -f libtool ]]; then
389 LIBTOOL_COMMAND="./libtool --mode=execute"
390 fi
391
392 if [ -f docs/conf.py ]; then
393 if command_exists sphinx-build; then
394 make_target "man"
395 fi
396 fi
397
398 # If we are running under Jenkins we predetermine what tests we will run against
399 if [[ -n "$JENKINS_HOME" ]]; then
400 make_target_platform
401 elif [ "$MAKE_TARGET" == "gdb" ]; then
402 make_gdb
403 elif [ "$MAKE_TARGET" == "valgrind" ]; then
404 make_valgrind
405 elif [ "$MAKE_TARGET" == "jenkins" ]; then
406 # Set ENV MAKE_TARGET in order to override default of "all"
407 make_target_platform
408 elif [ -z "$MAKE_TARGET" ]; then
409 make_local
410 else
411 make_target $MAKE_TARGET
412 fi
413 }
414
415 export -n VCS_CHECKOUT
416 export -n PLATFORM
417 export -n TARGET_PLATFORM
418 CONFIGURE_OPTION=no
419 VCS_CHECKOUT=
420 PLATFORM=unknown
421 TARGET_PLATFORM=unknown
422
423 bootstrap $@