-
Notifications
You must be signed in to change notification settings - Fork 9
/
appveyor.yml
125 lines (111 loc) · 4.1 KB
/
appveyor.yml
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
########################################################################
## * not all components will be configured
## * build only on a 64-bit environment
## * only builds for release configuration
##
## FAIL: The build takes too long, most components are disabled.
## TODO: but build takes too long... 40 min limit
## * run the self tests after install
########################################################################
version: '{build}'
platform: Win32
configuration:
- Debug
# Operating system (build VM template)
os: Windows Server 2012 R2
# clone directory
clone_folder: c:\projects\mex-it
# whitelisted branches to build
branches:
only:
- master
# global environment variables
environment:
MEX_ROOT: c:\projects\mex-it
OCTAVE_HOME: c:\dev\octave-4.0.0
WITH_MAKE: yes
#TODO: https://savannah.gnu.org/bugs/?41699
# we use octave-cli.exe here instead of octave.exe because of a bug
# in the MinGW/MXE build causing Octave to crash on exit with a segfault
# after having used any GraphicsMagick functions (imread, etc..).
# Even then, we can't always trust Octave's exit code on Windows! It throws
# 0xC0000005 on exit (access violation), even when it runs just fine.
#TODO: The YAML parser report errors if we use % as first char in a command,
# so we cannot just write %OCTAVE%, we must use: call %OCTAVE%
OCTAVE: octave-cli --no-gui --no-window-system
# options in case of makefile (the quotes around the path are needed here!)
MAKE_OPTS: NO_CV_PKGCONFIG_HACK=1 TEST_CONTRIB=true WITH_OCTAVE=1 MATLABDIR='/c/dev/octave-4.0.0'
# immediately finish build if one of the jobs fails
matrix:
fast_finish: true
# disable automatic building/testing/deploying phases, we use custom scripts
build: off
test: off
deploy: off
install:
# download and install dependencies
- if not exist "c:\dev" ( mkdir "c:\dev" )
- cd "c:\dev"
- echo Installing GNU Make ...
- ps: Start-FileDownload "ftp://ftp.equation.com/make/32/make.exe" -FileName mingw32-make.exe
- set "PATH=c:\dev;%PATH%"
- echo Installing Octave ...
- ps: Start-FileDownload "https://ftp.gnu.org/gnu/octave/windows/octave-4.0.0_0.zip" -FileName octave-4.0.0_0.zip
- 7z x "c:\dev\octave-4.0.0_0.zip" -o"c:\dev" -y > nul
- copy /y "%OCTAVE_HOME%\bin\libopenblas.dll" "%OCTAVE_HOME%\bin\libblas.dll" > nul
- set "PATH=%OCTAVE_HOME%\bin;%PATH%"
- ps: Start-FileDownload "http://bitbucket.org/eigen/eigen/get/3.3-beta1.zip" -Filename eigen.zip
- dir "c:\dev"
- 7z x "c:\dev\eigen.zip" -o"%MEX_ROOT%" -y > nul
- cd "%MEX_ROOT%"
- mv eigen-eigen-ce5a455b34c0 .\test\eigen3
- dir "%MEX_ROOT%"
# show info about build tools
#- set
- ver
- systeminfo
- cmake --version
- mingw32-make --version
- g++ --version
- call %OCTAVE% --version
- call %OCTAVE% --eval "pkg list"
before_build:
# create .octaverc file (where we setup path and load required packages on start)
#TODO: due to bug in Octave, we must also add private directories on path
- ps: |
$OctaveRC = @"
crash_dumps_octave_core(false);
more off
cd(getenv('MEX_ROOT'))
addpath(getenv('MEX_ROOT'))
"@
# one for SHELL=sh.exe and one for SHELL=cmd.exe
$HomeDirs = @(
(Join-Path (Join-Path $env:OCTAVE_HOME 'home') $env:USERNAME),
$env:USERPROFILE
)
$HomeDirs | ForEach-Object {
$OctaveRCFile = (Join-Path $_ '.octaverc')
New-Item -ItemType File -Path "$OctaveRCFile" -Force | Out-Null
$OctaveRC | Out-File -FilePath "$OctaveRCFile" -Encoding ASCII
}
cat "$OctaveRCFile"
build_script:
# compile mex-it
- cd "%MEX_ROOT%"
- if "%WITH_MAKE%" == "yes" (
sh --login -c "cd \"$MEX_ROOT\" && mingw32-make $MAKE_OPTS $MAKE_EXTRA all"
) else (
%OCTAVE% --eval "disp('test');"
)
before_test:
# print cv build info
- call %OCTAVE% --eval "path, disp('test')"
test_script:
# run test suite
#TODO: we reset %ERRORLEVEL% because we can't rely on Octave exit code
- if "%WITH_MAKE%" == "yes" (
sh --login -c "cd \"$MEX_ROOT\" && mingw32-make $MAKE_OPTS tests"
) else (
%OCTAVE% --eval "test_vector_example;exit(0);" || ver > nul
)