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"
285 determine_target_platform
288 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
290 elif [ -d .bzr
]; then
291 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
293 elif [ -d .svn
]; then
294 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
296 elif [ -d .hg
]; then
297 AUTORECONF_FLAGS
="--install --force --verbose -Wall -Werror"
300 AUTORECONF_FLAGS
="--install --force --verbose -Wall"
303 if [ -z "$LIBTOOLIZE_FLAGS" ]; then
304 LIBTOOLIZE_FLAGS
="--force --verbose"
307 if [ "$PLATFORM" = "darwin" ]; then
308 LIBTOOLIZE
=glibtoolize
309 elif [ -z "$LIBTOOLIZE" ]; then
310 LIBTOOLIZE
=libtoolize
313 AUTORECONF
=autoreconf
315 # Set ENV DEBUG in order to enable debugging
316 if [ -n "$DEBUG" ]; then
317 DEBUG_ARG
="--enable-debug"
320 # Set ENV ASSERT in order to enable assert
321 if [ -n "$ASSERT" ]; then
322 ASSERT_ARG
="--enable-assert"
325 # Set ENV MAKE in order to override "make"
326 if [ -z "$MAKE" ]; then
330 # Set ENV MAKE_J in order to override "-j2"
331 if [ -z "$MAKE_J" ]; then
335 # Set ENV PREFIX in order to set --prefix for ./configure
336 if [ -n "$PREFIX" ]; then
337 PREFIX_ARG
="--prefix=$PREFIX"
340 if [ -f Makefile
]; then
341 $MAKE $MAKE_J maintainer-clean
344 run
$LIBTOOLIZE $LIBTOOLIZE_FLAGS || die
"Cannot execute $LIBTOOLIZE $LIBTOOLIZE_FLAGS"
345 run
$AUTORECONF $AUTORECONF_FLAGS || die
"Cannot execute $AUTORECONF $AUTORECONF_FLAGS"
347 configure_target_platform
349 # Backwards compatibility
350 if [ -n "$VALGRIND" ]; then
351 MAKE_TARGET
="valgrind"
354 # Setup LIBTOOL_COMMAND if we need it
355 if [[ -f libtool
]]; then
356 LIBTOOL_COMMAND
="./libtool --mode=execute"
359 if [ -f docs
/conf.py
]; then
360 if command_exists sphinx-build
; then
365 # If we are running under Jenkins we predetermine what tests we will run against
366 if [[ -n "$JENKINS_HOME" ]]; then
368 elif [ "$MAKE_TARGET" == "gdb" ]; then
370 elif [ "$MAKE_TARGET" == "valgrind" ]; then
372 elif [ "$MAKE_TARGET" == "jenkins" ]; then
373 # Set ENV MAKE_TARGET in order to override default of "all"
375 elif [ -z "$MAKE_TARGET" ]; then
378 make_target
$MAKE_TARGET
382 export -n VCS_CHECKOUT
384 export -n TARGET_PLATFORM
387 TARGET_PLATFORM
=unknown