jan@112: #!/bin/bash jan@112: jan@112: # Simple Unix shell script to build STX:LIBJAVA using Jenkins CI jan@112: # Actually, it is used on Windows (with UnxUtils) as well. jan@112: jan@112: PROJECT="STX_LIBJAVA" jan@112: jan@112: # Determine operating system, bit simple but works jan@112: if [ "$OS" == "Windows_NT" ]; then jan@112: WIN32=1 jan@112: UNIX=0 jan@112: else jan@112: WIN32=0 jan@112: UNIX=1 jan@112: fi jan@112: jan@112: # Setup... jan@112: if [ "$WIN32" == "1" ]; then jan@112: # WINDOWS jan@112: # MUST export this, otherwise libjpeg fails to build!!!" jan@112: export BCB="C:\Borland\BCC55" jan@112: # To make cvs/ssh happy jan@112: export CVS_RSH=plink jan@112: # Set home jan@112: export HOME=$USERPROFILE jan@112: # Defaults jan@112: export CVSROOT=":pserver:jenkinsBuild:blablu@cvs.bh.exept.de:/cvs/stx" jan@112: # Make using bmake here..." jan@112: MAKE="cmd /C bmake.bat" jan@112: else jan@112: # LINUX jan@112: # to get Mercurial jan@112: export PATH=$PATH:/home/vrany/bin jan@226: if [ $(uname -n) == 'exeptn' ]; then jan@226: # On exeptn, default Java is 1.4, sigh jan@226: export PATH=/usr/java/jdk1.7.0_13/bin:$PATH jan@226: fi jan@226: jan@112: # Make using regular make here..." jan@112: MAKE=make jan@112: # Defaults jan@112: export CVSROOT="/cvs/stx" jan@112: fi jan@112: jan@112: jan@112: jan@112: # Sorry, it's lot easier for JV to have all the messages in EN :-) jan@112: export LANG=en_GB.UTF-8 jan@112: jan@112: jan@112: # When run interactively, Jenkins env variables jan@112: # may not be set... jan@112: if [ -z "$WORKSPACE" ]; then jan@112: WORKSPACE="$PWD" jan@112: INTERACTIVE=1 jan@112: else jan@112: INTERACTIVE=0 jan@112: fi jan@112: jan@112: if [ "$INTERACTIVE" == "0" ]; then jan@112: if [ "$WIN32" == "1" ]; then jan@112: WORKSPACE="$PWD" jan@112: fi jan@112: fi jan@112: jan@112: if [ -z "$BUILD_NUMBER" ]; then jan@112: BUILD_NUMBER=$(date +%Y_%m_%d_interactive) jan@112: fi jan@112: jan@112: #BUILD="$WORKSPACE/${PROJECT}_${BUILD_NUMBER}_linux_build" jan@112: BUILD="build" jan@112: jan@112: jan@112: echo "INFO: BUILD=\"$BUILD\"" jan@112: jan@112: if [ -d "$BUILD" ]; then jan@112: echo "WARN: Build directory already exists!" jan@112: else jan@112: mkdir -p "$BUILD" jan@112: fi jan@112: jan@112: pushd "$BUILD" jan@112: jan@226: function checkout_hg { jan@226: local directory=$1 jan@226: local repository=$2 jan@226: local branch=$3 jan@226: jan@226: if [ -z "$branch" ]; then jan@226: branch=default jan@226: fi jan@226: jan@226: if [ -d "$directory/CVS" ]; then jan@226: rm -rf "$directory" jan@226: fi jan@226: jan@226: if [ ! -d "$directory" ]; then jan@226: if ! hg clone "$repository" "$directory" -b "$branch"; then jan@226: echo "ERROR: HG: Cannot clone $directory"; jan@226: exit; jan@226: fi jan@226: else jan@226: if ! hg --cwd "$directory" pull; then jan@226: echo "ERROR: HG: Cannot pull $directory"; jan@226: exit; jan@226: fi jan@226: if ! hg --cwd "$directory" update; then jan@226: echo "ERROR: HG: Cannot update $directory"; jan@226: exit; jan@226: fi jan@226: fi jan@226: jan@226: } jan@226: jan@226: jan@112: if [ -z "$SKIP_CHECKOUT" ]; then jan@112: jan@112: echo "INFO: Checking out source code" jan@226: jan@112: # Checkout stx jan@112: if [ ! -d stx ]; then jan@112: if ! cvs co stx; then jan@226: echo "ERROR: CVS: Cannot checkout stx"; jan@112: exit; jan@112: fi jan@112: else jan@113: (cd stx && cvs update -d) jan@112: fi jan@226: jan@226: checkout_hg stx/stc /home/vrany/repositories/hg/stx.stc jv jan@226: checkout_hg stx/librun /home/vrany/repositories/hg/stx.librun jv jan@112: jan@226: # stx:libjava repo is huge, so first update from local cache jan@226: # and then fetch updates from BitBucket. jan@226: if [ $(uname -n) == 'exeptn' ]; then jan@226: checkout_hg stx/libjava /home/vrany/repositories/hg/stx.libjava development jan@112: fi jan@226: checkout_hg stx/libjava https://janvrany@bitbucket.org/janvrany/stx-libjava development jan@112: jan@112: else jan@112: echo "INFO: Checkout skipped (SKIP_CHECKOUT=$SKIP_CHECKOUT)" jan@112: fi jan@112: jan@112: # Compile jan@112: jan@112: if [ -z "$SKIP_COMPILE" ]; then jan@112: jan@226: if [ "$UNIX" == "1" ]; then jan@226: if [ ! -f stx/configurations/myConf ]; then jan@226: (cd stx && ./CONFIG) jan@226: fi jan@226: # Hack... jan@227: if [ ! -f stx/stc/makefile ]; then jan@227: (cd stx/stc && ../rules/stmkmf) jan@227: fi jan@226: if [ ! -f stx/librun/makefile ]; then jan@226: (cd stx/librun && ../rules/stmkmf) jan@226: fi jan@226: fi jan@226: jan@112: echo "INFO: Compiling" jan@112: TARGETS1="stx stx/libjava stx/goodies/petitparser stx/libjava/tools stx/libjava/experiments stx/projects/smalltalk stx/librun" jan@112: for target in $TARGETS1; do jan@112: if ! (cd "$target" && $MAKE); then jan@112: echo "ERROR: cannot $MAKE in $target" jan@112: exit 3 jan@112: fi jan@112: done jan@226: jan@112: else jan@112: echo "INFO: Compilation skipped (SKIP_COMPILE=$SKIP_COMPILE)" jan@112: fi jan@112: jan@112: popd jan@112: jan@112: echo "INFO: $PROJECT SUCCESSFULLY BUILT"