Skip to content
Snippets Groups Projects
buildscript 5.23 KiB
Newer Older
#!/bin/bash -ex
###############################################################################
# LINUX/MAC SCRIPT TO DRIVE THE JENKINS BUILDS OF MANTID.
# WORKSPACE, JOB_NAME & NODE_LABEL are environment variables that are set by
# Jenkins. The last one corresponds to any labels set on a slave.
# BUILD_THREADS & PARAVIEW_DIR should be set in the configuration of each slave.
###############################################################################

###############################################################################
# OS X setup steps
###############################################################################
if [[ $(uname) == 'Darwin' ]]; then
  cd $WORKSPACE/Code
  ./fetch_Third_Party.sh
  # Setup environment variables
  source /opt/intel/bin/iccvars.sh intel64
  export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$WORKSPACE/Code/Third_Party/lib/mac64:/Library/Frameworks
  # Make sure we pick up the Intel compiler
  export CC=icc
  export CXX=icpc
fi
###############################################################################
# Check whether this is a clean build (must have 'clean' in the job name)
###############################################################################
if [[ ${JOB_NAME} == *clean* ]]; then
  CLEANBUILD=true
  # Removing the build directory entirely guarantees a completely clean build
  rm -rf $WORKSPACE/build

  # Set some variables relating to the linux packages created from clean builds
  if [[ $(uname) != 'Darwin' ]]; then
    if [[ ${JOB_NAME} == *master* ]]; then
    elif [[ ${JOB_NAME} == *develop* ]]; then
    PACKAGINGVARS="-DENVVARS_ON_INSTALL=False -DCMAKE_INSTALL_PREFIX=/opt/mantid${SUFFIX} -DCPACK_PACKAGE_SUFFIX=${SUFFIX} -DCPACK_SET_DESTDIR=OFF -DPACKAGE_DOCS=True"

###############################################################################
# RHEL6 setup steps - nodes must have a "rhel6" label set (in lowercase)
###############################################################################
if [[ ${NODE_LABELS} == *rhel6* ]]; then
  SCL_ON_RHEL6="scl enable mantidlibs"
else
  SCL_ON_RHEL6="eval"
fi

###############################################################################
# Create the build directory if it doesn't exist
###############################################################################
[ -d $WORKSPACE/build ] || mkdir $WORKSPACE/build
cd $WORKSPACE/build

###############################################################################
# CMake configuration
###############################################################################
$SCL_ON_RHEL6 "cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CPACK=ON -DMAKE_VATES=ON -DParaView_DIR=${PARAVIEW_DIR} -DDOCS_HTML=ON ${PACKAGINGVARS} ../Code/Mantid"

###############################################################################
# Build step
###############################################################################
$SCL_ON_RHEL6 "make -j$BUILD_THREADS"
$SCL_ON_RHEL6 "make -j$BUILD_THREADS AllTests"

###############################################################################
# Run the tests
###############################################################################
# Remove any Mantid.user.properties file
rm -f ~/.mantid/Mantid.user.properties
$SCL_ON_RHEL6 "ctest -j$BUILD_THREADS --schedule-random --output-on-failure -E MantidPlot"
$SCL_ON_RHEL6 "ctest --output-on-failure -R MantidPlot"
###############################################################################
# Documentation
# Only run tests on RHEL6 incremental but have to build html on all platforms
# for a clean build so that it can be packaged
###############################################################################
if [[ "$ON_RHEL6" == true ]]; then
  $SCL_ON_RHEL6 "make docs-test"
fi
if [[ "$CLEANBUILD" == true ]]; then
  # Workaround so that the html target can find the properties file
  # CMake doesn't easily allow environment variables on custom targets
  if [[ $(uname) == 'Darwin' ]]; then
    export MANTIDPATH=$PWD/bin
  fi
  $SCL_ON_RHEL6 "make docs-qthelp"
###############################################################################
# Create the install kit if this is a clean or non-Mac build
###############################################################################
rm -f *.dmg *.rpm *.deb *.tar.gz
# Always build a package on linux
if [[ $(uname) != 'Darwin' ]]; then
  $SCL_ON_RHEL6 "cpack"
fi

if [[ "$CLEANBUILD" == true ]]; then
  # On the Mac, only create a package for clean builds
  if [[ $(uname) == 'Darwin' ]]; then
    $SCL_ON_RHEL6 "cpack"
  # We could build the source tarball anywhere, but we choose to do it on RHEL6
  # We also parcel up the documentation into a tar file that is easier to move around
  # and labelled by the commit id it was built with. This assumes the Jenkins git plugin
  # has set the GIT_COMMIT environment variable
  if [[ "$ON_RHEL6" == true ]]; then
    $SCL_ON_RHEL6 "make docs-html"
    tar -cjf mantiddocs-g${GIT_COMMIT:0:7}.tar.bz2 --exclude='*.buildinfo' --exclude="MantidProject.q*" docs/html
    # The ..._PREFIX argument avoids opt/Mantid directories at the top of the tree
    $SCL_ON_RHEL6 "cpack --config CPackSourceConfig.cmake -D CPACK_PACKAGING_INSTALL_PREFIX="
  fi