.travis.yml 5.47 KB
Newer Older
1
language: cpp
2
3
4
5
6
7
8

branches:
  only:
  - master
  - stable
  - /^v\d/

9
10
matrix:
  include:
11
12
13
14
15
16
17
  # This config does a few things:
  # - Checks C++ and Python code styles (check-style.sh and flake8).
  # - Makes sure sphinx can build the docs without any errors or warnings.
  # - Tests setup.py sdist and install (all header files should be present).
  # - Makes sure that everything still works without optional deps (numpy/scipy/eigen) and
  #   also tests the automatic discovery functions in CMake (Python version, C++ standard).
  - os: linux
18
    dist: xenial # Necessary to run doxygen 1.8.15
19
    name: Docs and pip
20
21
    cache: false
    before_install:
22
23
    - pyenv global $(pyenv whence 2to3)  # activate all python versions
    - PY_CMD=python3
24
    - $PY_CMD -m pip install --user --upgrade pip wheel setuptools
Boris Staletic's avatar
Boris Staletic committed
25
    install:
Boris Staletic's avatar
Boris Staletic committed
26
    # breathe 4.14 doesn't work with bit fields. See https://github.com/michaeljones/breathe/issues/462
27
    # Latest breathe + Sphinx causes warnings and errors out
28
    - $PY_CMD -m pip install --user --upgrade "sphinx<3" sphinx_rtd_theme breathe==4.13.1 pytest
29
30
    - curl -fsSL https://sourceforge.net/projects/doxygen/files/rel-1.8.15/doxygen-1.8.15.linux.bin.tar.gz/download | tar xz
    - export PATH="$PWD/doxygen-1.8.15/bin:$PATH"
