Imported Upstream version 2.1.10
[platform/upstream/libevent.git] / Vagrantfile
1 # -*- mode: ruby -*-
2 # vi: set ft=ruby :
3
4 # DESCRIPTION:
5 # ============
6 # Vagrant for running libevent tests with:
7 # - timeout 30min, to avoid hungs
8 # - run tests in parallel under ctest (10 concurency)
9 # - if you have uncommited changes, you should commit them first to check
10 # - unix only, because of some tar'ing to avoid one vm affect another
11 #
12 # ENVIRONMENT:
13 # ============
14 # - NO_PKG        -- do not install packages
15 # - NO_CMAKE      -- do not run with cmake
16 # - NO_AUTOTOOLS  -- do not run with autoconf/automake
17
18 Vagrant.configure("2") do |config|
19   # to allow running boxes provisions in parallel, we can't share the same dirs
20   # via virtualbox, however sometimes it is the only way, so instead let's
21   # create an archive of HEAD (this way we will not have any trash there) and
22   # extract it for every box to the separate folder.
23   #
24   # P.S. we will change this --prefix with tar(1) --trasnform
25   system('git archive --prefix=libevent/ --output=.vagrant/libevent.tar HEAD')
26
27   config.vm.provider "virtualbox" do |vb|
28     vb.memory = "512"
29
30     # otherwise osx fails, anyway we do not need this
31     vb.customize ["modifyvm", :id, "--usb", "off"]
32     vb.customize ["modifyvm", :id, "--usbehci", "off"]
33   end
34
35   # disable /vagrant share, in case we will not use default mount
36   config.vm.synced_folder ".", "/vagrant", disabled: true
37
38   config.vm.define "ubuntu" do |ubuntu|
39     system('tar --overwrite --transform=s/libevent/libevent-linux/ -xf .vagrant/libevent.tar -C .vagrant/')
40
41     ubuntu.vm.box = "ubuntu/xenial64"
42     ubuntu.vm.synced_folder ".vagrant/libevent-linux", "/vagrant",
43       type: "rsync"
44
45     if ENV['NO_PKG'] != "true"
46       ubuntu.vm.provision "shell", inline: <<-SHELL
47         apt-get update
48         apt-get install -y zlib1g-dev libssl-dev python2.7
49         apt-get install -y build-essential cmake ninja-build
50         apt-get install -y autoconf automake libtool
51       SHELL
52     end
53
54     if ENV['NO_CMAKE'] != "true"
55       ubuntu.vm.provision "shell", privileged: false, inline: <<-SHELL
56         cd /vagrant
57         rm -fr .cmake-vagrant
58         mkdir -p .cmake-vagrant
59         cd .cmake-vagrant
60         cmake -G Ninja ..
61
62         export CTEST_TEST_TIMEOUT=1800
63         export CTEST_OUTPUT_ON_FAILURE=1
64         export CTEST_PARALLEL_LEVEL=20
65         cmake --build . --target verify
66       SHELL
67     end
68
69     if ENV['NO_AUTOTOOLS'] != "true"
70       ubuntu.vm.provision "shell", privileged: false, inline: <<-SHELL
71         cd /vagrant
72         ./autogen.sh
73         ./configure
74         make -j20 verify
75       SHELL
76     end
77   end
78
79   config.vm.define "freebsd" do |freebsd|
80     system('tar --overwrite --transform=s/libevent/libevent-freebsd/ -xf .vagrant/libevent.tar -C .vagrant/')
81
82     freebsd.vm.box = "freebsd/FreeBSD-11.0-STABLE"
83     freebsd.vm.synced_folder ".vagrant/libevent-freebsd", "/vagrant",
84       type: "rsync", group: "wheel"
85
86     # otherwise reports error
87     freebsd.ssh.shell = "sh"
88
89     if ENV['NO_PKG'] != "true"
90       freebsd.vm.provision "shell", inline: <<-SHELL
91         pkg install --yes openssl cmake ninja automake autotools
92       SHELL
93     end
94
95     if ENV['NO_CMAKE'] != "true"
96       freebsd.vm.provision "shell", privileged: false, inline: <<-SHELL
97         cd /vagrant
98         rm -fr .cmake-vagrant
99         mkdir -p .cmake-vagrant
100         cd .cmake-vagrant
101         cmake -G Ninja ..
102
103         export CTEST_TEST_TIMEOUT=1800
104         export CTEST_OUTPUT_ON_FAILURE=1
105         export CTEST_PARALLEL_LEVEL=20
106         cmake --build . --target verify
107       SHELL
108     end
109
110     if ENV['NO_AUTOTOOLS'] != "true"
111       freebsd.vm.provision "shell", privileged: false, inline: <<-SHELL
112         cd /vagrant
113         ./autogen.sh
114         ./configure
115         make -j20 verify
116       SHELL
117     end
118   end
119
120   config.vm.define "netbsd" do |netbsd|
121     system('tar --overwrite --transform=s/libevent/libevent-netbsd/ -xf .vagrant/libevent.tar -C .vagrant/')
122
123     netbsd.vm.box = "kja/netbsd-7-amd64"
124     netbsd.vm.synced_folder ".vagrant/libevent-netbsd", "/vagrant",
125       type: "rsync", group: "wheel"
126
127     if ENV['NO_PKG'] != "true"
128       netbsd.vm.provision "shell", inline: <<-SHELL
129         export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/7.0_2016Q2/All/"
130         pkg_add ncurses ninja-build automake cmake libtool
131       SHELL
132     end
133
134     if ENV['NO_CMAKE'] != "true"
135       netbsd.vm.provision "shell", privileged: false, inline: <<-SHELL
136         cd /vagrant
137         rm -fr .cmake-vagrant
138         mkdir -p .cmake-vagrant
139         cd .cmake-vagrant
140         cmake -G Ninja ..
141
142         export CTEST_TEST_TIMEOUT=1800
143         export CTEST_OUTPUT_ON_FAILURE=1
144         export CTEST_PARALLEL_LEVEL=20
145         cmake --build . --target verify
146       SHELL
147     end
148
149     if ENV['NO_AUTOTOOLS'] != "true"
150       netbsd.vm.provision "shell", privileged: false, inline: <<-SHELL
151         cd /vagrant
152         ./autogen.sh
153         ./configure
154         make -j20 verify
155       SHELL
156     end
157   end
158
159   config.vm.define "solaris" do |solaris|
160     system('tar --overwrite --transform=s/libevent/libevent-solaris/ -xf .vagrant/libevent.tar -C .vagrant/')
161
162     # XXX:
163     # - solaris do not have '-or' it only has '-o' for find(1), so we can't use
164     #   rsync
165     # - and autoconf(1) doesn't work on virtualbox share, ugh
166     solaris.vm.synced_folder ".vagrant/libevent-solaris", "/vagrant-vbox",
167       type: "virtualbox"
168
169     solaris.vm.box = "tnarik/solaris10-minimal"
170     if ENV['NO_PKG'] != "true"
171       # TODO: opencsw does not include ninja(1)
172       solaris.vm.provision "shell", inline: <<-SHELL
173         pkgadd -d http://get.opencsw.org/now
174         pkgutil -U
175         pkgutil -y -i libssl_dev cmake rsync python gmake gcc5core automake autoconf libtool
176       SHELL
177     end
178
179     # copy from virtualbox mount to newly created folder
180     solaris.vm.provision "shell", privileged: false, inline: <<-SHELL
181       rm -fr ~/vagrant
182       cp -r /vagrant-vbox ~/vagrant
183     SHELL
184
185     if ENV['NO_CMAKE'] != "true"
186       # builtin compiler cc(1) is a wrapper, so we should use gcc5 manually,
187       # otherwise it will not work.
188       # Plus we should set some paths so that cmake/compiler can find tham.
189       solaris.vm.provision "shell", privileged: false, inline: <<-SHELL
190         export CMAKE_INCLUDE_PATH=/opt/csw/include
191         export CMAKE_LIBRARY_PATH=/opt/csw/lib
192         export CFLAGS=-I$CMAKE_INCLUDE_PATH
193         export LDFLAGS=-L$CMAKE_LIBRARY_PATH
194
195         cd ~/vagrant
196         rm -rf .cmake-vagrant
197         mkdir -p .cmake-vagrant
198         cd .cmake-vagrant
199         cmake -DCMAKE_C_COMPILER=gcc ..
200
201         export CTEST_TEST_TIMEOUT=1800
202         export CTEST_OUTPUT_ON_FAILURE=1
203         export CTEST_PARALLEL_LEVEL=20
204         cmake --build . --target verify
205       SHELL
206     end
207
208     if ENV['NO_AUTOTOOLS'] != "true"
209       # and we should set MAKE for `configure` otherwise it will try to use
210       # `make`
211       solaris.vm.provision "shell", privileged: false, inline: <<-SHELL
212         cd ~/vagrant
213         ./autogen.sh
214         MAKE=gmake ./configure
215         gmake -j20 verify
216       SHELL
217     end
218   end
219
220   # known failures:
221   # - sometimes vm hangs
222   config.vm.define "osx" do |osx|
223     system('tar --overwrite --transform=s/libevent/libevent-osx/ -xf .vagrant/libevent.tar -C .vagrant/')
224
225     osx.vm.synced_folder ".vagrant/libevent-osx", "/vagrant",
226       type: "rsync", group: "wheel"
227
228     osx.vm.box = "jhcook/osx-elcapitan-10.11"
229     if ENV['NO_PKG'] != "true"
230       osx.vm.provision "shell", privileged: false, inline: <<-SHELL
231         ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
232
233         brew uninstall libtool
234         brew install libtool openssl ninja cmake autoconf automake
235       SHELL
236     end
237
238     if ENV['NO_CMAKE'] != "true"
239       # we should set some paths so that cmake/compiler can find tham
240       osx.vm.provision "shell", privileged: false, inline: <<-SHELL
241         export OPENSSL_ROOT=$(echo /usr/local/Cellar/openssl/*)
242         export CMAKE_INCLUDE_PATH=$OPENSSL_ROOT/include
243         export CMAKE_LIBRARY_PATH=$OPENSSL_ROOT/lib
244
245         cd /vagrant
246         mkdir -p .cmake-vagrant
247         cd .cmake-vagrant
248         cmake -G Ninja ..
249
250         export CTEST_TEST_TIMEOUT=1800
251         export CTEST_OUTPUT_ON_FAILURE=1
252         export CTEST_PARALLEL_LEVEL=20
253         cmake --build . --target verify
254       SHELL
255     end
256
257     if ENV['NO_AUTOTOOLS'] != "true"
258       osx.vm.provision "shell", privileged: false, inline: <<-SHELL
259         export OPENSSL_ROOT=$(echo /usr/local/Cellar/openssl/*)
260         export CFLAGS=-I$OPENSSL_ROOT/include
261         export LDFLAGS=-L$OPENSSL_ROOT/lib
262
263         cd /vagrant
264         ./autogen.sh
265         ./configure
266         make -j20 verify
267       SHELL
268     end
269   end
270
271   config.vm.define "centos" do |centos|
272     system('tar --overwrite --transform=s/libevent/libevent-centos/ -xf .vagrant/libevent.tar -C .vagrant/')
273
274     centos.vm.synced_folder ".vagrant/libevent-centos", "/vagrant",
275       type: "rsync", group: "wheel"
276
277     centos.vm.box = "centos/7"
278     if ENV['NO_PKG'] != "true"
279       centos.vm.provision "shell", inline: <<-SHELL
280         echo "[russianfedora]" > /etc/yum.repos.d/russianfedora.repo
281         echo name=russianfedora >> /etc/yum.repos.d/russianfedora.repo
282         echo baseurl=http://mirror.yandex.ru/fedora/russianfedora/russianfedora/free/el/releases/7/Everything/x86_64/os/ >> /etc/yum.repos.d/russianfedora.repo
283         echo enabled=1 >> /etc/yum.repos.d/russianfedora.repo
284         echo gpgcheck=0 >> /etc/yum.repos.d/russianfedora.repo
285       SHELL
286       centos.vm.provision "shell", inline: <<-SHELL
287         yum -y install zlib-devel openssl-devel python
288         yum -y install gcc cmake ninja-build
289         yum -y install autoconf automake libtool
290       SHELL
291     end
292
293     if ENV['NO_CMAKE'] != "true"
294       centos.vm.provision "shell", privileged: false, inline: <<-SHELL
295         cd /vagrant
296         rm -fr .cmake-vagrant
297         mkdir -p .cmake-vagrant
298         cd .cmake-vagrant
299         cmake -G Ninja ..
300
301         export CTEST_TEST_TIMEOUT=1800
302         export CTEST_OUTPUT_ON_FAILURE=1
303         export CTEST_PARALLEL_LEVEL=20
304         cmake --build . --target verify
305       SHELL
306     end
307
308     if ENV['NO_AUTOTOOLS'] != "true"
309       centos.vm.provision "shell", privileged: false, inline: <<-SHELL
310         cd /vagrant
311         ./autogen.sh
312         ./configure
313         make -j20 verify
314       SHELL
315     end
316   end
317
318   # known failures:
319   # - issues with timers (not enough allowed error)
320   config.vm.define "win" do |win|
321     system('tar --overwrite --transform=s/libevent/libevent-win/ -xf .vagrant/libevent.tar -C .vagrant/')
322
323     # 512MB not enough after libtool install, huh
324     win.vm.provider "virtualbox" do |vb|
325       vb.memory = "1024"
326     end
327
328     # windows does not have rsync builtin, let's use virtualbox for now
329     win.vm.synced_folder ".vagrant/libevent-win", "/vagrant",
330       type: "virtualbox"
331
332     win.vm.box = "senglin/win-10-enterprise-vs2015community"
333     if ENV['NO_PKG'] != "true"
334       # box with vs2015 does not have C++ support, so let's install it manually
335       # plus chocolatey that includes in this box, can't handle sha1 checksum for
336       # cmake.install, so let's update it<
337       win.vm.provision "shell", inline: <<-SHELL
338         choco upgrade -y chocolatey -pre -f
339         choco install -y VisualStudioCommunity2013
340         choco install -y openssl.light
341         choco install -y cygwin cyg-get
342         choco install -y cmake
343         choco install -y cmake.install
344         choco install -y python2
345       SHELL
346
347       # chocolatey openssl.light package does not contains headers
348       win.vm.provision "shell", inline: <<-SHELL
349         (new-object System.Net.WebClient).DownloadFile('http://strcpy.net/packages/Win32OpenSSL-1_0_2a.exe', '/openssl.exe')
350         /openssl.exe /silent /verysilent /sp- /suppressmsgboxes
351       SHELL
352
353       # XXX:
354       # - cyg-get depends from cygwinsetup.exe
355       #   https://github.com/chocolatey/chocolatey-coreteampackages/issues/200
356       # - cyg-get only downloads, do not installs them, ugh. so let's do not use
357       #   it
358       win.vm.provision "shell", privileged: false, inline: <<-SHELL
359         (new-object System.Net.WebClient).DownloadFile('https://cygwin.com/setup-x86_64.exe', '/tools/cygwin/cygwinsetup.exe')
360
361         $env:PATH="/tools/cygwin/bin;$($env:PATH);/tools/cygwin"
362
363         cygwinsetup --root c:/tools/cygwin/ --local-package-dir c:/tools/cygwin/packages/ --no-desktop --no-startmenu --verbose --quiet-mode --download --packages automake,autoconf,gcc-core,libtool,make,python,openssl-devel
364         cygwinsetup --root c:/tools/cygwin/ --local-package-dir c:/tools/cygwin/packages/ --no-desktop --no-startmenu --verbose --quiet-mode --local-install --packages automake,autoconf,gcc-core,libtool,make,python,openssl-devel
365       SHELL
366     end
367
368     if ENV['NO_CMAKE'] != "true"
369       win.vm.provision "shell", privileged: false, inline: <<-SHELL
370         $env:PATH="/Program Files/CMake/bin;/tools/python2;$($env:PATH)"
371
372         cd /vagrant
373         Remove-Item -Recurse -Force .cmake-vagrant
374         mkdir -p .cmake-vagrant
375         cd .cmake-vagrant
376         cmake -G "Visual Studio 12" ..
377
378         $env:CTEST_TEST_TIMEOUT = "1800"
379         $env:CTEST_OUTPUT_ON_FAILURE = "1"
380         $env:CTEST_PARALLEL_LEVEL = "10"
381         cmake --build . --target verify
382       SHELL
383     end
384
385     if ENV['NO_AUTOTOOLS'] != "true"
386       win.vm.provision "shell", privileged: false, inline: <<-SHELL
387         $env:PATH="/tools/cygwin/bin;$($env:PATH)"
388
389         bash -lc "echo 'C:/tools/mingw64 /mingw ntfs binary 0 0' > /etc/fstab"
390         bash -lc "echo 'C:/OpenSSL-Win32 /ssl ntfs binary 0 0' >> /etc/fstab"
391         bash -lc "echo 'C:/vagrant /vagrant ntfs binary 0 0' >> /etc/fstab"
392
393         bash -lc "exec 0</dev/null; exec 2>&1; cd /vagrant; bash -x ./autogen.sh && ./configure LDFLAGS='-L/ssl -L/ssl/lib -L/ssl/lib/MinGW' CFLAGS=-I/ssl/include && make -j20 verify"
394       SHELL
395     end
396   end
397 end