ocaml/tools/ci-build

172 lines
4.3 KiB
Bash
Executable File

#!/bin/sh
#########################################################################
# #
# OCaml #
# #
# Damien Doligez, projet Gallium, INRIA Rocquencourt #
# #
# Copyright 2014 Institut National de Recherche en Informatique et #
# en Automatique. All rights reserved. This file is distributed #
# under the terms of the Q Public License version 1.0. #
# #
#########################################################################
# This script is run on our continuous-integration servers to recompile
# from scratch and run the test suite.
# arguments:
# 1. architecture: bsd, macos, linux, cygwin, mingw, mingw64, msvc, msvc64
# 2. directory in which to build (trunk, 4.02, etc)
# for windows, this is relative to $HOME/jenkins-workspace
# for bsd, macos, linux, this is "." or an absolute directory
# 3. options:
# -conf configure-option
# -patch1 file-name apply patch with -p1
error () {
echo "$1" >&2
exit 3
}
quote1 () {
printf "'%s'" "`printf %s "$1" | sed -e "s/'/'\\\\\\\\''/g"`";
}
#########################################################################
# be verbose
set -x
#########################################################################
# "Parse" mandatory command-line arguments.
arch="$1"
branch="$2"
shift 2
#########################################################################
# If we are called from a Windows batch script, we must set up the
# Unix environment variables (e.g. PATH).
case "$arch" in
bsd|macos|linux) ;;
cygwin|mingw|mingw64)
. /etc/profile
. "$HOME/.profile"
;;
msvc)
. /etc/profile
. "$HOME/.profile"
. "$HOME/.msenv32"
;;
msvc64)
. /etc/profile
. "$HOME/.profile"
. "$HOME/.msenv64"
;;
*) error "unknown architecture: $arch";;
esac
#########################################################################
# be verbose and stop on error
set -ex
#########################################################################
# set up variables
# default values
make=make
instdir="$HOME/ocaml-tmp-install"
workdir="$branch"
docheckout=false
nt=
case "$arch" in
bsd)
make=gmake
;;
macos)
workdir=.
;;
linux)
workdir=.
;;
cygwin)
workdir="$HOME/jenkins-workspace/$branch"
docheckout=true
;;
mingw)
instdir=/cygdrive/c/ocamlmgw
workdir="$HOME/jenkins-workspace/$branch"
docheckout=true
nt=.nt
;;
mingw64)
instdir=/cygdrive/c/ocamlmgw64
workdir="$HOME/jenkins-workspace/$branch"
docheckout=true
nt=.nt
;;
msvc)
instdir=/cygdrive/c/ocamlms
workdir="$HOME/jenkins-workspace/$branch"
docheckout=true
nt=.nt
;;
msvc64)
instdir=/cygdrive/c/ocamlms64
workdir="$HOME/jenkins-workspace/$branch"
docheckout=true
nt=.nt
;;
*) error "unknown architecture: $arch";;
esac
#########################################################################
# Go to the right directory
pwd
cd "$workdir"
#########################################################################
# parse optional command-line arguments (has to be done after the "cd")
# Configure options are not allowed to have spaces or special characters
# for the moment. We'll fix that when needed.
confoptions=""
while [ $# -gt 0 ]; do
case $1 in
-conf) confoptions="$confoptions `quote1 "$2"`"; shift 2;;
-patch1) patch -f -p1 <"$2"; shift 2;;
*) error "unknown option $1";;
esac
done
#########################################################################
# Do the work
# Tell gcc to use only ASCII in its diagnostic outputs.
export LC_ALL=C
$make -f Makefile$nt distclean || :
if $docheckout; then
git pull
fi
case $nt in
"") eval "./configure -prefix '$instdir' $confoptions";;
.nt)
cp config/m-nt.h config/m.h
cp config/s-nt.h config/s.h
cp config/Makefile.$arch config/Makefile
;;
*) error "internal error";;
esac
$make -f Makefile$nt world.opt
$make -f Makefile$nt install
rm -rf "$instdir"
cd testsuite
$make all