1
1
language : cpp
2
- dist : trusty
3
- sudo : false
4
2
matrix :
5
3
include :
6
4
# This config does a few things:
@@ -11,14 +9,14 @@ matrix:
11
9
# also tests the automatic discovery functions in CMake (Python version, C++ standard).
12
10
- os : linux
13
11
dist : xenial # Necessary to run doxygen 1.8.15
14
- env : STYLE DOCS PIP
12
+ name : Style, docs, and pip
15
13
cache : false
16
14
before_install :
17
15
- pyenv global $(pyenv whence 2to3) # activate all python versions
18
16
- PY_CMD=python3
19
17
- $PY_CMD -m pip install --user --upgrade pip wheel setuptools
20
- install :
21
- - $PY_CMD -m pip install --user --upgrade sphinx sphinx_rtd_theme breathe flake8 pep8-naming pytest
18
+ install : # Breathe does not yet support Sphinx 2
19
+ - $PY_CMD -m pip install --user --upgrade " sphinx<2" sphinx_rtd_theme breathe flake8 pep8-naming pytest
22
20
- curl -fsSL https://sourceforge.net/projects/doxygen/files/rel-1.8.15/doxygen-1.8.15.linux.bin.tar.gz/download | tar xz
23
21
- export PATH="$PWD/doxygen-1.8.15/bin:$PATH"
24
22
script :
@@ -33,62 +31,119 @@ matrix:
33
31
diff -rq $installed ./include/pybind11
34
32
- |
35
33
# Barebones build
36
- cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD)
34
+ cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD) .
37
35
make pytest -j 2
38
36
make cpptest -j 2
39
37
# The following are regular test configurations, including optional dependencies.
40
38
# With regard to each other they differ in Python version, C++ standard and compiler.
41
39
- os : linux
40
+ dist : trusty
41
+ name : Python 2.7, c++11, gcc 4.8
42
42
env : PYTHON=2.7 CPP=11 GCC=4.8
43
43
addons :
44
44
apt :
45
- packages : [cmake=2.\*, cmake-data=2.\*]
45
+ packages :
46
+ - cmake=2.\*
47
+ - cmake-data=2.\*
46
48
- os : linux
49
+ dist : trusty
50
+ name : Python 3.6, c++11, gcc 4.8
47
51
env : PYTHON=3.6 CPP=11 GCC=4.8
48
52
addons :
49
53
apt :
50
- sources : [deadsnakes]
51
- packages : [python3.6-dev python3.6-venv, cmake=2.\*, cmake-data=2.\*]
52
- - sudo : true
53
- services : docker
54
+ sources :
55
+ - deadsnakes
56
+ packages :
57
+ - python3.6-dev
58
+ - python3.6-venv
59
+ - cmake=2.\*
60
+ - cmake-data=2.\*
61
+ - os : linux
62
+ dist : trusty
54
63
env : PYTHON=2.7 CPP=14 GCC=6 CMAKE=1
55
- - sudo : true
56
- services : docker
57
- env : PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
58
- - sudo : true
64
+ name : Python 2.7, c++14, gcc 4.8, CMake test
65
+ addons :
66
+ apt :
67
+ sources :
68
+ - ubuntu-toolchain-r-test
69
+ packages :
70
+ - g++-6
71
+ - os : linux
72
+ dist : trusty
73
+ name : Python 3.5, c++14, gcc 6, Debug build
74
+ # N.B. `ensurepip` could be installed transitively by `python3.5-venv`, but
75
+ # seems to have apt conflicts (at least for Trusty). Use Docker instead.
59
76
services : docker
77
+ env : DOCKER=debian:stretch PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
78
+ - os : linux
79
+ dist : xenial
60
80
env : PYTHON=3.6 CPP=17 GCC=7
81
+ name : Python 3.6, c++17, gcc 7
82
+ addons :
83
+ apt :
84
+ sources :
85
+ - deadsnakes
86
+ - ubuntu-toolchain-r-test
87
+ packages :
88
+ - g++-7
89
+ - python3.6-dev
90
+ - python3.6-venv
61
91
- os : linux
62
- env : PYTHON=3.6 CPP=17 CLANG=5.0
92
+ dist : xenial
93
+ env : PYTHON=3.6 CPP=17 CLANG=7
94
+ name : Python 3.6, c++17, Clang 7
63
95
addons :
64
96
apt :
65
- sources : [deadsnakes, llvm-toolchain-trusty-5.0, ubuntu-toolchain-r-test]
66
- packages : [python3.6-dev python3.6-venv clang-5.0 llvm-5.0-dev, lld-5.0]
97
+ sources :
98
+ - deadsnakes
99
+ - llvm-toolchain-xenial-7
100
+ packages :
101
+ - python3.6-dev
102
+ - python3.6-venv
103
+ - clang-7
104
+ - libclang-7-dev
105
+ - llvm-7-dev
106
+ - lld-7
107
+ - libc++-7-dev
108
+ - libc++abi-7-dev # Why is this necessary???
67
109
- os : osx
110
+ name : Python 2.7, c++14, AppleClang 7.3, CMake test
68
111
osx_image : xcode7.3
69
112
env : PYTHON=2.7 CPP=14 CLANG CMAKE=1
70
113
- os : osx
114
+ name : Python 3.7, c++14, AppleClang 9, Debug build
71
115
osx_image : xcode9
72
116
env : PYTHON=3.7 CPP=14 CLANG DEBUG=1
73
117
# Test a PyPy 2.7 build
74
118
- os : linux
119
+ dist : trusty
75
120
env : PYPY=5.8 PYTHON=2.7 CPP=11 GCC=4.8
121
+ name : PyPy 5.8, Python 2.7, c++11, gcc 4.8
76
122
addons :
77
123
apt :
78
- packages : [libblas-dev, liblapack-dev, gfortran]
124
+ packages :
125
+ - libblas-dev
126
+ - liblapack-dev
127
+ - gfortran
79
128
# Build in 32-bit mode and tests against the CMake-installed version
80
- - sudo : true
129
+ - os : linux
130
+ dist : trusty
81
131
services : docker
82
- env : ARCH=i386 PYTHON=3.5 CPP=14 GCC=6 INSTALL=1
132
+ env : DOCKER=i386/debian:stretch PYTHON=3.5 CPP=14 GCC=6 INSTALL=1
133
+ name : Python 3.4, c++14, gcc 6, 32-bit
83
134
script :
84
135
- |
85
- $SCRIPT_RUN_PREFIX sh -c "set -e
86
- cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0
87
- make install
88
- cp -a tests /pybind11-tests
89
- mkdir /build-tests && cd /build-tests
90
- cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON
91
- make pytest -j 2"
136
+ # Consolidated 32-bit Docker Build + Install
137
+ set -ex
138
+ $SCRIPT_RUN_PREFIX sh -c "
139
+ set -ex
140
+ cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 .
141
+ make install
142
+ cp -a tests /pybind11-tests
143
+ mkdir /build-tests && cd /build-tests
144
+ cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON
145
+ make pytest -j 2"
146
+ set +ex
92
147
cache :
93
148
directories :
94
149
- $HOME/.local/bin
@@ -98,6 +153,7 @@ cache:
98
153
before_install :
99
154
- |
100
155
# Configure build variables
156
+ set -ex
101
157
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
102
158
if [ -n "$CLANG" ]; then
103
159
export CXX=clang++-$CLANG CC=clang-$CLANG
@@ -108,18 +164,16 @@ before_install:
108
164
fi
109
165
export CXX=g++-$GCC CC=gcc-$GCC
110
166
fi
111
- if [ "$GCC" = "6" ]; then DOCKER=${ARCH:+$ARCH/}debian:stretch
112
- elif [ "$GCC" = "7" ]; then DOCKER=debian:buster EXTRA_PACKAGES+=" catch python3-distutils" DOWNLOAD_CATCH=OFF
113
- fi
114
167
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
115
168
export CXX=clang++ CC=clang;
116
169
fi
117
170
if [ -n "$CPP" ]; then CPP=-std=c++$CPP; fi
118
171
if [ "${PYTHON:0:1}" = "3" ]; then PY=3; fi
119
172
if [ -n "$DEBUG" ]; then CMAKE_EXTRA_ARGS+=" -DCMAKE_BUILD_TYPE=Debug"; fi
173
+ set +ex
120
174
- |
121
175
# Initialize environment
122
- set -e
176
+ set -ex
123
177
if [ -n "$DOCKER" ]; then
124
178
docker pull $DOCKER
125
179
@@ -148,13 +202,15 @@ before_install:
148
202
if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then
149
203
$PY_CMD -m ensurepip --user
150
204
fi
205
+ $PY_CMD --version
151
206
$PY_CMD -m pip install --user --upgrade pip wheel
152
207
fi
153
- set +e
208
+ set +ex
154
209
install :
155
210
- |
156
211
# Install dependencies
157
- set -e
212
+ set -ex
213
+ cmake --version
158
214
if [ -n "$DOCKER" ]; then
159
215
if [ -n "$DEBUG" ]; then
160
216
PY_DEBUG="python$PYTHON-dbg python$PY-scipy-dbg"
@@ -166,49 +222,59 @@ install:
166
222
libeigen3-dev libboost-dev cmake make ${EXTRA_PACKAGES} && break; done"
167
223
else
168
224
169
- if [ "$CLANG" = "5.0" ]; then
170
- if ! [ -d ~/.local/include/c++/v1 ]; then
171
- # Neither debian nor llvm provide a libc++ 5.0 deb; luckily it's fairly quick
172
- # to build, install (and cache), so do it ourselves:
173
- git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source
174
- git clone https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx -b release_50
175
- git clone https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi -b release_50
176
- mkdir llvm-build && cd llvm-build
177
- # Building llvm requires a newer cmake than is provided by the trusty container:
178
- CMAKE_VER=cmake-3.8.0-Linux-x86_64
179
- curl https://cmake.org/files/v3.8/$CMAKE_VER.tar.gz | tar xz
180
- ./$CMAKE_VER/bin/cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/.local ../llvm-source
181
- make -j2 install-cxxabi install-cxx
182
- cp -a include/c++/v1/*cxxabi*.h ~/.local/include/c++/v1
183
- cd ..
184
- fi
185
- export CXXFLAGS="-isystem $HOME/.local/include/c++/v1 -stdlib=libc++"
186
- export LDFLAGS="-L$HOME/.local/lib -fuse-ld=lld-$CLANG"
187
- export LD_LIBRARY_PATH="$HOME/.local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
188
- if [ "$CPP" = "-std=c++17" ]; then CPP="-std=c++1z"; fi
225
+ if [ "$CLANG" = "7" ]; then
226
+ export CXXFLAGS="-stdlib=libc++"
189
227
fi
190
228
191
229
export NPY_NUM_BUILD_JOBS=2
192
230
echo "Installing pytest, numpy, scipy..."
193
- ${PYPY:+travis_wait 30} $PY_CMD -m pip install --user --upgrade pytest numpy scipy \
194
- ${PYPY:+--extra-index-url https://imaginary.ca/trusty-pypi}
231
+ local PIP_CMD=""
232
+ if [ -n $PYPY ]; then
233
+ # For expediency, install only versions that are available on the extra index.
234
+ travis_wait 30 \
235
+ $PY_CMD -m pip install --user --upgrade --extra-index-url https://imaginary.ca/trusty-pypi \
236
+ pytest numpy==1.15.4 scipy==1.2.0
237
+ else
238
+ $PY_CMD -m pip install --user --upgrade pytest numpy scipy
239
+ fi
195
240
echo "done."
196
241
197
242
mkdir eigen
198
243
curl -fsSL https://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2 | \
199
244
tar --extract -j --directory=eigen --strip-components=1
200
245
export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH:+$CMAKE_INCLUDE_PATH:}$PWD/eigen"
201
246
fi
202
- set +e
247
+ set +ex
203
248
script :
204
- - $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS}
205
- -DPYBIND11_PYTHON_VERSION=$PYTHON
206
- -DPYBIND11_CPP_STANDARD=$CPP
207
- -DPYBIND11_WERROR=${WERROR:-ON}
208
- -DDOWNLOAD_CATCH=${DOWNLOAD_CATCH:-ON}
209
- - $SCRIPT_RUN_PREFIX make pytest -j 2
210
- - $SCRIPT_RUN_PREFIX make cpptest -j 2
211
- - if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi
249
+ - |
250
+ # CMake Configuration
251
+ set -ex
252
+ $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS} \
253
+ -DPYBIND11_PYTHON_VERSION=$PYTHON \
254
+ -DPYBIND11_CPP_STANDARD=$CPP \
255
+ -DPYBIND11_WERROR=${WERROR:-ON} \
256
+ -DDOWNLOAD_CATCH=${DOWNLOAD_CATCH:-ON} \
257
+ .
258
+ set +ex
259
+ - |
260
+ # pytest
261
+ set -ex
262
+ $SCRIPT_RUN_PREFIX make pytest -j 2 VERBOSE=1
263
+ set +ex
264
+ - |
265
+ # cpptest
266
+ set -ex
267
+ $SCRIPT_RUN_PREFIX make cpptest -j 2
268
+ set +ex
269
+ - |
270
+ # CMake Build Interface
271
+ set -ex
272
+ if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi
273
+ set +ex
212
274
after_failure : cat tests/test_cmake_build/*.log*
213
275
after_script :
214
- - if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
276
+ - |
277
+ # Cleanup (Docker)
278
+ set -ex
279
+ if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
280
+ set +ex
0 commit comments