175 lines
4.5 KiB
Bash
Executable File
175 lines
4.5 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 GNU Lesser General Public License version 2.1, with the *
|
|
#* special exception on linking described in the file LICENSE. *
|
|
#* *
|
|
#**************************************************************************
|
|
|
|
# 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 ignored and the build is always in .
|
|
# 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"
|
|
docheckout=false
|
|
nt=
|
|
|
|
case "$arch" in
|
|
bsd)
|
|
make=gmake
|
|
workdir=.
|
|
;;
|
|
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
|