#!/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