jan@159: # ### START OF common.sh.in ########################################## jan@159: # jan@159: # Common set of function to build a project. jan@159: # jan@159: jan@159: jan@159: # Determine operating system, bit simple but works jan@159: if [ "$OS" == "Windows_NT" ]; then jan@159: WIN32=1 jan@159: UNIX=0 jan@159: else jan@159: WIN32=0 jan@159: UNIX=1 jan@159: fi jan@159: jan@159: # ===================================================== jan@159: # Utility functions jan@159: # ===================================================== jan@159: jan@159: jan@159: # Simple logging functions jan@159: function info { jan@159: echo "[INF] $1" jan@159: if [ ! -z "$2" ]; then jan@159: echo " $2" jan@159: fi jan@159: } jan@159: jan@159: function error { jan@159: echo "[ERR] $1" jan@159: if [ ! -z "$2" ]; then jan@159: echo " $2" jan@159: fi jan@159: exit 1 jan@159: } jan@159: jan@159: # Run make in current directory. Caller should cd to target jan@159: # directory before calling this method. jan@159: function mk { jan@159: if [ "$WIN32" == "1" ]; then jan@159: cmd /C bmake.bat $1 $2 jan@159: else jan@160: if [ -f Makefile.init ]; then jan@160: make -f Makefile.init || error "Failed to make package" jan@160: else jan@160: error "No Makefile.init found" jan@159: fi jan@159: make $1 $2 || error "Make failed" jan@159: fi jan@159: } jan@159: jan@159: # Run tests for package specified in first argument. jan@159: function sunit { jan@159: pushd stx/goodies/builder/reports jan@159: info "Running tests for $1" jan@159: if [ "$WIN32" == "1" ]; then jan@159: cmd /C report-runner.bat -D ../../../.. -r Builder::TestReport -p "$1" || error "Failed to run reports" jan@159: else jan@159: (echo "" | ./report-runner.sh -D ../../../.. -r Builder::TestReport -p "$1") || error "Failed to run reports" jan@159: fi jan@159: popd jan@159: } jan@159: jan@159: # Main function. Performs complete build or given task jan@159: function main { jan@159: pushd "$BUILD" jan@159: if [ -z "$1" ]; then jan@159: info "Checking out..." jan@159: checkout jan@159: info "Compiling..." jan@159: compile jan@159: info "Running tests..." jan@159: runtests jan@159: else jan@159: case "$1" in jan@159: checkout) jan@159: info "Checking out..." jan@159: checkout;; jan@159: compile) jan@159: info "Compiling..." jan@159: compile;; jan@159: tests) jan@159: info "Running tests..." jan@159: runtests;; jan@159: test) jan@159: info "Running tests..." jan@159: runtests;; jan@159: *) jan@159: error "Invalid command ($1)" jan@159: esac jan@159: fi jan@159: popd jan@159: exit 0 jan@159: } jan@159: jan@159: # Setup... jan@159: jan@159: if [ "$WIN32" == "1" ]; then jan@159: # WINDOWS jan@159: # MUST export this, otherwise libjpeg fails to build!!!" jan@159: if [ -z "$BCB"]; then jan@159: export BCB="C:\Borland\BCC55" jan@159: fi jan@159: # To make cvs/ssh happy jan@159: if [ -z "$CVS_RSH" ]; then jan@159: export CVS_RSH=plink jan@159: fi jan@159: # Set home jan@159: export HOME=$USERPROFILE jan@159: else jan@159: # LINUX jan@159: # to get Mercurial on build slave jan@159: export PATH=$PATH:/home/vrany/bin jan@159: fi jan@159: jan@159: if [ -z "$CVSROOT" ]; then jan@159: error "CVSROOT not set!" jan@159: fi jan@159: jan@159: # Sorry, it's lot easier for all to have all the messages in EN :-) jan@159: export LANG=en_GB.UTF-8 jan@159: jan@159: # When run interactively, Jenkins env variables jan@159: # may not be set... jan@159: if [ -z "$WORKSPACE" ]; then jan@159: WORKSPACE="$PWD" jan@159: INTERACTIVE=1 jan@159: else jan@159: INTERACTIVE=0 jan@159: fi jan@159: jan@159: if [ "$INTERACTIVE" == "0" ]; then jan@159: if [ "$WIN32" == "1" ]; then jan@159: WORKSPACE="$PWD" jan@159: fi jan@159: fi jan@159: jan@159: if [ -z "$BUILD_NUMBER" ]; then jan@159: BUILD_NUMBER=$(date +%Y_%m_%d_interactive) jan@159: fi jan@159: jan@160: BUILD="$PWD" jan@159: jan@159: jan@159: echo "INFO: BUILD=\"$BUILD\"" jan@159: jan@159: if [ -d "$BUILD" ]; then jan@160: if [ "$BUILD" != "$PWD" ]; then jan@159: info "Build directory already exists!" jan@159: fi jan@159: else jan@159: mkdir -p "$BUILD" jan@159: fi jan@159: jan@159: jan@159: # =================================================================== jan@159: # Actual build functions. jan@159: # =================================================================== jan@159: # jan@159: # User scripts should override following functions to define a build jan@159: jan@159: function checkout { jan@159: error "You have to override function 'checkout'" jan@159: } jan@159: jan@159: function compile { jan@159: error "You have to override function 'compile'" jan@159: } jan@159: jan@159: function runtests { jan@159: info "No tests specified" "To do so, override function runtests" jan@159: } jan@159: jan@159: # ### END OF common.sh.in ############################################