summaryrefslogtreecommitdiff
path: root/ext/pybind11/.travis.yml
blob: a3e99a003d14d3b372488f0de36ce90dd619952a (plain)
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
126
127
128
129
130
131
132
133
134
135
136
137
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
language: cpp
sudo: false
matrix:
  include:
  - os: linux
    env: PYTHON=2.7 CPP=11 GCC=4.8
    addons:
      apt:
        sources: [ubuntu-toolchain-r-test, kubuntu-backports]
        packages: [g++-4.8, cmake]
  - os: linux
    env: PYTHON=3.5 CPP=11 GCC=4.8
    addons:
      apt:
        sources: [ubuntu-toolchain-r-test, kubuntu-backports, deadsnakes]
        packages: [g++-4.8, cmake, python3.5-dev]
  - sudo: true
    services: docker
    env: PYTHON=2.7 CPP=14 GCC=6
  - sudo: true
    services: docker
    env: PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
  - sudo: true
    services: docker
    env: PYTHON=3.5 CPP=17 GCC=7
  - sudo: true
    services: docker
    env: PYTHON=3.5 CPP=17 CLANG=4.0
  - os: osx
    osx_image: xcode7.3
    env: PYTHON=2.7 CPP=14 CLANG
  - os: osx
    osx_image: xcode7.3
    env: PYTHON=3.6 CPP=14 CLANG
  # Test a PyPy 2.7 build
  - os: linux
    dist: trusty
    env: PYPY=5.7 PYTHON=2.7 CPP=11 GCC=4.8
    addons:
      apt:
        packages: [g++-4.8, cmake]
  - sudo: true
    services: docker
    env: ARCH=i386 PYTHON=3.5 CPP=14 GCC=6
  # This next one does a make install *before* testing, then builds the tests against the installed version:
  - sudo: true
    services: docker
    env: PYTHON=3.5 CPP=14 CLANG=3.9 INSTALL=1
    script:
      - |
        $SCRIPT_RUN_PREFIX sh -c "set -e
        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"
  # A barebones build makes sure everything still works without optional deps (numpy/scipy/eigen)
  # and also tests the automatic discovery functions in CMake (Python version, C++ standard).
  - os: linux
    env: BAREBONES
    addons:
      apt:
        sources: [ubuntu-toolchain-r-test, kubuntu-backports]
        packages: [g++-4.8, cmake]
    install: pip install pytest
  # Documentation build:
  - os: linux
    language: docs
    env: DOCS STYLE LINT
    install:
    - pip install --upgrade sphinx sphinx_rtd_theme flake8 pep8-naming
    - |
      curl -fsSL ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.12.linux.bin.tar.gz | tar xz
      export PATH="$PWD/doxygen-1.8.12/bin:$PATH"
      pip install https://github.com/michaeljones/breathe/archive/master.zip
    script:
    - make -C docs html SPHINX_OPTIONS=-W
    - tools/check-style.sh
    - flake8
  allow_failures:
    - env: PYTHON=3.5 CPP=17 GCC=7
    - env: PYTHON=3.5 CPP=17 CLANG=4.0
cache:
  directories:
  - $HOME/.cache/pip
  - $HOME/Library/Caches/pip
before_install:
- |
  # Configure build variables
  if [ "$TRAVIS_OS_NAME" = "linux" ]; then
    if [ -n "$CLANG" ]; then
      export CXX=clang++-$CLANG CC=clang-$CLANG COMPILER_PACKAGES="clang-$CLANG llvm-$CLANG-dev"
      if [ "$CLANG" = "4.0" ]; then export CXXFLAGS="-stdlib=libc++"; fi
    else
      if [ -z "$GCC" ]; then export GCC=4.8
      else export COMPILER_PACKAGES=g++-$GCC
      fi
      export CXX=g++-$GCC CC=gcc-$GCC
    fi
    if [ "$CLANG" = "4.0" ]; then export DOCKER=debian:sid
    elif [ "$GCC" = "6" ] || [ -n "$CLANG" ]; then export DOCKER=${ARCH:+$ARCH/}debian:testing
    elif [ "$GCC" = "7" ]; then export DOCKER=debian:experimental APT_GET_EXTRA="-t experimental"
    fi
  elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
    export CXX=clang++ CC=clang;
  fi
  if [ -n "$CPP" ]; then export CPP=-std=c++$CPP; fi
  if [ "${PYTHON:0:1}" = "3" ]; then export PY=3; fi
  if [ "$PYPY" = "5.7" ]; then
    curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.7.0-linux64.tar.bz2 | tar -xj
    export PYPY_BINARY=$(echo `pwd`/pypy2-v5.7.0-linux64/bin/pypy)
    export CMAKE_EXTRA_ARGS="-DPYTHON_EXECUTABLE:FILEPATH=$PYPY_BINARY"
  fi
  if [ -n "$DEBUG" ]; then export CMAKE_EXTRA_ARGS="-DCMAKE_BUILD_TYPE=Debug"; fi
