X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=build_test.fns;h=50ab43c4b7b795864be817baac10eb88358d33ad;hb=20718bc65127e27b5550828bdaf1ec10458302c1;hp=8797d2a73f7c93051fe2819acffd1171b9522179;hpb=ca5178c2e5ce5cc1411dfede69368e588732daf3;p=build-farm.git diff --git a/build_test.fns b/build_test.fns index 8797d2a7..50ab43c4 100644 --- a/build_test.fns +++ b/build_test.fns @@ -7,11 +7,13 @@ # Copyright (C) 2001, 2003 by Martin Pool # 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=""; @@ -141,12 +143,12 @@ fetch_revinfo() { 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; @@ -162,7 +164,7 @@ choose_scm() { 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 ;; @@ -195,7 +197,7 @@ lock_file() { 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 } @@ -235,35 +237,51 @@ unlock_file() { ############################ 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 @@ -274,7 +292,7 @@ do_make() { ;; *) #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 @@ -289,11 +307,75 @@ do_make() { 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" @@ -357,7 +439,7 @@ action_config_log() { ############################ 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:" @@ -384,6 +466,10 @@ action_build() { do_make everything torture bstatus=$? ;; + waf*) + do_make build + bstatus=$? + ;; *) do_make all bstatus=$? @@ -504,7 +590,8 @@ test_tree() { shift shift shift - if [ "$compiler" = "gcc" ] && [ "$tree" != "ccache" ] && [ "$tree" != "ccache-maint" ] && ccache -V > /dev/null; then + 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 else @@ -553,16 +640,22 @@ test_tree() { 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 @@ -584,49 +677,58 @@ test_tree() { 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 @@ -634,6 +736,7 @@ test_tree() { prefix="$test_root/prefix/$tree.$compiler" mkdir -p "$prefix" + # This can be defined in .fns files sw_config=$config case "$tree" in @@ -659,6 +762,8 @@ test_tree() { 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" @@ -677,6 +782,11 @@ test_tree() { 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 @@ -684,10 +794,11 @@ test_tree() { [ -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 @@ -707,9 +818,9 @@ test_tree() { 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 @@ -762,43 +873,39 @@ test_tree() { 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! @@ -815,19 +922,15 @@ test_tree() { 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" @@ -885,7 +988,7 @@ per_run_hook() { 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