31
32
33
34
35
36
37
38
39
40
    script:
    - $PY_CMD -m sphinx -W -b html docs docs/.build
    - |
      # Make sure setup.py distributes and installs all the headers
      $PY_CMD setup.py sdist
      $PY_CMD -m pip install --user -U ./dist/*
      installed=$($PY_CMD -c "import pybind11; print(pybind11.get_include(True) + '/pybind11')")
      diff -rq $installed ./include/pybind11
    - |
      # Barebones build
Henry Schreiner's avatar
Henry Schreiner committed
41
      cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD) .
42
      make pytest -j 2 && make cpptest -j 2
43

44
  # Build in 32-bit mode and tests against the CMake-installed version
Henry Schreiner's avatar
Henry Schreiner committed
45
46
  - os: linux
    dist: trusty
Jason Rhinelander's avatar
Jason Rhinelander committed
47
    services: docker
Henry Schreiner's avatar
Henry Schreiner committed
48
    env: DOCKER=i386/debian:stretch PYTHON=3.5 CPP=14 GCC=6 INSTALL=1
49
    name: Python 3.5, c++14, gcc 6, 32-bit
Jason Rhinelander's avatar
Jason Rhinelander committed
50
51
    script:
      - |
Henry Schreiner's avatar
Henry Schreiner committed
52
53
54
55
56
57
58
59
60
61
62
        # Consolidated 32-bit Docker Build + Install
        set -ex
        $SCRIPT_RUN_PREFIX sh -c "
          set -ex
          cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 .
          make install
          cp -a tests /pybind11-tests
          mkdir /build-tests && cd /build-tests
          cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON
          make pytest -j 2"
        set +ex
Wenzel Jakob's avatar
Wenzel Jakob committed
63
64
cache:
  directories:
65
66
  - $HOME/.local/bin
  - $HOME/.local/lib
67
  - $HOME/.local/include
68
69
before_install:
- |
70
  # Configure build variables
Henry Schreiner's avatar
Henry Schreiner committed
71
  set -ex
Henry Schreiner's avatar
Henry Schreiner committed
72
73
  if [ -z "$GCC" ]; then GCC=4.8
  else EXTRA_PACKAGES+=" g++-$GCC"
74
  fi
Henry Schreiner's avatar
Henry Schreiner committed
75
  export CXX=g++-$GCC CC=gcc-$GCC
Jason Rhinelander's avatar
Jason Rhinelander committed
76
77
  if [ -n "$CPP" ]; then CPP=-std=c++$CPP; fi
  if [ "${PYTHON:0:1}" = "3" ]; then PY=3; fi
78
  if [ -n "$DEBUG" ]; then CMAKE_EXTRA_ARGS+=" -DCMAKE_BUILD_TYPE=Debug"; fi
Henry Schreiner's avatar
Henry Schreiner committed
79
  set +ex
80
- |
Wenzel Jakob's avatar
Wenzel Jakob committed
81
  # Initialize environment
Henry Schreiner's avatar
Henry Schreiner committed
82
  set -ex
83
  if [ -n "$DOCKER" ]; then
84
    docker pull $DOCKER
85

Jason Rhinelander's avatar
Jason Rhinelander committed
86
    containerid=$(docker run --detach --tty \
87
88
89
90
      --volume="$PWD":/pybind11 --workdir=/pybind11 \
      --env="CC=$CC" --env="CXX=$CXX" --env="DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \
      --env=GCC_COLORS=\  \
      $DOCKER)
Jason Rhinelander's avatar
Jason Rhinelander committed
91
    SCRIPT_RUN_PREFIX="docker exec --tty $containerid"
92
    $SCRIPT_RUN_PREFIX sh -c 'for s in 0 15; do sleep $s; apt-get update && apt-get -qy dist-upgrade && break; done'
93
  else
Henry Schreiner's avatar
Henry Schreiner committed
94
95
96
97
98
99
    PY_CMD=python$PYTHON
    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
      if [ "$PY" = "3" ]; then
        brew update && brew unlink python@2 && (brew upgrade python || brew install python)
      else
        curl -fsSL https://bootstrap.pypa.io/get-pip.py | $PY_CMD - --user
100
      fi
101
    fi
102
103
104
    if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then
      $PY_CMD -m ensurepip --user
    fi
Henry Schreiner's avatar
Henry Schreiner committed
105
    $PY_CMD --version
106
    $PY_CMD -m pip install --user --upgrade pip wheel
107
  fi
Henry Schreiner's avatar
Henry Schreiner committed
108
  set +ex
109
install:
110
- |
111
  # Install dependencies
Henry Schreiner's avatar
Henry Schreiner committed
112
113
  set -ex
  cmake --version
114
  if [ -n "$DOCKER" ]; then
115
    if [ -n "$DEBUG" ]; then
116
      PY_DEBUG="python$PYTHON-dbg python$PY-scipy-dbg"
117
      CMAKE_EXTRA_ARGS+=" -DPYTHON_EXECUTABLE=/usr/bin/python${PYTHON}dm"
118
    fi
119
    $SCRIPT_RUN_PREFIX sh -c "for s in 0 15; do sleep \$s; \
120
      apt-get -qy --no-install-recommends install \
121
        $PY_DEBUG python$PYTHON-dev python$PY-pytest python$PY-scipy \
122
        libeigen3-dev libboost-dev cmake make ${EXTRA_PACKAGES} && break; done"
123
  else
124

125
    export NPY_NUM_BUILD_JOBS=2
Henry Schreiner's avatar
Henry Schreiner committed
126
    local PIP_CMD=""
Henry Schreiner's avatar
Henry Schreiner committed
127
128
    echo "Installing pytest, numpy, scipy..."
    $PY_CMD -m pip install --user --upgrade pytest numpy scipy
129
    echo "done."
130

131
132
133
134
    mkdir eigen
    curl -fsSL https://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2 | \
        tar --extract -j --directory=eigen --strip-components=1
    export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH:+$CMAKE_INCLUDE_PATH:}$PWD/eigen"
135
  fi
Henry Schreiner's avatar
Henry Schreiner committed
136
  set +ex
137
script:
Henry Schreiner's avatar
Henry Schreiner committed
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
- |
  # CMake Configuration
  set -ex
  $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS} \
    -DPYBIND11_PYTHON_VERSION=$PYTHON \
    -DPYBIND11_CPP_STANDARD=$CPP \
    -DPYBIND11_WERROR=${WERROR:-ON} \
    -DDOWNLOAD_CATCH=${DOWNLOAD_CATCH:-ON} \
    .
  set +ex
- |
  # pytest
  set -ex
  $SCRIPT_RUN_PREFIX make pytest -j 2 VERBOSE=1
  set +ex
- |
  # cpptest
  set -ex
  $SCRIPT_RUN_PREFIX make cpptest -j 2
  set +ex
- |
  # CMake Build Interface
  set -ex
  if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi
  set +ex
163
after_failure: cat tests/test_cmake_build/*.log*
164
after_script:
Henry Schreiner's avatar
Henry Schreiner committed
165
166
167
168
169
- |
  # Cleanup (Docker)
  set -ex
  if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
  set +ex