- |
  # Initialize environment
  if [ -n "$PYPY" ]; then
    $PYPY_BINARY -m ensurepip
    $PYPY_BINARY -m pip install pytest
  elif [ -n "$DOCKER" ]; then
    docker pull $DOCKER
    # Disable LTO with gcc until gcc 79296 is fixed:
    if [ -n "$GCC" ]; then export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYBIND11_LTO_CXX_FLAGS="; fi

    export containerid=$(docker run --detach --tty \
      --volume="$PWD":/pybind11 --workdir=/pybind11 \
      --env="CXXFLAGS=$CXXFLAGS" \
      --env="CC=$CC" --env="CXX=$CXX" --env="DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \
      --env=GCC_COLORS=\  \
      $DOCKER)
    export SCRIPT_RUN_PREFIX="docker exec --tty $containerid"
    $SCRIPT_RUN_PREFIX sh -c 'for s in 0 15; do sleep $s; apt-get update && apt-get -qy dist-upgrade && break; done'
    # gcc-7 currently generates warnings; some are upstream bugs, so just turn off -Werror for now
    if [ "$GCC" = "7" ]; then WERROR=off; fi
  else
    if [ "$TRAVIS_OS_NAME" = "linux" ]; then
      pip install --user --upgrade pip virtualenv
      virtualenv -p python$PYTHON venv
    elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
      if [ "$PY" = "3" ]; then
        brew update; brew install python$PY;
      else
        curl -fsSL -O https://bootstrap.pypa.io/get-pip.py
        sudo -H python get-pip.py
      fi
      pip$PY install --user --upgrade pip virtualenv
      python$PY -m virtualenv venv
    fi
    source venv/bin/activate
  fi
install:
- |
  # Install dependencies
  if [ -n "$DOCKER" ]; then
    if [ -n "$DEBUG" ]; then
      PY_DEBUG="python$PY-dbg python$PY-scipy-dbg"
      export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYTHON_EXECUTABLE=/usr/bin/python${PYTHON}dm"
    fi
    $SCRIPT_RUN_PREFIX sh -c "for s in 0 15; do sleep \$s; \
      apt-get -qy --no-install-recommends $APT_GET_EXTRA install \
        $PY_DEBUG python$PY-dev python$PY-pytest python$PY-scipy \
        libeigen3-dev cmake make ${COMPILER_PACKAGES} && break; done"

    if [ "$CLANG" = "4.0" ]; then
      # Neither debian nor llvm provide a libc++ deb; luckily it's fairly quick
      # to build and install, so do it ourselves:
      git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source
      git clone https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx -b release_40
      git clone https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi -b release_40
      $SCRIPT_RUN_PREFIX sh -c "mkdir llvm-build && cd llvm-build && \
        CXXFLAGS= cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../llvm-source && \
        make -j2 install-cxxabi install-cxx && \
        cp -a include/c++/v1/*cxxabi*.h /usr/include/c++/v1"

      if [ "$CPP" = "-std=c++17" ]; then export CPP="-std=c++1z"; fi
    fi
  elif [ -z "$PYPY" ]; then
    pip install numpy scipy pytest

    wget -q -O eigen.tar.gz https://bitbucket.org/eigen/eigen/get/3.3.0.tar.gz
    tar xzf eigen.tar.gz
    export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_INCLUDE_PATH=$PWD/eigen-eigen-26667be4f70b"
  fi
script:
- $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS}
    -DPYBIND11_PYTHON_VERSION=$PYTHON
    -DPYBIND11_CPP_STANDARD=$CPP
    -DPYBIND11_WERROR=${WERROR:-ON}
- $SCRIPT_RUN_PREFIX make pytest -j 2
- $SCRIPT_RUN_PREFIX make test_cmake_build
after_failure: cat tests/test_cmake_build/*.log
after_script:
- if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi