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 on" > $GDB_TMPFILE
80 echo "set logging overwrite 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_J $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
277 if [ -n "$TESTS_ENVIRONMENT" ]; then
278 echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
284 parse_command_line_options
() {
286 if ! options
=$
(getopt
-o c
--long configure
-n 'bootstrap' -- "$@"); then
290 eval set -- "$options"
292 while [ $# -gt 0 ]; do
295 CONFIGURE_OPTION
="yes" ; shift;;
299 echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
309 parse_command_line_options $@
310 determine_target_platform
313 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
315 elif [ -d .bzr
]; then
316 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
318 elif [ -d .svn
]; then
319 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
321 elif [ -d .hg
]; then
322 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
325 AUTORECONF_FLAGS
="--install --force --verbose -Wall"
328 if [ -z "$LIBTOOLIZE_FLAGS" ]; then
329 LIBTOOLIZE_FLAGS
="--force --verbose"
332 if [ "$PLATFORM" = "darwin" ]; then
333 LIBTOOLIZE
=glibtoolize
334 elif [ -z "$LIBTOOLIZE" ]; then
335 LIBTOOLIZE
=libtoolize
338 AUTORECONF
=autoreconf
340 # Set ENV DEBUG in order to enable debugging
341 if [ -n "$DEBUG" ]; then
342 DEBUG_ARG
="--enable-debug"
345 # Set ENV ASSERT in order to enable assert
346 if [ -n "$ASSERT" ]; then
347 ASSERT_ARG
="--enable-assert"
350 # Set ENV MAKE in order to override "make"
351 if [ -z "$MAKE" ]; then
355 # Set ENV MAKE_J in order to override "-j2"
356 if [ -z "$MAKE_J" ]; then
360 # Set ENV PREFIX in order to set --prefix for ./configure
361 if [ -n "$PREFIX" ]; then
362 PREFIX_ARG
="--prefix=$PREFIX"
365 if [ -f Makefile
]; then
366 $MAKE $MAKE_J maintainer-clean
369 run
$LIBTOOLIZE $LIBTOOLIZE_FLAGS || die
"Cannot execute $LIBTOOLIZE $LIBTOOLIZE_FLAGS"
370 run
$AUTORECONF $AUTORECONF_FLAGS || die
"Cannot execute $AUTORECONF $AUTORECONF_FLAGS"
372 configure_target_platform
374 if [ "$CONFIGURE_OPTION" == "yes" ]; then
378 # Backwards compatibility
379 if [ -n "$VALGRIND" ]; then
380 MAKE_TARGET
="valgrind"
383 # Setup LIBTOOL_COMMAND if we need it
384 if [[ -f libtool
]]; then
385 LIBTOOL_COMMAND
="./libtool --mode=execute"
388 if [ -f docs
/conf.py
]; then
389 if command_exists sphinx-build
; then
394 # If we are running under Jenkins we predetermine what tests we will run against
395 if [[ -n "$JENKINS_HOME" ]]; then
397 elif [ "$MAKE_TARGET" == "gdb" ]; then
399 elif [ "$MAKE_TARGET" == "valgrind" ]; then
401 elif [ "$MAKE_TARGET" == "jenkins" ]; then
402 # Set ENV MAKE_TARGET in order to override default of "all"
404 elif [ -z "$MAKE_TARGET" ]; then
407 make_target
$MAKE_TARGET
411 export -n VCS_CHECKOUT
413 export -n TARGET_PLATFORM
417 TARGET_PLATFORM
=unknown