3 # Copyright (C) 2012 Brian Aker
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
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
18 # * The names of its contributors may not be used to endorse or
19 # promote products derived from this software without specific prior
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.
34 die
() { echo "$@"; exit 1; }
37 type "$1" &> /dev
/null
;
40 determine_target_platform
() {
41 if [ $
(uname
) = "Darwin" ]; then
43 elif [[ -f "/etc/fedora-release" ]]; then
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
56 PLATFORM_VERSION
=`uname -r`
58 if [ "$PLATFORM" == "unknown" ]; then
62 TARGET_PLATFORM
="$PLATFORM-$PLATFORM_VERSION"
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
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"
72 .
/configure
$DEBUG_ARG $ASSERT_ARG $PREFIX_ARG || die
"Cannot execute configure $DEBUG_ARG $ASSERT_ARG $PREFIX_ARG"
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"
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"
93 if [ "$PLATFORM" = "darwin" ]; then
96 if command_exists valgrind
; then
98 if [ -n "$TESTS_ENVIRONMENT" ]; then
99 OLD_TESTS_ENVIRONMENT
=$TESTS_ENVIRONMENT
100 export -n TESTS_ENVIRONMENT
103 # Set ENV VALGRIND_COMMAND
104 if [ -z "$VALGRIND_COMMAND" ]; then
105 setup_valgrind_command
108 if [[ -f libtool
]]; then
109 TESTS_ENVIRONMENT
="$LIBTOOL_COMMAND $VALGRIND_COMMAND"
111 TESTS_ENVIRONMENT
="$VALGRIND_COMMAND"
113 export TESTS_ENVIRONMENT
115 export TESTS_ENVIRONMENT
117 export -n TESTS_ENVIRONMENT
119 if [ -n "$OLD_TESTS_ENVIRONMENT" ]; then
120 TESTS_ENVIRONMENT
=$OLD_TESTS_ENVIRONMENT
121 export TESTS_ENVIRONMENT
128 make_install_system
() {
131 INSTALL_LOCATION
=$
(mktemp
-d /tmp
/XXXXXXXXXX
)
132 PREFIX_ARG
="--prefix=$INSTALL_LOCATION"
134 configure_target_platform
136 if [ -n "$TESTS_ENVIRONMENT" ]; then
137 OLD_TESTS_ENVIRONMENT
=$TESTS_ENVIRONMENT
138 export -n TESTS_ENVIRONMENT
143 make_target
"install"
145 make_target
"installcheck"
147 make_target
"uninstall"
149 export -n TESTS_ENVIRONMENT
151 if [ -n "$OLD_TESTS_ENVIRONMENT" ]; then
152 TESTS_ENVIRONMENT
=$OLD_TESTS_ENVIRONMENT
153 export TESTS_ENVIRONMENT
156 rm -r -f $INSTALL_LOCATION
159 make_darwin_malloc
() {
163 export MallocGuardEdges MallocErrorAbort MallocScribble
165 export -n MallocGuardEdges MallocErrorAbort MallocScribble
169 case $TARGET_PLATFORM in
180 make_target_platform
() {
181 case $TARGET_PLATFORM in
183 # make rpm includes "make distcheck"
184 if [ -f rpm.am
]; then
209 if command_exists gdb
; then
211 if [ -n "$TESTS_ENVIRONMENT" ]; then
212 OLD_TESTS_ENVIRONMENT
=$TESTS_ENVIRONMENT
213 export -n TESTS_ENVIRONMENT
216 # Set ENV GDB_COMMAND
217 if [ -z "$GDB_COMMAND" ]; then
221 if [[ -f libtool
]]; then
222 TESTS_ENVIRONMENT
="$LIBTOOL_COMMAND $GDB_COMMAND"
224 TESTS_ENVIRONMENT
="$GDB_COMMAND"
227 export TESTS_ENVIRONMENT
229 export -n TESTS_ENVIRONMENT
232 if [[ -f gdb.txt
]]; then
236 if [ -n "$OLD_TESTS_ENVIRONMENT" ]; then
237 TESTS_ENVIRONMENT
=$OLD_TESTS_ENVIRONMENT
238 export TESTS_ENVIRONMENT
244 if [ -n "$MAKE_TARGET" ]; then
245 OLD_MAKE_TARGET
=$MAKE_TARGET
249 run
$MAKE $MAKE_TARGET || die
"Cannot execute $MAKE $MAKE_TARGET"
251 if [ -n "$MAKE_TARGET" ]; then
252 MAKE_TARGET
=$OLD_MAKE_TARGET
257 make_target distcheck
265 make_target distclean
268 make_maintainer_clean
() {
269 make_target maintainer-clean
281 if [ -n "$TESTS_ENVIRONMENT" ]; then
282 echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
288 parse_command_line_options
() {
290 if ! options
=$
(getopt
-o c
--long configure
-n 'bootstrap' -- "$@"); then
294 eval set -- "$options"
296 while [ $# -gt 0 ]; do
299 CONFIGURE_OPTION
="yes" ; shift;;
303 echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
313 parse_command_line_options $@
314 determine_target_platform
316 DEFAULT_DEV_AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
317 DEFAULT_AUTORECONF_FLAGS
="--install --force --verbose -Wall"
320 AUTORECONF_FLAGS
=$DEFAULT_DEV_AUTORECONF_FLAGS
322 elif [ -d .bzr
]; then
323 AUTORECONF_FLAGS
=$DEFAULT_DEV_AUTORECONF_FLAGS
325 elif [ -d .svn
]; then
326 AUTORECONF_FLAGS
=$DEFAULT_DEV_AUTORECONF_FLAGS
328 elif [ -d .hg
]; then
329 AUTORECONF_FLAGS
=$DEFAULT_DEV_AUTORECONF_FLAGS
332 AUTORECONF_FLAGS
=$DEFAULT_AUTORECONF_FLAGS
335 if [ -z "$LIBTOOLIZE_FLAGS" ]; then
336 LIBTOOLIZE_FLAGS
="--force --verbose --install"
339 if [ "$PLATFORM" = "darwin" ]; then
340 LIBTOOLIZE
=glibtoolize
341 elif [ -z "$LIBTOOLIZE" ]; then
342 LIBTOOLIZE
=libtoolize
345 AUTORECONF
=autoreconf
347 # Set ENV DEBUG in order to enable debugging
348 if [ -n "$DEBUG" ]; then
349 DEBUG_ARG
="--enable-debug"
352 # Set ENV ASSERT in order to enable assert
353 if [ -n "$ASSERT" ]; then
354 ASSERT_ARG
="--enable-assert"
357 # Set ENV MAKE in order to override "make"
358 if [ -z "$MAKE" ]; then
362 # Set ENV PREFIX in order to set --prefix for ./configure
363 if [ -n "$PREFIX" ]; then
364 PREFIX_ARG
="--prefix=$PREFIX"
367 if [ -f Makefile
]; then
368 make_maintainer_clean
373 run
$LIBTOOLIZE $LIBTOOLIZE_FLAGS || die
"Cannot execute $LIBTOOLIZE $LIBTOOLIZE_FLAGS"
374 run
$AUTORECONF $AUTORECONF_FLAGS || die
"Cannot execute $AUTORECONF $AUTORECONF_FLAGS"
376 configure_target_platform
378 if [ "$CONFIGURE_OPTION" == "yes" ]; then
382 # Backwards compatibility
383 if [ -n "$VALGRIND" ]; then
384 MAKE_TARGET
="valgrind"
387 # Setup LIBTOOL_COMMAND if we need it
388 if [[ -f libtool
]]; then
389 LIBTOOL_COMMAND
="./libtool --mode=execute"
392 if [ -f docs
/conf.py
]; then
393 if command_exists sphinx-build
; then
398 # If we are running under Jenkins we predetermine what tests we will run against
399 if [[ -n "$JENKINS_HOME" ]]; then
401 elif [ "$MAKE_TARGET" == "gdb" ]; then
403 elif [ "$MAKE_TARGET" == "valgrind" ]; then
405 elif [ "$MAKE_TARGET" == "jenkins" ]; then
406 # Set ENV MAKE_TARGET in order to override default of "all"
408 elif [ -z "$MAKE_TARGET" ]; then
411 make_target
$MAKE_TARGET
415 export -n VCS_CHECKOUT
417 export -n TARGET_PLATFORM
421 TARGET_PLATFORM
=unknown