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.
35 # Environment Variables that will influence the build:
46 command_not_found_handle
()
48 echo "Command not found: '$@'"
54 echo "$BASH_SOURCE:$BASH_LINENO: $@" >&2
60 local param_name
=\$
"$1"
61 local param_value
=`eval "expr \"$param_name\" "`
63 if [ -n "$param_value" ]; then
64 echo "$bash_source:$bash_lineno: assert($param_name) had value of "$param_value"" >&2
71 local param_name
=\$
"$1"
72 local param_value
=`eval "expr \"$param_name\" "`
74 if [ -z "$param_value" ]; then
75 echo "$bash_source:$bash_lineno: assert($param_name)" >&2
82 if [ ! -f "$1" ]; then
83 echo "$BASH_SOURCE:$BASH_LINENO: assert($1) does not exist: $2" >&2
91 echo "$BASH_SOURCE:$BASH_LINENO: assert($1) file exists: $2" >&2
98 if [ ! -f "$1" ]; then
99 echo "$BASH_SOURCE:$BASH_LINENO: assert($1) does not exist: $2" >&2
103 if [ ! -x "$1" ]; then
104 echo "$BASH_SOURCE:$BASH_LINENO: assert($1) exists but is not executable: $2" >&2
111 type "$1" &> /dev
/null
;
116 HOST_OS
="${UNAME_MACHINE_ARCH}-${VENDOR}-${VENDOR_DISTRIBUTION}-${VENDOR_RELEASE}-${UNAME_KERNEL}-${UNAME_KERNEL_RELEASE}"
119 echo "HOST_OS=$HOST_OS"
124 # Valid values are: darwin,fedora,rhel,ubuntu
125 set_VENDOR_DISTRIBUTION
()
127 local dist
=`echo "$1" | tr '[A-Z]' '[a-z]'`
130 VENDOR_DISTRIBUTION
='darwin'
133 VENDOR_DISTRIBUTION
='fedora'
136 VENDOR_DISTRIBUTION
='rhel'
139 VENDOR_DISTRIBUTION
='ubuntu'
142 VENDOR_DISTRIBUTION
='opensuse'
145 die
"attempt to set an invalid VENDOR_DISTRIBUTION=$dist"
150 set_VENDOR_RELEASE
()
152 local release
=`echo "$1" | tr '[A-Z]' '[a-z]'`
153 case "$VENDOR_DISTRIBUTION" in
155 VENDOR_RELEASE
='mountain'
158 VENDOR_RELEASE
="$release"
161 VENDOR_RELEASE
="$release"
164 VENDOR_RELEASE
="$release"
167 VENDOR_RELEASE
="$release"
170 die
"attempt to set VENDOR_RELEASE without setting VENDOR_DISTRIBUTION"
173 die
"attempt to set with an invalid VENDOR_DISTRIBUTION=$VENDOR_DISTRIBUTION"
179 # Valid values are: apple, redhat, centos, canonical
182 local vendor
=`echo "$1" | tr '[A-Z]' '[a-z]'`
201 die
"An attempt was made to set an invalid VENDOR=$_vendor"
205 set_VENDOR_DISTRIBUTION
$2
206 set_VENDOR_RELEASE
$3
209 determine_target_platform
()
211 UNAME_MACHINE_ARCH
=`(uname -m) 2>/dev/null` || UNAME_MACHINE_ARCH
=unknown
212 UNAME_KERNEL
=`(uname -s) 2>/dev/null` || UNAME_SYSTEM
=unknown
213 UNAME_KERNEL_RELEASE
=`(uname -r) 2>/dev/null` || UNAME_KERNEL_RELEASE
=unknown
215 if [[ $
(uname
) == 'Darwin' ]]; then
216 set_VENDOR
'apple' 'darwin' 'mountain'
217 elif [[ -f '/etc/fedora-release' ]]; then
218 local fedora_version
=`cat /etc/fedora-release | awk ' { print $3 } '`
219 set_VENDOR
'redhat' 'fedora' $fedora_version
220 if [[ "x$VENDOR_RELEASE" == 'x17' ]]; then
221 AUTORECONF_REBUILD_HOST
=true
223 elif [[ -f '/etc/centos-release' ]]; then
224 local centos_version
=`cat /etc/centos-release | awk ' { print $7 } '`
225 set_VENDOR
'centos' 'rhel' $centos_version
226 elif [[ -f '/etc/SuSE-release' ]]; then
227 local suse_distribution
=`head -1 /etc/SuSE-release | awk ' { print $1 } '`
228 local suse_version
=`head -1 /etc/SuSE-release | awk ' { print $2 } '`
229 set_VENDOR
'suse' $suse_distribution $suse_version
230 elif [[ -f '/etc/redhat-release' ]]; then
231 local rhel_version
=`cat /etc/redhat-release | awk ' { print $7 } '`
232 set_VENDOR
'redhat' 'rhel' $rhel_version
233 elif [[ -f '/etc/lsb-release' ]]; then
234 local debian_DISTRIB_ID
=`cat /etc/lsb-release | grep DISTRIB_ID | awk -F= ' { print $2 } '`
235 local debian_version
=`cat /etc/lsb-release | grep DISTRIB_CODENAME | awk -F= ' { print $2 } '`
236 set_VENDOR
'canonical' $debian_DISTRIB_ID $debian_version
237 if [[ "x$VENDOR_RELEASE" == 'xprecise' ]]; then
238 AUTORECONF_REBUILD_HOST
=true
247 # We will run autoreconf if we are required
248 run_autoreconf_if_required
250 # We always begin at the root of our build
252 die
"Programmer error, we entered run_configure with a stacked directory"
256 if [[ -n "$BUILD_DIR" ]]; then
259 safe_pushd
$BUILD_DIR
262 # Arguments for configure
265 # Set ENV DEBUG in order to enable debugging
267 CONFIGURE_ARG
='--enable-debug'
270 # Set ENV ASSERT in order to enable assert
271 if [[ -n "$ASSERT" ]]; then
273 ASSERT_ARG
='--enable-assert'
274 CONFIGURE_ARG
="$ASSERT_ARG $CONFIGURE_ARG"
277 # If we are executing on OSX use CLANG, otherwise only use it if we find it in the ENV
280 CC
=clang CXX
=clang
++ $top_srcdir/configure
$CONFIGURE_ARG || die
"Cannot execute CC=clang CXX=clang++ configure $CONFIGURE_ARG $PREFIX_ARG"
283 command_exists gcc44 || die
"Could not locate gcc44"
284 CC
=gcc44 CXX
=gcc44
$top_srcdir/configure
$CONFIGURE_ARG $PREFIX_ARG || die
"Cannot execute CC=gcc44 CXX=gcc44 configure $CONFIGURE_ARG $PREFIX_ARG"
287 $top_srcdir/configure
$CONFIGURE_ARG $PREFIX_ARG || die
"Cannot execute configure $CONFIGURE_ARG $PREFIX_ARG"
291 if [ ! -f 'Makefile' ]; then
292 die
"Programmer error, configure was run but no Makefile existed afterward"
296 setup_gdb_command
() {
297 GDB_TMPFILE
=$
(mktemp
/tmp
/gdb.XXXXXXXXXX
)
298 echo 'set logging overwrite on' > $GDB_TMPFILE
299 echo 'set logging on' >> $GDB_TMPFILE
300 echo 'set environment LIBTEST_IN_GDB=1' >> $GDB_TMPFILE
301 echo 'run' >> $GDB_TMPFILE
302 echo 'thread apply all bt' >> $GDB_TMPFILE
303 echo 'quit' >> $GDB_TMPFILE
304 GDB_COMMAND
="gdb -f -batch -x $GDB_TMPFILE"
307 setup_valgrind_command
() {
308 VALGRIND_PROGRAM
=`type -p valgrind`
309 if [[ -n "$VALGRIND_PROGRAM" ]]; then
310 VALGRIND_COMMAND
="$VALGRIND_PROGRAM --error-exitcode=1 --leak-check=yes --show-reachable=yes --track-fds=yes --malloc-fill=A5 --free-fill=DE"
316 if [[ -n "$PREFIX_ARG" ]]; then
317 OLD_PREFIX_ARG
=$PREFIX_ARG
321 if [[ -n "$1" ]]; then
322 PREFIX_ARG
="--prefix=$1"
328 if [[ -n "$OLD_PREFIX_ARG" ]]; then
329 PREFIX_ARG
=$OLD_TESTS_ENVIRONMENT
336 push_TESTS_ENVIRONMENT
()
338 if [[ -n "$OLD_TESTS_ENVIRONMENT" ]]; then
339 die
"OLD_TESTS_ENVIRONMENT was set on push, programmer error!"
342 if [[ -n "$TESTS_ENVIRONMENT" ]]; then
343 OLD_TESTS_ENVIRONMENT
=$TESTS_ENVIRONMENT
348 pop_TESTS_ENVIRONMENT
()
351 if [[ -n "$OLD_TESTS_ENVIRONMENT" ]]; then
352 TESTS_ENVIRONMENT
=$OLD_TESTS_ENVIRONMENT
353 OLD_TESTS_ENVIRONMENT
=
357 function safe_pushd
()
359 pushd $1 &> /dev
/null
;
361 if [ -n "$BUILD_DIR" ]; then
363 echo "BUILD_DIR=$BUILD_DIR"
368 function safe_popd
()
370 local directory_to_delete
=`pwd`
372 if [ $?
-eq 0 ]; then
373 if [[ "$top_srcdir" == "$directory_to_delete" ]]; then
374 die
"We almost deleted top_srcdir($top_srcdir), programmer error"
377 rm -r -f "$directory_to_delete"
381 function make_valgrind
()
383 if [[ "$VENDOR_DISTRIBUTION" == 'darwin' ]]; then
388 # If the env VALGRIND_COMMAND is set then we assume it is valid
389 local valgrind_was_set
=false
390 if [[ -z "$VALGRIND_COMMAND" ]]; then
391 setup_valgrind_command
392 if [[ -n "$VALGRIND_COMMAND" ]]; then
393 valgrind_was_set
=true
396 valgrind_was_set
=true
399 # If valgrind_was_set is set to no we bail
400 if ! $valgrind_was_set; then
401 echo 'valgrind was not present'
405 # If we are required to run configure, do so now
406 run_configure_if_required
408 push_TESTS_ENVIRONMENT
410 # If we don't have a configure, then most likely we will be missing libtool
411 assert_file
'configure'
412 if [[ -f 'libtool' ]]; then
413 TESTS_ENVIRONMENT
="./libtool --mode=execute $VALGRIND_COMMAND"
415 TESTS_ENVIRONMENT
="$VALGRIND_COMMAND"
418 make_target
'check' ||
return 1
420 pop_TESTS_ENVIRONMENT
423 function make_install_system
()
425 local INSTALL_LOCATION
=$
(mktemp
-d /tmp
/XXXXXXXXXX
)
426 push_PREFIX_ARG
$INSTALL_LOCATION
428 if [ ! -d $INSTALL_LOCATION ] ; then
429 die
"ASSERT temp directory not found '$INSTALL_LOCATION'"
432 run_configure
#install_buid_dir
434 push_TESTS_ENVIRONMENT
436 make_target
'install'
438 make_target
'installcheck'
440 make_target
'uninstall'
442 pop_TESTS_ENVIRONMENT
445 rm -r -f $INSTALL_LOCATION
448 if [ -f 'Makefile' ]; then
449 die
"ASSERT Makefile should not exist"
455 function make_darwin_malloc
()
457 run_configure_if_required
459 old_MallocGuardEdges
=$MallocGuardEdges
461 old_MallocErrorAbort
=$MallocErrorAbort
463 old_MallocScribble
=$MallocScribble
468 MallocGuardEdges
=$old_MallocGuardEdges
469 MallocErrorAbort
=$old_MallocErrorAbort
470 MallocScribble
=$old_MallocScribble
473 function snapshot_check
()
475 if [ ! -f "$BOOTSTRAP_SNAPSHOT_CHECK" ]; then
479 if [ -n "$BOOTSTRAP_SNAPSHOT_CHECK" ]; then
480 assert_file
"$BOOTSTRAP_SNAPSHOT_CHECK" 'snapshot check failed'
484 # This will reset our environment, and make sure built files are available.
485 function make_for_snapshot
()
487 # Make sure it is clean
488 make_maintainer_clean
492 make_target
'distclean'
494 # We should have a configure, but no Makefile at the end of this exercise
495 assert_no_file
'Makefile'
496 assert_exec_file
'configure'
501 function make_for_mingw32
()
503 # Make sure it is clean
504 if [ -f Makefile
-o -f configure
]; then
505 make_maintainer_clean
507 assert_no_file
'Makefile'
509 if command_exists mingw32-configure
; then
512 mingw32-configure || die
'mingw32-configure failed'
513 assert_file
'Makefile'
515 if command_exists mingw32-make
; then
516 mingw32-make || die
'mingw32-make failed'
521 # If we are locally testing, we should make sure the environment is setup correctly
522 function check_for_jenkins
()
524 if ! $jenkins_build_environment; then
525 echo "Not inside of jenkins"
527 if [ -f 'configure' ]; then
528 make_maintainer_clean
531 if $BOOTSTRAP_SNAPSHOT; then
537 function make_universe
()
548 function make_for_continuus_integration
()
550 # Setup the environment if we are local
553 # No matter then evironment, we should not have a Makefile at this point
554 assert_no_file
'Makefile'
556 # Platforms which require bootstrap should have some setup done before we hit this stage.
557 # If we are building locally, skip this step, unless we are just testing locally.
558 if $BOOTSTRAP_SNAPSHOT; then
561 # If we didn't require a snapshot, then we should not have a configure
562 assert_no_file
'configure'
567 assert_no_file
'Makefile' 'Programmer error, Makefile existed where build state should have been clean'
573 assert_exec_file
'configure'
574 assert_file
'Makefile'
578 # make rpm includes "make distcheck"
579 if [[ -f rpm.am
]]; then
581 elif [[ -d rpm
]]; then
587 assert_exec_file
'configure'
588 assert_file
'Makefile'
595 assert_exec_file
'configure'
596 assert_file
'Makefile'
602 assert_exec_file
'configure'
603 assert_file
'Makefile'
607 assert_exec_file
'configure'
608 assert_file
'Makefile'
617 make_maintainer_clean
622 # The point to this test is to test bootstrap.sh itself
623 function self_test
()
625 # We start off with a clean env
626 make_maintainer_clean
628 eval "./bootstrap.sh jenkins" || die
"failed 'jenkins'"
629 eval "./bootstrap.sh all" || die
"failed 'all'"
630 eval "./bootstrap.sh gdb" || die
"failed 'gdb'"
631 eval "./bootstrap.sh maintainer-clean" || die
"failed 'maintainer-clean'"
636 run_configure_if_required
638 if command_exists gdb
; then
640 push_TESTS_ENVIRONMENT
642 # Set ENV GDB_COMMAND
643 if [[ -z "$GDB_COMMAND" ]]; then
647 # If we don't have a configure, then most likely we will be missing libtool
648 assert_file
'configure'
649 if [[ -f 'libtool' ]]; then
650 TESTS_ENVIRONMENT
="./libtool --mode=execute $GDB_COMMAND"
652 TESTS_ENVIRONMENT
="$GDB_COMMAND"
657 if [ -f 'gdb.txt' ]; then
661 pop_TESTS_ENVIRONMENT
663 if [ -f '.gdb_history' ]; then
667 echo 'gdb was not present'
672 # $1 target to compile
673 # $2 to die, or not to die, based on contents
674 function make_target
()
677 die
"Programmer error, no target provided for make"
680 if [ ! -f 'Makefile' ]; then
681 die
"Programmer error, make was called before configure"
685 if [ -n "$TESTS_ENVIRONMENT" ]; then
687 echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
691 if [ -z "$MAKE" ]; then
692 die
"MAKE was not set"
696 run
$MAKE $1 ||
return 1
698 run
$MAKE $1 || die
"Cannot execute $MAKE $1"
702 function make_distcheck
()
704 make_target
'distcheck'
709 if [ -f 'rpm.am' -o -d 'rpm' ]; then
710 run_configure_if_required
715 function make_maintainer_clean
()
717 run_configure_if_required
718 make_target
'maintainer-clean' 'no_error'
721 function make_check
()
726 function make_jenkins_default
()
732 function make_default
()
734 run_configure_if_required
738 function run_configure_if_required
()
740 run_autoreconf_if_required
742 if [ ! -f 'Makefile' ]; then
746 assert_file
'Makefile' 'configure did not produce a Makefile'
749 function run_autoreconf_if_required
()
751 if [ ! -x 'configure' ]; then
755 assert_exec_file
'configure'
758 function run_autoreconf
()
760 if [[ -z "$AUTORECONF" ]]; then
761 die
"Programmer error, tried to call run_autoreconf () but AUTORECONF was not set"
764 if test $use_libtool = 1; then
765 assert
$BOOTSTRAP_LIBTOOLIZE
766 run
$BOOTSTRAP_LIBTOOLIZE '--copy' '--install' '--force' || die
"Cannot execute $BOOTSTRAP_LIBTOOLIZE"
769 run
$AUTORECONF || die
"Cannot execute $AUTORECONF"
771 eval 'bash -n configure' || die
"autoreconf generated a malformed configure"
783 parse_command_line_options
()
785 local SHORTOPTS
=':apcmt:dvh'
789 while getopts "$SHORTOPTS" opt
; do
792 AUTORECONF_OPTION
=true
793 MAKE_TARGET
='autoreconf'
796 PRINT_SETUP_OPTION
=true
799 CONFIGURE_OPTION
=true
800 MAKE_TARGET
='configure'
802 m
) # maintainer-clean
804 MAKE_TARGET
='clean_op'
808 TARGET_OPTION_ARG
="$OPTARG"
809 MAKE_TARGET
="$OPTARG"
816 echo "bootstrap.sh [options] optional_target ..."
824 echo "Option -$OPTARG requires an argument." >&2
828 echo "$0: error - unrecognized option $1" 1>&2
843 if [[ -d '.git' ]]; then
845 elif [[ -d '.bzr' ]]; then
847 elif [[ -d '.svn' ]]; then
849 elif [[ -d '.hg' ]]; then
853 if [[ -n "$VCS_CHECKOUT" ]]; then
858 function require_libtoolise
()
861 grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac
>/dev
/null \
863 grep '^[ ]*LT_INIT' configure.ac
>/dev
/null \
867 function autoreconf_setup
()
869 # Set ENV MAKE in order to override "make"
870 if [[ -z "$MAKE" ]]; then
871 if command_exists gmake
; then
874 if command_exists
make; then
879 if [ "$VCS_CHECKOUT" ]; then
881 MAKE
="$MAKE --warn-undefined-variables"
890 if [[ -z "$GNU_BUILD_FLAGS" ]]; then
891 GNU_BUILD_FLAGS
="--install --force"
895 GNU_BUILD_FLAGS
="$GNU_BUILD_FLAGS --verbose"
898 if [ -z "$ACLOCAL_PATH" ]; then
899 ACLOCAL_PATH
="/usr/local/share/aclocal $ACLOCAL_PATH"
902 if [[ -z "$WARNINGS" ]]; then
903 if [[ -n "$VCS_CHECKOUT" ]]; then
910 if test $use_libtool = 1; then
911 if [[ -n "$LIBTOOLIZE" ]]; then
912 BOOTSTRAP_LIBTOOLIZE
=`type -p $LIBTOOLIZE`
914 if [[ -z "$BOOTSTRAP_LIBTOOLIZE" ]]; then
915 echo "Couldn't find user supplied libtoolize, it is required"
918 # If we are using OSX, we first check to see glibtoolize is available
919 if [[ "$VENDOR_DISTRIBUTION" == "darwin" ]]; then
920 BOOTSTRAP_LIBTOOLIZE
=`type -p glibtoolize`
922 if [[ -z "$BOOTSTRAP_LIBTOOLIZE" ]]; then
923 echo "Couldn't find glibtoolize, it is required on OSX"
926 BOOTSTRAP_LIBTOOLIZE
=`type -p libtoolize`
928 if [[ -z "$BOOTSTRAP_LIBTOOLIZE" ]]; then
929 echo "Couldn't find libtoolize, it is required"
934 LIBTOOLIZE_OPTIONS
="--verbose $BOOTSTRAP_LIBTOOLIZE_OPTIONS"
937 LIBTOOLIZE_OPTIONS
="--debug $BOOTSTRAP_LIBTOOLIZE_OPTIONS"
942 # Test the ENV AUTOMAKE if it exists
943 if [[ -n "$AUTOMAKE" ]]; then
944 run
$AUTOMAKE '--help' &> /dev
/null || die
"Failed to run AUTOMAKE:$AUTOMAKE"
947 # Test the ENV AUTOCONF if it exists
948 if [[ -n "$AUTOCONF" ]]; then
949 run
$AUTOCONF '--help' &> /dev
/null || die
"Failed to run AUTOCONF:$AUTOCONF"
952 # Test the ENV AUTOHEADER if it exists
953 if [[ -n "$AUTOHEADER" ]]; then
954 run
$AUTOHEADER '--help' &> /dev
/null || die
"Failed to run AUTOHEADER:$AUTOHEADER"
957 # Test the ENV AUTOM4TE if it exists
958 if [[ -n "$AUTOM4TE" ]]; then
959 run
$AUTOM4TE '--help' &> /dev
/null || die
"Failed to run AUTOM4TE:$AUTOM4TE"
962 # Test the ENV AUTOHEADER if it exists, if not we add one and add --install
963 if [[ -z "$ACLOCAL" ]]; then
964 ACLOCAL
="aclocal --install"
966 run
$ACLOCAL '--help' &> /dev
/null || die
"Failed to run ACLOCAL:$ACLOCAL"
968 if [[ -z "$AUTORECONF" ]]; then
969 AUTORECONF
=`type -p autoreconf`
971 if [[ -z "$AUTORECONF" ]]; then
972 die
"Couldn't find autoreconf"
975 if [[ -n "$GNU_BUILD_FLAGS" ]]; then
976 AUTORECONF
="$AUTORECONF $GNU_BUILD_FLAGS"
980 run
$AUTORECONF '--help' &> /dev
/null || die
"Failed to run AUTORECONF:$AUTORECONF"
985 saved_debug_status
=$DEBUG
990 echo '----------------------------------------------'
992 echo "AUTORECONF=$AUTORECONF"
993 echo "HOST_OS=$HOST_OS"
996 if $AUTORECONF_OPTION; then
1000 if $CLEAN_OPTION; then
1004 if $CONFIGURE_OPTION; then
1008 if $DEBUG_OPTION; then
1012 if $PRINT_SETUP_OPTION; then
1016 if $TARGET_OPTION; then
1017 echo "--target=$TARGET_OPTION_ARG"
1020 if $VERBOSE_OPTION; then
1024 if [[ -n "$MAKE" ]]; then
1028 if [[ -n "$MAKE_TARGET" ]]; then
1029 echo "MAKE_TARGET=$MAKE_TARGET"
1032 if [[ -n "$PREFIX" ]]; then
1033 echo "PREFIX=$PREFIX"
1036 if [[ -n "$TESTS_ENVIRONMENT" ]]; then
1037 echo "TESTS_ENVIRONMENT=$TESTS_ENVIRONMENT"
1040 if [[ -n "$VCS_CHECKOUT" ]]; then
1041 echo "VCS_CHECKOUT=$VCS_CHECKOUT"
1052 if [[ -n "$WARNINGS" ]]; then
1053 echo "WARNINGS=$WARNINGS"
1055 echo '----------------------------------------------'
1057 if $saved_debug_status; then
1062 make_clean_option
()
1064 run_configure_if_required
1066 make_maintainer_clean
1068 if [[ "$VCS_CHECKOUT" == 'git' ]]; then
1069 run
"$VCS_CHECKOUT" status
--ignored
1070 elif [[ -n "$VCS_CHECKOUT" ]]; then
1071 run
"$VCS_CHECKOUT" status
1075 make_for_autoreconf
()
1077 if [ -f 'Makefile' ]; then
1078 make_maintainer_clean
1083 assert_no_file
'Makefile'
1136 die
"Unknown MAKE_TARGET option: $1"
1141 function bootstrap
()
1143 determine_target_platform
1147 # Set up whatever we need to do to use autoreconf later
1151 if [ -z "$MAKE_TARGET" ]; then
1152 MAKE_TARGET
="make_default"
1155 if $PRINT_SETUP_OPTION -o $DEBUG; then
1160 # Exit if all we were looking for were the currently used options
1161 if $PRINT_SETUP_OPTION; then
1166 # Use OLD_TESTS_ENVIRONMENT for tracking the state of the variable
1167 local OLD_TESTS_ENVIRONMENT
=
1169 # Set ENV PREFIX in order to set --prefix for ./configure
1170 if [[ -n "$PREFIX" ]]; then
1171 push_PREFIX_ARG
$PREFIX
1174 # We should always have a target by this point
1177 local MAKE_TARGET_ARRAY
=($MAKE_TARGET)
1179 for target
in "${MAKE_TARGET_ARRAY[@]}"
1181 # If we are running inside of Jenkins, we want to only run some of the possible tests
1182 if $jenkins_build_environment; then
1183 check_make_target
$target
1224 make_for_continuus_integration
1227 run_configure_if_required
1228 make_target
"$target"
1236 # Variables we export
1237 declare -x VCS_CHECKOUT
=
1239 # Variables we control globally
1242 # Options for getopt
1243 local AUTORECONF_OPTION
=false
1244 local CLEAN_OPTION
=false
1245 local CONFIGURE_OPTION
=false
1246 local DEBUG_OPTION
=false
1247 local PRINT_SETUP_OPTION
=false
1248 local TARGET_OPTION
=false
1249 local TARGET_OPTION_ARG
=
1250 local VERBOSE_OPTION
=false
1252 # If we call autoreconf on the platform or not
1253 local AUTORECONF_REBUILD_HOST
=false
1254 local AUTORECONF_REBUILD
=false
1256 local -r top_srcdir
=`pwd`
1258 # Variables for determine_target_platform () and rebuild_host_os ()
1259 # UNAME_MACHINE_ARCH= uname -m
1260 # VENDOR= apple, redhat, centos, canonical
1262 # RHEL{rhel,Tikanga,Santiago}
1263 # Ubuntu{ubuntu,Lucid,Maverick,Natty,Oneiric,Precise,Quantal}
1264 # Fedora{fedora,Verne,Beefy}
1265 # OSX{osx,lion,snow,mountain}
1266 # VENDOR_DISTRIBUTION= darwin,fedora,rhel,ubuntu
1267 # UNAME_KERNEL= Linux, Darwin,...
1268 # UNAME_KERNEL_RELEASE= Linux, Darwin,...
1269 local UNAME_MACHINE_ARCH
=unknown
1270 local VENDOR
=unknown
1271 local VENDOR_RELEASE
=unknown
1272 local VENDOR_DISTRIBUTION
=unknown
1273 local UNAME_KERNEL
=unknown
1274 local UNAME_KERNEL_RELEASE
=unknown
1277 rebuild_host_os no_output
1279 parse_command_line_options $@
1281 # If we are running under Jenkins we predetermine what tests we will run against
1282 # This MAKE_TARGET can be overridden by parse_command_line_options based MAKE_TARGET changes.
1283 # We don't want Jenkins overriding other variables, so we NULL them.
1284 if [ -z "$MAKE_TARGET" ]; then
1285 if $jenkins_build_environment; then
1286 MAKE_TARGET
='jenkins'
1298 function set_branch
()
1300 if [ -z "$BRANCH" ]; then
1301 if [ -z "$CI_PROJECT_TEAM" ]; then
1302 die
"Variable CI_PROJECT_TEAM has not been set"
1304 if [ -z "$PROJECT" ]; then
1305 die
"Variable PROJECT has not been set"
1307 if [ -z "$BUILD_TAG" ]; then
1308 die
"Variable BUILD_TAG has not been set"
1311 BRANCH
="lp:~$CI_PROJECT_TEAM/$PROJECT/$BUILD_TAG"
1315 if [ -z "$BRANCH" ]; then
1316 die
"Missing values required to build BRANCH variable."
1322 if [ -z "$VCS_CHECKOUT" ]; then
1323 die
"Merges require VCS_CHECKOUT."
1328 if [[ "$VCS_CHECKOUT" == 'bzr' ]]; then
1329 if test -n "$BRANCH_TO_MERGE"; then
1330 bzr merge
$BRANCH_TO_MERGE
1331 bzr commit
--message="Merge $BRANCH_TO_MERGE Build: $BUILD_TAG" --unchanged
1335 elif [[ -n "$VCS_CHECKOUT" ]]; then
1336 die
"Merge attempt occured, current VCS setup does not support this"
1343 local caller_loc
=`caller`
1345 echo "$caller_loc Enabling debug: $1"
1347 echo "$caller_loc Enabling debug"
1357 Usage: $program_name [OPTION]..
1359 Bootstrap this package from the checked-out sources, and optionally walk through CI run.
1372 # Script begins here
1376 env_debug_enabled
=false
1377 if [[ -n "$JENKINS_HOME" ]]; then
1378 declare -r jenkins_build_environment
=true
1380 declare -r jenkins_build_environment
=false
1390 export GNU_BUILD_FLAGS
1392 export LIBTOOLIZE_OPTIONS
1394 export TESTS_ENVIRONMENT
1400 export MallocGuardEdges
1401 export MallocErrorAbort
1402 export MallocScribble
1406 # We check for DEBUG twice, once before we source the config file, and once afterward
1407 env_debug_enabled
=false
1408 if [[ -n "$DEBUG" ]]; then
1409 env_debug_enabled
=true
1414 # Variables which only can be set by .bootstrap
1415 BOOTSTRAP_SNAPSHOT
=false
1416 BOOTSTRAP_SNAPSHOT_CHECK
=
1418 if [ -f '.bootstrap' ]; then
1422 if $env_debug_enabled; then
1425 if [[ -n "$DEBUG" ]]; then
1426 enable_debug
"Enabling DEBUG from '.bootstrap'"
1431 # We do this in order to protect the case where DEBUG
1432 if ! $env_debug_enabled; then