# Copyright (C) 2001, 2003 by Martin Pool <mbp@samba.org>
# default maximum runtime for any command
-MAXTIME=12000
+MAXTIME=25200 # 7 hours
+SMBD_MAXTIME=18000 # 5 hours for a samba process ..
# default maximum memory size (100M) for any command
MAXMEM=100000
RUN_FROM_BUILD_FARM=yes
export RUN_FROM_BUILD_FARM
+export MAXTIME SMBD_MAXTIME
deptrees="";
if [ "$norsync" = "yes" ]; then
echo "skipping .revinfo.$scm transfer"
else
- if [ -r $test_root/$tree.$scm ]; then
- [ -f $test_root/$tree.$scm.old ] && rm -f $test_root/$tree.$scm.old
- [ -f $test_root/$tree.$scm ] && mv $test_root/$tree.$scm $test_root/$tree.$scm.old
- fi
- rsync -q --timeout=200 -clz --ignore-errors \
- samba.org::ftp/unpacked/$tree/.revinfo.$scm $test_root/$tree.$scm
+ if [ -r $test_root/$tree.$scm ]; then
+ [ -f $test_root/$tree.$scm.old ] && rm -f $test_root/$tree.$scm.old
+ [ -f $test_root/$tree.$scm ] && mv $test_root/$tree.$scm $test_root/$tree.$scm.old
+ fi
+ rsync -q --timeout=200 -clz --ignore-errors \
+ samba.org::ftp/unpacked/$tree/.revinfo.$scm $test_root/$tree.$scm
fi
if [ -r $test_root/$tree.$scm ]; then
return 0;
tree=$1
case "$tree" in
- samba* | rsync | libreplace | talloc | tdb | ldb | pidl | ccache*)
+ samba* | rsync | libreplace | talloc | tdb | ldb | pidl | ccache* | waf*)
echo "git"
return 0
;;
fi
if test -f "$lckf"; then
- test $machine = $host || {
+ test x$machine = x$host || {
echo "lock file $lckf is valid for other machine $machine"
return 1
}
############################
do_make() {
- if [ x"$MAKE" = x ]; then
- MAKE=make
- fi
+ # work out correct make command
+ case "$tree" in
+ waf*)
+ MAKECOMMAND="./waf"
+ ;;
+ *)
+ MAKECOMMAND="$MAKE"
+ if [ x"$MAKECOMMAND" = x ]; then
+ MAKECOMMAND=make
+ fi
+ ;;
+ esac
MMTIME=$MAXTIME
# some trees don't need as much time
case "$tree" in
- rsync | tdb | talloc | libreplace | ccache*)
+ rsync | tdb | talloc | libreplace | ccache* | waf*)
if [ "$compiler" != "checker" ]; then
MMTIME=`expr $MMTIME / 5`
fi
;;
esac
+ # special build for some trees
+ case "$tree" in
+ waf*)
+ ./waf distclean && ./waf configure build
+ ;;
+ esac
+
for t in $*; do
if [ x"$BUILD_FARM_NUM_JOBS" = x ]; then
- echo "$MAKE $t"
- $builddir/timelimit $MMTIME "$MAKE" "$t"
+ echo "$MAKECOMMAND $t"
+ $builddir/timelimit $MMTIME "$MAKECOMMAND" "$t"
status=$?
else
# we can parallelize everything and all targets
if [ x"$t" = xeverything ] || [ x"$t" = xall]; then
- echo "$MAKE" "-j$BUILD_FARM_NUM_JOBS" "$t"
- $builddir/timelimit $MMTIME "$MAKE" "-j$BUILD_FARM_NUM_JOBS" "$t"
+ echo "$MAKECOMMAND" "-j$BUILD_FARM_NUM_JOBS" "$t"
+ $builddir/timelimit $MMTIME "$MAKECOMMAND" "-j$BUILD_FARM_NUM_JOBS" "$t"
status=$?
else
- echo "$MAKE $t"
- $builddir/timelimit $MMTIME "$MAKE" "$t"
+ echo "$MAKECOMMAND $t"
+ $builddir/timelimit $MMTIME "$MAKECOMMAND" "$t"
status=$?
fi
fi
;;
*)
#run again with V=1, so we see failed commands
- $builddir/timelimit $MMTIME "$MAKE" "$t" V=1
+ $builddir/timelimit $MMTIME "$MAKECOMMAND" "$t" V=1
status=$?
;;
esac
return 0
}
+
+############################
+# do the coverage report
+############################
+
+action_lcovreport() {
+ if [ "$LCOV_REPORT" = "yes" ]; then
+ case "$tree" in
+ lorikeet-heimdal*)
+ lcov --directory $builddir --capture --output-file $builddir/$tree.lcov.info
+ ;;
+ samba_3_master*)
+ lcov --base-directory $builddir --directory $builddir/.. --capture --output-file $builddir/$tree.lcov.info
+ ;;
+ samba_4*|tdb|talloc|ldb|libreplace)
+ lcov --base-directory $builddir/bin --directory $builddir/bin --capture --output-file $builddir/$tree.lcov.info
+ ;;
+ waf)
+ lcov --base-directory $builddir/demos --directory $builddir/demos --capture --output-file $builddir/$tree.lcov.info
+ ;;
+ *)
+ lcov --base-directory $builddir --directory $builddir --capture --output-file $builddir/$tree.lcov.info
+ ;;
+ esac
+ genhtml -o $builddir/coverage $builddir/$tree.lcov.info
+ rc=$?
+ echo "return code: $rc"
+ else
+ echo "LCOV_REPORT not set and lcovreport asked"
+ echo "Most probably an error please fix !"
+ return 1
+ fi
+}
+
+action_callcatcherreport() {
+ if [ "$CALLCATCHER_REPORT" = "yes" ]; then
+ case "$tree" in
+ tdb|talloc|ldb)
+ callanalyse `find $builddir/bin -name \*.so*` $builddir/bin/* > $builddir/coverage/unused-fns.txt
+ ;;
+ samba_3_master|samba_4*)
+ callanalyse `find $builddir/bin -name \*.so*` $builddir/bin/* > $builddir/coverage/all-unused-fns.txt
+ grep -v -f $srcdir/callcatcher-exceptions.grep $builddir/coverage/all-unused-fns.txt > $builddir/coverage/unused-fns.txt
+ ;;
+ esac
+ rc=$?
+ echo "return code: $rc"
+ else
+ echo "CALLCATCHER_REPORT not set and callcatcher asked"
+ echo "Most probably an error please fix !"
+ return 1
+ fi
+}
+
+
############################
# configure the tree
############################
action_configure() {
+ # special handling for some trees
+ case "$tree" in
+ waf*)
+ $builddir/timelimit $MAXTIME ./waf configure
+ cstatus=$?
+ echo "CONFIGURE STATUS: $cstatus"
+ return $cstatus
+ ;;
+ esac
if [ ! -x $srcdir/configure -a -r $srcdir/Makefile.PL ]; then
perl $srcdir/Makefile.PL PREFIX="$prefix"
############################
action_config_header() {
- hdr_files="config.h include/config.h bin/default/config.h bin/default/source4/include/config.h bin/default/source3/include/config.h"
+ hdr_files="config.h include/config.h include/autoconf/config.h bin/default/config.h bin/default/include/config.h bin/default/source3/include/config.h"
for h in $hdr_files; do
if [ -f $h ]; then
echo "contents of $h:"
do_make everything torture
bstatus=$?
;;
+ waf*)
+ do_make build
+ bstatus=$?
+ ;;
*)
do_make all
bstatus=$?
shift
shift
shift
+ echo "Starting to deal with tree $tree with compiler $compiler"
if [ "$compiler" = "gcc" ] && [ "$tree" != "ccache" ] && [ "$tree" != "ccache-maint" ] && ccache -V > /dev/null 2>/dev/null; then
CCACHE="ccache"
export CCACHE
scm=`choose_scm "$tree"`
# pull the entries, if any
+ # Remove old .svn or .git files
+ # Move the current .svn org .git to .svn.old or
+ # .git.old then fetch the new from rsync
if fetch_revinfo "$tree" "$scm"; then
for d in $deptrees; do
+ # If there is dependency substree(s) we add info
+ # from the dependency tree so that we
+ # can rebuild in case one of them has changed
dscm=`choose_scm "$d"`
- if [ -f "$test_root/$d.$dscm" ]; then
- if [ "$d" != "$tree" ]; then
- cat "$test_root/$d.$dscm" >> $test_root/$tree.$scm
+ if [ -f "$test_root/$d.$dscm" ]; then
+ if [ "$d" != "$tree" ]; then
+ cat "$test_root/$d.$dscm" >> $test_root/$tree.$scm
+ fi
fi
- fi
done
- [ -f $test_root/$tree.$compiler.$scm ] && rm -f $test_root/$tree.$compiler.$scm.old
+ [ -f $test_root/$tree.$compiler.$scm.old ] && rm -f $test_root/$tree.$compiler.$scm.old
[ -f $test_root/$tree.$compiler.$scm ] && mv $test_root/$tree.$compiler.$scm $test_root/$tree.$compiler.$scm.old
[ -f $test_root/$tree.$scm ] && cp $test_root/$tree.$scm $test_root/$tree.$compiler.$scm
return
}
- if [ ! -x $srcdir/configure ] && [ "$tree" != "pidl" ]; then
- echo "skip: $tree.$compiler configure not present, try again next time!"
- cd $test_root
- unlock_file "$lck"
- return
- fi
+ # check for essential files
+ case "$tree" in
+ pidl)
+ # no generated files
+ ;;
+ waf*)
+ if [ ! -x $srcdir/waf ]; then
+ echo "skip: $tree.$compiler waf not present, try again next time!"
+ cd $test_root
+ unlock_file "$lck"
+ return
+ fi
+ ;;
+ *)
+ if [ ! -x $srcdir/configure ]; then
+ echo "skip: $tree.$compiler configure not present, try again next time!"
+ cd $test_root
+ unlock_file "$lck"
+ return
+ fi
+ ;;
+ esac
echo "Starting build of $tree.$compiler in process $$ at `date`"
+
+ # Parameters for the build depending on the tree
case "$tree" in
- libreplace)
- builddir="$test_root/tmp.$tree.$compiler"
- usingtmpbuild=1
- if [ -d $builddir ]; then
- rm -rf $builddir
- fi
- mkdir -p $builddir
- export builddir
- ;;
*)
- builddir=$srcdir
- usingtmpbuild=0
- export builddir
- ;;
+ builddir=$srcdir
+ export builddir
+ ;;
esac
-
+
+ #Fix the user
if [ ! x$USER = x"" ]; then
whoami=$USER
else
if [ ! x$LOGNAME = x"" ]; then
- whoami=$LOGNAME
+ whoami=$LOGNAME
else
- whoami=build
+ whoami=build
fi
fi
- # build the timelimit utility
+ # build the timelimit utility
echo "Building timelimit"
mkdir -p $builddir
echo $compiler $TIMELIMIT_FLAGS -o $builddir/timelimit $test_root/timelimit.c
$compiler $TIMELIMIT_FLAGS -o $builddir/timelimit $test_root/timelimit.c || exit 1
- # build the killbysubdir utility
+ # build the killbysubdir utility
echo "Building killbysubdir"
echo $compiler -o $builddir/killbysubdir $test_root/killbysubdir.c
$compiler -o $builddir/killbysubdir $test_root/killbysubdir.c
prefix="$test_root/prefix/$tree.$compiler"
mkdir -p "$prefix"
+ # This can be defined in <host>.fns files
sw_config=$config
case "$tree" in
esac
if [ "$LCOV_REPORT" = "yes" ]; then
+ PRE_GCOV_CFLAGS=$CFLAGS
+ PRE_GCOV_LDFLAGS=$LDFLAGS
GCOV_FLAGS="--coverage"
CFLAGS="$CFLAGS $GCOV_FLAGS"
LDFLAGS="$LDFLAGS $GCOV_FLAGS"
send_logs_skip "$log" "$err"
unlock_file "$lck"
echo "Ending build of $tree.$compiler in process $$ at `date`"
+ if [ "$LCOV_REPORT" = "yes" ]; then
+ CFLAGS=$PRE_GCOV_CFLAGS
+ LDFLAGS=$PRE_GCOV_LDFLAGS
+ export CFLAGS LDFLAGS
+ fi
return
fi
[ -f $sum.old ] && /bin/rm -f $sum.old
mv $sum $sum.old
+ #Action == what to do ie. configure config_log ...
actions="$*"
-
+
if [ "$actions" = "" ]; then
- actions="configure config_log config_header build install test"
+ actions="configure config_log config_header build install test $EXTRA_ACTIONS"
fi
# start the build
echo "used .fns file : $build_test_used_fns_file"
echo ""
- # we need to be able to see if a build farm machine is accumulating
- # stuck processes. We do this in two ways, as we don't know what style
- # of ps it will have
+ # we need to be able to see if a build farm machine is accumulating
+ # stuck processes. We do this in two ways, as we don't know what style
+ # of ps it will have
ps xfuw 2> /dev/null
ps -fu $USER 2> /dev/null
mount
vmstat
+ if [ "x$PREHOOKS" != "x" ]; then
+ for hooks in $PREHOOKS; do
+ if [ "x$hooks" = "x$action" ]; then
+ ( prehook_$action )
+ fi
+ done
+ fi
+
( action_$action )
action_status=$?
+ if [ "x$POSTHOOKS" != "x" ]; then
+ for hooks in $POSTHOOKS; do
+ if [ "x$hooks" = "x$action" ]; then
+ ( posthook_$action )
+ fi
+ done
+ fi
+
df .
if [ $action_status != 0 ]; then
- echo "ACTION FAILED: $action";
+ echo "ACTION FAILED: $action";
+ echo " return code $action_status $action";
else
- echo "ACTION PASSED: $action";
+ echo "ACTION PASSED: $action";
fi
-
+
if [ $action_status != 0 ]; then
- break;
+ break;
fi
-
done
- if [ "$LCOV_REPORT" = "yes" ]; then
- case "$tree" in
- lorikeet-heimdal*)
- lcov --directory $builddir --capture --output-file $builddir/$tree.lcov.info
- ;;
- samba_3_master*)
- lcov --base-directory $builddir --directory $builddir/.. --capture --output-file $builddir/$tree.lcov.info
- ;;
- samba_4*)
- # ugly hack for s4, as lcov is otherwise not able to find
- # these files
- rm -f heimdal/lib/*/{lex,parse,sel-lex}.{gcda,gcno}
- lcov --base-directory $builddir --directory $builddir/.. --capture --output-file $builddir/$tree.lcov.info
- ;;
- *)
- lcov --base-directory $builddir --directory $builddir --capture --output-file $builddir/$tree.lcov.info
- ;;
- esac
- genhtml -o $builddir/coverage $builddir/$tree.lcov.info
- fi
if [ "$noclean" = "yes" ]; then
echo cleanup skipped!
if [ "$LCOV_REPORT" = "yes" ]; then
chmod u=rwX,g=rX,o=rX -R $builddir/coverage
rsync -rct -q --password-file=.password -z --timeout=200 \
- $builddir/coverage/ $host@build.samba.org::lcov_data/$host/$tree/
+ $builddir/coverage/ $host@build.samba.org::lcov_data/$host/$tree/
+ CFLAGS=$PRE_GCOV_CFLAGS
+ LDFLAGS=$PRE_GCOV_LDFLAGS
+ export CFLAGS LDFLAGS
fi
cd $test_root
- /bin/rm -rf $prefix
- if [ "$usingtmpbuild" = "1" ]; then
- if [ "$noclean" = "yes" ]; then
- echo builddir cleanup skipped!
- else
- /bin/rm -rf $builddir
- fi
- fi
+ /bin/rm -rf $prefix
# send the logs to the master site
send_logs "$log" "$err"
old_trees="web popt distcc samba-gtk smb-build lorikeet-heimdal samba_3_2"
old_trees="$old_tree samba_3_2_test samba4 samba_4_0_waf samba_4_0_waf.metze"
- old_trees="$old_tree samba_3_X_test samba_3_X_devel samba_3_X_devel"
+ old_trees="$old_tree samba_3_X_test samba_3_X_devel samba_3_X_devel samba_3_waf"
for d in $old_trees; do
delete_old_tree $d
done