aboutsummaryrefslogtreecommitdiffstats
path: root/dist/travis/travis-ci.sh
diff options
context:
space:
mode:
Diffstat (limited to 'dist/travis/travis-ci.sh')
-rwxr-xr-xdist/travis/travis-ci.sh131
1 files changed, 131 insertions, 0 deletions
diff --git a/dist/travis/travis-ci.sh b/dist/travis/travis-ci.sh
new file mode 100755
index 000000000..628acceaf
--- /dev/null
+++ b/dist/travis/travis-ci.sh
@@ -0,0 +1,131 @@
+#! /bin/bash
+# This script is executed in the travis-ci environment.
+
+build_img_ghdl() {
+ # Build ghdl/ghdl from ghdl/run
+ echo "travis_fold:start:build_run"
+ travis_time_start
+ printf "$ANSI_BLUE[DOCKER build] ghdl : ${IMAGE_TAG}$ANSI_NOCOLOR\n"
+
+ PKG=`ls | grep -oP 'ghdl-.*tgz'`
+ mkdir tmp-img && cd tmp-img
+ cp ../$PKG ./
+ cp ../BUILD_TOOLS ./
+ echo "FROM ghdl/run:$IMAGE_TAG" > Dockerfile
+ echo "ADD $PKG /usr/local" >> Dockerfile
+ docker build -t ghdl/ghdl:$IMAGE_TAG .
+ cd ..
+ travis_time_finish
+ echo "travis_fold:end:build_run"
+}
+
+#---
+
+set -e
+
+scriptdir=$(dirname $0)
+
+. "$scriptdir/travis-utils.sh"
+. "$scriptdir/../ansi_color.sh"
+#disable_color
+
+# Display env (to debug)
+
+echo -en "travis_fold:start:travis_env\r"
+printf "$ANSI_YELLOW[TRAVIS] Travis environment $ANSI_NOCOLOR\n"
+env | grep TRAVIS
+echo -en "travis_fold:end:travis_env\r"
+
+
+if [ "$IMAGE" = "" ]; then
+ echo "IMAGE not defined"
+ exit 1
+fi
+
+
+echo "travis_fold:start:fetch"
+# The command 'git describe' (used for version) needs the history. Get it.
+# But the following command fails if the repository is complete.
+git fetch --unshallow || true
+
+echo "travis_fold:end:fetch"
+
+
+# Compute package name
+
+PKG_SHORTCOMMIT="$(printf $TRAVIS_COMMIT | cut -c1-10)"
+PKG_VER=`grep "ghdl_version=" configure | sed -e 's/.*"\(.*\)";/\1/'`
+if [ -z "$TRAVIS_TAG" ]; then
+ # No tag: use date + commit id
+ PKG_TAG="$(date -u +%Y%m%d)-$PKG_SHORTCOMMIT";
+elif expr "$TRAVIS_TAG" : 'v[0-9].*' > /dev/null; then
+ # Remove leading 'v' in tags in the filenames.
+ PKG_TAG="$(echo $TRAVIS_TAG | cut -c2-)"
+else
+ # Regular tag (like snapshots), nothing to change.
+ PKG_TAG="$TRAVIS_TAG"
+fi
+
+# Extract from IMAGE (defined in .travis.yml)
+IFS='+' read -ra REFS <<< "$IMAGE"
+DDIST=${REFS[0]} # Linux distro (eg: ubuntuXX, fedoraXX)
+DBLD=${REFS[1]} # Build/backend (eg: mcode, llvm)
+DGPL=${REFS[2]} # GPL or not
+
+PKG_NAME="ghdl-${PKG_TAG}-${DDIST}-${DBLD}"
+BUILD_CMD_OPTS="$ENABLECOLOR -b $DBLD"
+if [ "$DGPL" = "gpl" ]; then
+ BUILD_CMD_OPTS="$BUILD_CMD_OPTS --gpl"
+ PKG_NAME="ghdl-gpl-${PKG_TAG}"
+fi
+BUILD_CMD_OPTS="${BUILD_CMD_OPTS} -p $PKG_NAME"
+
+echo "build cmd: $BUILD_CMD_OPTS"
+
+
+# Build
+
+if [ "$TRAVIS_OS_NAME" = "osx" ]; then
+ # Install gnat compiler (use cache)
+ ./dist/macosx/install-ada.sh || exit 1
+ PATH=$PWD/gnat/bin:$PATH
+
+ bash -c "${scriptdir}/build.sh $BUILD_CMD_OPTS"
+else
+ # Assume linux
+
+ # Build version.tmp and replace version.in with it (so that the version is
+ # correctly set).
+ # This is a little bit hack-ish, as it assumes that 'git' is not
+ # available in docker (otherwise it will describe as -dirty
+ # because this modifies the source file version.in).
+ ghdl_version_line=`grep -e '^ghdl_version' configure`
+ make -f Makefile.in srcdir=. $ghdl_version_line version.tmp
+ cp version.tmp src/version.in
+
+ # Run build in docker
+ IMAGE_TAG=`echo $IMAGE | sed -e 's/+/-/g'`
+ docker run --rm -t -v $(pwd):/work -w "/work" ghdl/build:$IMAGE_TAG bash -c "${scriptdir}/build.sh $BUILD_CMD_OPTS"
+fi
+
+if [ ! -f build_ok ]; then
+ printf "$ANSI_RED[TRAVIS] BUILD failed $ANSI_NOCOLOR\n"
+ exit 1
+fi
+
+
+# Test
+
+if [ "$TRAVIS_OS_NAME" = "osx" ]; then
+ bash -c "prefix=$(realpath ./install-mcode) ${scriptdir}/test.sh $BUILD_CMD_OPTS"
+else
+ # Build ghdl/ghdl:$IMAGE_TAG image
+ build_img_ghdl
+ # Run test in docker container
+ docker run --rm -t -v $(pwd):/work -w "/work" ghdl/ghdl:$IMAGE_TAG bash -c "GHDL=ghdl ${scriptdir}/test.sh $BUILD_CMD_OPTS"
+fi
+
+if [ ! -f test_ok ]; then
+ printf "$ANSI_RED[TRAVIS] TEST failed $ANSI_NOCOLOR\n"
+ exit 1
+fi