forked from ocaml/opam-repository
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis-ci.sh
executable file
·171 lines (154 loc) · 4.19 KB
/
.travis-ci.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
bash -c "while true; do echo \$(date) - building ...; sleep 360; done" &
PING_LOOP_PID=$!
# Variable value from .travis.yml - probably overridden during install step
BUILD_OCAML_VERSION=$OCAML_VERSION
# generated during the install step
source .travis-ocaml.env
# display info about OS distribution and version
case $TRAVIS_OS_NAME in
osx) sw_vers ;;
*) cat /etc/*-release
lsb_release -a
uname -a
cat /proc/version
;;
esac
echo OCAML_VERSION=$OCAML_VERSION
echo OPAM_SWITCH=$OPAM_SWITCH
echo pull req: $TRAVIS_PULL_REQUEST
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
curl -L https://github.com/$TRAVIS_REPO_SLUG/pull/$TRAVIS_PULL_REQUEST.diff -o pullreq.diff
else
git show > pullreq.diff.tmp
merge=`grep "^Merge: " pullreq.diff.tmp | awk -F: '{print $2}'`
if [ "$merge" = "" ]; then
echo Not a merge
mv pullreq.diff.tmp pullreq.diff
else
echo Merge detected, extracting $merge diff
git show $merge > pullreq.diff
fi
fi
echo OCaml version
ocaml -version
echo OPAM versions
opam --version
opam --git-version
export OPAMYES=1
case $TRAVIS_OS_NAME in
osx) export OPAMFETCH=wget ;;
esac
cd $TRAVIS_BUILD_DIR
echo Pull request:
cat pullreq.diff
# CR: this will be replaced with the OCamlot analysis of affected packages
cat pullreq.diff | sed -E -n -e 's,\+\+\+ b/packages/[^/]*/([^/]*)/.*,\1,p' | sort -u > tobuild.txt
echo To Build:
cat tobuild.txt
function opam_version_compat {
local OPAM_MAJOR OPAM_MINOR ocamlv bytev
if [ -n "$opam_version_compat_done" ]; then return; fi
opam_version_compat_done=1
OPAM_MAJOR=${OPAM_VERSION%%.*}
OPAM_MINOR=${OPAM_VERSION#*.}
OPAM_MINOR=${OPAM_MINOR%%.*}
if [ $OPAM_MAJOR -eq 1 ] && [ $OPAM_MINOR -lt 2 ]; then
opam_version_11=1
ocamlv=$(ocamlrun -vnum)
bytev=${ocamlv%.*}
curl -L https://opam.ocaml.org/repo_compat_1_1.byte$bytev -o compat.byte
ocamlrun compat.byte
fi
}
opam_version_compat
function build_switch {
rm -rf ~/.opam
echo "build switch: $OPAM_SWITCH"
if [ -n "${opam_version_11}" ]; then
# Hide OCaml build log
if opam init . --comp=$OPAM_SWITCH > build.log 2>&1 ; then
echo -n
else
rc=$?
cat build.log
exit $rc
fi
else
opam init . --comp=$OPAM_SWITCH
fi
eval `opam config env`
}
function build_one {
pkg=$1
echo "build one: $pkg"
# test for installability
echo "Checking for availability..."
if ! opam install $pkg --dry-run; then
echo "Package unavailable."
if opam show $pkg; then
echo "Package is unavailable on this configuration, skipping:"
opam install $pkg --dry-run || true
else
echo "ERROR: Package not found."
echo "Maybe its definition failed to parse, check above."
false
fi
else
echo "... package available."
echo
echo "====== External dependency handling ======"
opam install depext
# No --build-tests option on opam depext, workaround from https://github.com/ocaml/opam-depext/issues/10#issuecomment-93882764
depext=$(OPAMBUILDTEST=1 opam depext -ls $pkg --no-sources)
OPAMBUILDTEST=1 opam depext $pkg
echo
echo "====== Installing dependencies ======"
opam install --deps-only $pkg
echo
echo "====== Installing package ======"
opam install -t -v $pkg
opam remove -a ${pkg%%.*}
if [ "$depext" != "" ]; then
case $TRAVIS_OS_NAME in
linux)
sudo apt-get remove $depext
sudo apt-get autoremove
;;
osx)
brew remove $depext
;;
esac
fi
fi
}
build_switch
INSTALL_CAMLP4=0
if [[ $OPAM_SWITCH = "system" ]] ; then
for i in $(cat tobuild.txt) ; do
if opam install $i --build-test --deps-only --show | grep "\<camlp4\>" > /dev/null 2>&1 ; then
INSTALL_CAMLP4=1
break
fi
done
fi
if [[ $INSTALL_CAMLP4 -eq 1 ]] ; then
case $BUILD_OCAML_VERSION in
4.02)
CAMLP4_RELEASE=7
;;
*)
CAMLP4_RELEASE=1
;;
esac
opam install ocamlbuild
opam source camlp4.$BUILD_OCAML_VERSION+$CAMLP4_RELEASE
cd camlp4*
./configure --bindir=/usr/local/bin --libdir=/usr/local/lib/ocaml
make all
sudo make install
cd ..
fi
for i in `cat tobuild.txt`; do
build_one $i
done
kill $PING_LOOP_PID