shellfiles/common.sh.in
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 28 May 2016 10:40:05 +0100
branchjv
changeset 318 b7f0437a6d18
parent 160 fadfbf804005
permissions -rw-r--r--
Pass ident string to coverage report when tests are run with `-c` option i.e., when tests are run like report-runner -D . -i build10 -r Builder::TestReport -p stx:libjava following files will be created: stx_libjava-build10-Test.xml stx_libjava-build10-Coverage.xml

# ### START OF common.sh.in ##########################################
#
# Common set of function to build a project. 
# 
 

# Determine operating system, bit simple but works
if [ "$OS" == "Windows_NT" ]; then
    WIN32=1
    UNIX=0
else
    WIN32=0
    UNIX=1
fi

# =====================================================
# Utility functions
# =====================================================


# Simple logging functions
function info {
    echo "[INF] $1"
    if [ ! -z "$2" ]; then
        echo "      $2"
    fi
}

function error {
    echo     "[ERR] $1"
    if [ ! -z "$2" ]; then
        echo "      $2"
    fi
    exit 1
}

# Run make in current directory. Caller should cd to target 
# directory before calling this method.
function mk {
    if [ "$WIN32" == "1" ]; then
    	cmd /C bmake.bat $1 $2
    else
    	if [ -f Makefile.init ]; then
            make -f Makefile.init || error "Failed to make package"
        else
            error "No Makefile.init found"
    	fi
    	make $1 $2 || error "Make failed"
    fi
}

# Run tests for package specified in first argument. 
function sunit {    
    pushd stx/goodies/builder/reports
    info "Running tests for $1"
    if [ "$WIN32" == "1" ]; then
        cmd /C report-runner.bat -D ../../../.. -r Builder::TestReport -p "$1" || error "Failed to run reports"
    else
        (echo "" | ./report-runner.sh -D ../../../.. -r Builder::TestReport -p "$1") || error "Failed to run reports"
    fi
    popd
}

# Main function. Performs complete build or given task
function main {
    pushd "$BUILD"
    if [ -z "$1" ]; then
    	info "Checking out..."
    	checkout
    	info "Compiling..."
    	compile
    	info "Running tests..."
    	runtests
    else
        case "$1" in
            checkout)
    	        info "Checking out..."
    	        checkout;;
            compile)
                info "Compiling..."
    	        compile;;
            tests)
    	        info "Running tests..."
    	        runtests;;
            test)
    	        info "Running tests..."
    	        runtests;;
            *)
                error "Invalid command ($1)"
        esac
    fi
    popd
    exit 0
}

# Setup...

if [ "$WIN32" == "1" ]; then
    # WINDOWS
    # MUST export this, otherwise libjpeg fails to build!!!"
    if [ -z "$BCB"]; then
        export BCB="C:\Borland\BCC55"
    fi
    # To make cvs/ssh happy
    if [ -z "$CVS_RSH" ]; then
        export CVS_RSH=plink
    fi
    # Set home
    export HOME=$USERPROFILE
else
    # LINUX
    # to get Mercurial on build slave
    export PATH=$PATH:/home/vrany/bin
fi

if [ -z "$CVSROOT" ]; then
    error "CVSROOT not set!"
fi

# Sorry, it's lot easier for all to have all the messages in EN :-)
export LANG=en_GB.UTF-8

# When run interactively, Jenkins env variables
# may not be set...
if [ -z "$WORKSPACE" ]; then
  WORKSPACE="$PWD"
    INTERACTIVE=1
else
    INTERACTIVE=0
fi

if [ "$INTERACTIVE" == "0" ]; then
  if [ "$WIN32" == "1" ]; then
    WORKSPACE="$PWD"
  fi
fi

if [ -z "$BUILD_NUMBER" ]; then
    BUILD_NUMBER=$(date +%Y_%m_%d_interactive)
fi

BUILD="$PWD"


echo "INFO: BUILD=\"$BUILD\""

if [ -d "$BUILD" ]; then
    if [ "$BUILD" != "$PWD" ]; then
        info "Build directory already exists!"
    fi
else
    mkdir -p "$BUILD"
fi


# ===================================================================
# Actual build functions. 
# ===================================================================
#
# User scripts should override following functions to define a build

function checkout {
    error "You have to override function 'checkout'"
}

function compile {
    error "You have to override function 'compile'"
}

function runtests {
    info "No tests specified" "To do so, override function runtests"
}

# ### END OF common.sh.in ############################################