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,20 +9,21 @@ 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 :
25
23
- tools/check-style.sh
26
24
- flake8
27
- - $PY_CMD -m sphinx -W -b html docs docs/.build
25
+ # TODO(eric.cousineau): Re-enable doc build at some point once `breathe` is unbroken.
26
+ # - $PY_CMD -m sphinx -W -b html docs docs/.build
28
27
- |
29
28
# Make sure setup.py distributes and installs all the headers
30
29
$PY_CMD setup.py sdist
@@ -33,62 +32,119 @@ matrix:
33
32
diff -rq $installed ./include/pybind11
34
33
- |
35
34
# Barebones build
36
- cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD)
35
+ cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD) .
37
36
make pytest -j 2
38
37
make cpptest -j 2
39
38
# The following are regular test configurations, including optional dependencies.
40
39
# With regard to each other they differ in Python version, C++ standard and compiler.
41
40
- os : linux
41
+ dist : trusty
42
+ name : Python 2.7, c++11, gcc 4.8
42
43
env : PYTHON=2.7 CPP=11 GCC=4.8
43
44
addons :
44
45
apt :
45
- packages : [cmake=2.\*, cmake-data=2.\*]
46
+ packages :
47
+ - cmake=2.\*
48
+ - cmake-data=2.\*
46
49
- os : linux
50
+ dist : trusty
51
+ name : Python 3.6, c++11, gcc 4.8
47
52
env : PYTHON=3.6 CPP=11 GCC=4.8
48
53
addons :
49
54
apt :
50
- sources : [deadsnakes]
51
- packages : [python3.6-dev python3.6-venv, cmake=2.\*, cmake-data=2.\*]
52
- - sudo : true
53
- services : docker
55
+ sources :
56
+ - deadsnakes
57
+ packages :
58
+ - python3.6-dev
59
+ - python3.6-venv
60
+ - cmake=2.\*
61
+ - cmake-data=2.\*
62
+ - os : linux
63
+ dist : trusty
54
64
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
65
+ name : Python 2.7, c++14, gcc 4.8, CMake test
66
+ addons :
67
+ apt :
68
+ sources :
69
+ - ubuntu-toolchain-r-test
70
+ packages :
71
+ - g++-6
72
+ - os : linux
73
+ dist : trusty
74
+ name : Python 3.5, c++14, gcc 6, Debug build
75
+ # N.B. `ensurepip` could be installed transitively by `python3.5-venv`, but
76
+ # seems to have apt conflicts (at least for Trusty). Use Docker instead.
59
77
services : docker
78
+ env : DOCKER=debian:stretch PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
79
+ - os : linux
80
+ dist : xenial
60
81
env : PYTHON=3.6 CPP=17 GCC=7
82
+ name : Python 3.6, c++17, gcc 7
83
+ addons :
84
+ apt :
85
+ sources :
86
+ - deadsnakes
87
+ - ubuntu-toolchain-r-test
88
+ packages :
89
+ - g++-7
90
+ - python3.6-dev
91
+ - python3.6-venv
61
92
- os : linux
62
- env : PYTHON=3.6 CPP=17 CLANG=5.0
93
+ dist : xenial
94
+ env : PYTHON=3.6 CPP=17 CLANG=7
95
+ name : Python 3.6, c++17, Clang 7
63
96
addons :
64
97
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]
98
+ sources :
99
+ - deadsnakes
100
+ - llvm-toolchain-xenial-7
101
+ packages :
102
+ - python3.6-dev
103
+ - python3.6-venv
104
+ - clang-7
105
+ - libclang-7-dev
106
+ - llvm-7-dev
107
+ - lld-7
108
+ - libc++-7-dev
109
+ - libc++abi-7-dev # Why is this necessary???
67
110
- os : osx
111
+ name : Python 2.7, c++14, AppleClang 7.3, CMake test
68
112
osx_image : xcode7.3
69
113
env : PYTHON=2.7 CPP=14 CLANG CMAKE=1
70
114
- os : osx
115
+ name : Python 3.7, c++14, AppleClang 9, Debug build
71
116
osx_image : xcode9
72
117
env : PYTHON=3.7 CPP=14 CLANG DEBUG=1
73
118
# Test a PyPy 2.7 build
74
119
- os : linux
120
+ dist : trusty
75
121
env : PYPY=5.8 PYTHON=2.7 CPP=11 GCC=4.8
122
+ name : PyPy 5.8, Python 2.7, c++11, gcc 4.8
76
123
addons :
77
124
apt :
78
- packages : [libblas-dev, liblapack-dev, gfortran]
125
+ packages :
126
+ - libblas-dev
127
+ - liblapack-dev
128
+ - gfortran
79
129
# Build in 32-bit mode and tests against the CMake-installed version
80
- - sudo : true
130
+ - os : linux
131
+ dist : trusty
81
132
services : docker
82
- env : ARCH=i386 PYTHON=3.5 CPP=14 GCC=6 INSTALL=1
133
+ env : DOCKER=i386/debian:stretch PYTHON=3.5 CPP=14 GCC=6 INSTALL=1
134
+ name : Python 3.4, c++14, gcc 6, 32-bit
83
135
script :
84
136
- |
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"
137
+ # Consolidated 32-bit Docker Build + Install
138
+ set -ex
139
+ $SCRIPT_RUN_PREFIX sh -c "
140
+ set -ex
141
+ cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 .
142
+ make install
143
+ cp -a tests /pybind11-tests
144
+ mkdir /build-tests && cd /build-tests
145
+ cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON
146
+ make pytest -j 2"
147
+ set +ex
92
148
cache :
93
149
directories :
94
150
- $HOME/.local/bin
@@ -98,6 +154,7 @@ cache:
98
154
before_install :
99
155
- |
100
156
# Configure build variables
157
+ set -ex
101
158
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
102
159
if [ -n "$CLANG" ]; then
103
160
export CXX=clang++-$CLANG CC=clang-$CLANG
@@ -108,18 +165,16 @@ before_install:
108
165
fi
109
166
export CXX=g++-$GCC CC=gcc-$GCC
110
167
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
168
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
115
169
export CXX=clang++ CC=clang;
116
170
fi
117
171
if [ -n "$CPP" ]; then CPP=-std=c++$CPP; fi
118
172
if [ "${PYTHON:0:1}" = "3" ]; then PY=3; fi
119
173
if [ -n "$DEBUG" ]; then CMAKE_EXTRA_ARGS+=" -DCMAKE_BUILD_TYPE=Debug"; fi
174
+ set +ex
120
175
- |
121
176
# Initialize environment
122
- set -e
177
+ set -ex
123
178
if [ -n "$DOCKER" ]; then
124
179
docker pull $DOCKER
125
180
@@ -148,13 +203,15 @@ before_install:
148
203
if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then
149
204
$PY_CMD -m ensurepip --user
150
205
fi
206
+ $PY_CMD --version
151
207
$PY_CMD -m pip install --user --upgrade pip wheel
152
208
fi
153
- set +e
209
+ set +ex
154
210
install :
155
211
- |
156
212
# Install dependencies
157
- set -e
213
+ set -ex
214
+ cmake --version
158
215
if [ -n "$DOCKER" ]; then
159
216
if [ -n "$DEBUG" ]; then
160
217
PY_DEBUG="python$PYTHON-dbg python$PY-scipy-dbg"
@@ -166,49 +223,59 @@ install:
166
223
libeigen3-dev libboost-dev cmake make ${EXTRA_PACKAGES} && break; done"
167
224
else
168
225
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
226
+ if [ "$CLANG" = "7" ]; then
227
+ export CXXFLAGS="-stdlib=libc++"
189
228
fi
190
229
191
230
export NPY_NUM_BUILD_JOBS=2
192
231
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}
232
+ local PIP_CMD=""
233
+ if [ -n $PYPY ]; then
234
+ # For expediency, install only versions that are available on the extra index.
235
+ travis_wait 30 \
236
+ $PY_CMD -m pip install --user --upgrade --extra-index-url https://imaginary.ca/trusty-pypi \
237
+ pytest numpy==1.15.4 scipy==1.2.0
238
+ else
239
+ $PY_CMD -m pip install --user --upgrade pytest numpy scipy
240
+ fi
195
241
echo "done."
196
242
197
243
mkdir eigen
198
244
curl -fsSL https://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2 | \
199
245
tar --extract -j --directory=eigen --strip-components=1
200
246
export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH:+$CMAKE_INCLUDE_PATH:}$PWD/eigen"
201
247
fi
202
- set +e
248
+ set +ex
203
249
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
250
+ - |
251
+ # CMake Configuration
252
+ set -ex
253
+ $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS} \
254
+ -DPYBIND11_PYTHON_VERSION=$PYTHON \
255
+ -DPYBIND11_CPP_STANDARD=$CPP \
256
+ -DPYBIND11_WERROR=${WERROR:-ON} \
257
+ -DDOWNLOAD_CATCH=${DOWNLOAD_CATCH:-ON} \
258
+ .
259
+ set +ex
260
+ - |
261
+ # pytest
262
+ set -ex
263
+ $SCRIPT_RUN_PREFIX make pytest -j 2 VERBOSE=1
264
+ set +ex
265
+ - |
266
+ # cpptest
267
+ set -ex
268
+ $SCRIPT_RUN_PREFIX make cpptest -j 2
269
+ set +ex
270
+ - |
271
+ # CMake Build Interface
272
+ set -ex
273
+ if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi
274
+ set +ex
212
275
after_failure : cat tests/test_cmake_build/*.log*
213
276
after_script :
214
- - if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
277
+ - |
278
+ # Cleanup (Docker)
279
+ set -ex
280
+ if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
281
+ set +ex
0 commit comments