Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
726e57d
Fixes for CI
henryiii Mar 26, 2019
82349ce
See if clang 7 works
henryiii Mar 28, 2019
4986bdb
Dropping Sphinx 2
henryiii Mar 29, 2019
de87a19
A few cleanups
henryiii Mar 30, 2019
90ad218
More changes
henryiii Mar 30, 2019
7e66dce
DNM Disable successful builds
eacousineau Mar 30, 2019
859e3e8
TMP Test using Xenial for C++17
eacousineau Mar 30, 2019
487b7da
Make things noisy
eacousineau Mar 30, 2019
69e00df
Disable docker; fix LLVM PPA for Xenial
eacousineau Mar 30, 2019
70af89f
Fix syntax errors
eacousineau Mar 30, 2019
27664ae
Moar fix
eacousineau Mar 30, 2019
8a42d3d
Oops
eacousineau Mar 30, 2019
516528c
Try fixing
eacousineau Mar 30, 2019
c1d8031
Fix virtual thing
eacousineau Mar 30, 2019
652153b
Try local config?
eacousineau Mar 30, 2019
712bebc
Lotsa warninsg
eacousineau Mar 30, 2019
4336874
Use explicit std::move for type conversion
eacousineau Mar 30, 2019
75849e5
Address more warnings
eacousineau Mar 30, 2019
cd59a09
DNM Disable failing PyPy and now successful GCC7
eacousineau Mar 30, 2019
60158a1
Increase verbosity; why aren't CXXFLAGS making it?
eacousineau Mar 30, 2019
014f4ff
Shift suppression to code
eacousineau Mar 30, 2019
6cbbdf7
Revert "DNM Disable failing PyPy and now successful GCC7"
eacousineau Mar 30, 2019
aa9996f
Revert "DNM Disable successful builds"
eacousineau Mar 30, 2019
5338d5c
Cleanup; Make docker explicit
eacousineau Mar 30, 2019
e1c3300
Make each os + dist explicit
eacousineau Mar 30, 2019
038969a
Normalize formatting
eacousineau Mar 30, 2019
7737fdd
Remove venv from 3.5?
eacousineau Mar 30, 2019
d226544
Fixes
eacousineau Mar 30, 2019
5d06a0e
Switch back to docker for Trusty Python 3.5
eacousineau Mar 30, 2019
bf44d1e
Revert pypy upgrade
eacousineau Mar 31, 2019
0bbd2dd
Constrain PYPY package versions
eacousineau Apr 4, 2019
4702fda
DNM Only test PyPy
eacousineau Apr 4, 2019
7ba33e5
Revert "DNM Only test PyPy"
eacousineau Apr 4, 2019
e8580ae
Add comments for all builds
eacousineau Apr 4, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ build_script:
-DPYBIND11_WERROR=ON
-DDOWNLOAD_CATCH=ON
-DCMAKE_SUPPRESS_REGENERATION=1
.
- set MSBuildLogger="C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
- cmake --build . --config %CONFIG% --target pytest -- /m /v:m /logger:%MSBuildLogger%
- cmake --build . --config %CONFIG% --target cpptest -- /m /v:m /logger:%MSBuildLogger%
Expand Down
188 changes: 123 additions & 65 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
language: cpp
dist: trusty
sudo: false
matrix:
include:
# This config does a few things:
Expand All @@ -11,14 +9,15 @@ matrix:
# also tests the automatic discovery functions in CMake (Python version, C++ standard).
- os: linux
dist: xenial # Necessary to run doxygen 1.8.15
# TODO(eric.cousineau): These aren't actually used, they're only for naming. Use "name" field instead?
env: STYLE DOCS PIP
cache: false
before_install:
- pyenv global $(pyenv whence 2to3) # activate all python versions
- PY_CMD=python3
- $PY_CMD -m pip install --user --upgrade pip wheel setuptools
install:
- $PY_CMD -m pip install --user --upgrade sphinx sphinx_rtd_theme breathe flake8 pep8-naming pytest
install: # Breathe does not yet support Sphinx 2
- $PY_CMD -m pip install --user --upgrade "sphinx<2" sphinx_rtd_theme breathe flake8 pep8-naming pytest
- 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"
script:
Expand All @@ -33,37 +32,75 @@ matrix:
diff -rq $installed ./include/pybind11
- |
# Barebones build
cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD)
cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD) .
make pytest -j 2
make cpptest -j 2
# The following are regular test configurations, including optional dependencies.
# With regard to each other they differ in Python version, C++ standard and compiler.
- os: linux
dist: trusty
env: PYTHON=2.7 CPP=11 GCC=4.8
addons:
apt:
packages: [cmake=2.\*, cmake-data=2.\*]
packages:
- cmake=2.\*
- cmake-data=2.\*
- os: linux
dist: trusty
env: PYTHON=3.6 CPP=11 GCC=4.8
addons:
apt:
sources: [deadsnakes]
packages: [python3.6-dev python3.6-venv, cmake=2.\*, cmake-data=2.\*]
- sudo: true
services: docker
sources:
- deadsnakes
packages:
- python3.6-dev
- python3.6-venv
- cmake=2.\*
- cmake-data=2.\*
- os: linux
dist: trusty
env: PYTHON=2.7 CPP=14 GCC=6 CMAKE=1
- sudo: true
services: docker
env: PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
- sudo: true
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-6
- os: linux
dist: trusty
# N.B. `ensurepip` could be installed transitively by `python3.5-venv`, but
# seems to have apt conflicts (at least for Trusty). Use Docker instead.
services: docker
env: DOCKER=debian:stretch PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
- os: linux
dist: xenial
env: PYTHON=3.6 CPP=17 GCC=7
addons:
apt:
sources:
- deadsnakes
- ubuntu-toolchain-r-test
packages:
- g++-7
- python3.6-dev
- python3.6-venv
- os: linux
env: PYTHON=3.6 CPP=17 CLANG=5.0
dist: xenial
env: PYTHON=3.6 CPP=17 CLANG=7
addons:
apt:
sources: [deadsnakes, llvm-toolchain-trusty-5.0, ubuntu-toolchain-r-test]
packages: [python3.6-dev python3.6-venv clang-5.0 llvm-5.0-dev, lld-5.0]
sources:
- deadsnakes
- llvm-toolchain-xenial-7
packages:
- python3.6-dev
- python3.6-venv
- clang-7
- libclang-7-dev
- llvm-7-dev
- lld-7
- libc++-7-dev
- libc++abi-7-dev # Why is this necessary???
- os: osx
osx_image: xcode7.3
env: PYTHON=2.7 CPP=14 CLANG CMAKE=1
Expand All @@ -72,23 +109,32 @@ matrix:
env: PYTHON=3.7 CPP=14 CLANG DEBUG=1
# Test a PyPy 2.7 build
- os: linux
dist: trusty
env: PYPY=5.8 PYTHON=2.7 CPP=11 GCC=4.8
addons:
apt:
packages: [libblas-dev, liblapack-dev, gfortran]
packages:
- libblas-dev
- liblapack-dev
- gfortran
# Build in 32-bit mode and tests against the CMake-installed version
- sudo: true
- os: linux
dist: trusty
services: docker
env: ARCH=i386 PYTHON=3.5 CPP=14 GCC=6 INSTALL=1
env: DOCKER=i386/debian:stretch PYTHON=3.5 CPP=14 GCC=6 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"
# 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
cache:
directories:
- $HOME/.local/bin
Expand All @@ -98,6 +144,7 @@ cache:
before_install:
- |
# Configure build variables
set -ex
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
if [ -n "$CLANG" ]; then
export CXX=clang++-$CLANG CC=clang-$CLANG
Expand All @@ -108,18 +155,17 @@ before_install:
fi
export CXX=g++-$GCC CC=gcc-$GCC
fi
if [ "$GCC" = "6" ]; then DOCKER=${ARCH:+$ARCH/}debian:stretch
elif [ "$GCC" = "7" ]; then DOCKER=debian:buster EXTRA_PACKAGES+=" catch python3-distutils" DOWNLOAD_CATCH=OFF
fi
#fi
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
export CXX=clang++ CC=clang;
fi
if [ -n "$CPP" ]; then CPP=-std=c++$CPP; fi
if [ "${PYTHON:0:1}" = "3" ]; then PY=3; fi
if [ -n "$DEBUG" ]; then CMAKE_EXTRA_ARGS+=" -DCMAKE_BUILD_TYPE=Debug"; fi
set +ex
- |
# Initialize environment
set -e
set -ex
if [ -n "$DOCKER" ]; then
docker pull $DOCKER

Expand Down Expand Up @@ -148,13 +194,15 @@ before_install:
if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then
$PY_CMD -m ensurepip --user
fi
$PY_CMD --version
$PY_CMD -m pip install --user --upgrade pip wheel
fi
set +e
set +ex
install:
- |
# Install dependencies
set -e
set -ex
cmake --version
if [ -n "$DOCKER" ]; then
if [ -n "$DEBUG" ]; then
PY_DEBUG="python$PYTHON-dbg python$PY-scipy-dbg"
Expand All @@ -166,49 +214,59 @@ install:
libeigen3-dev libboost-dev cmake make ${EXTRA_PACKAGES} && break; done"
else

if [ "$CLANG" = "5.0" ]; then
if ! [ -d ~/.local/include/c++/v1 ]; then
# Neither debian nor llvm provide a libc++ 5.0 deb; luckily it's fairly quick
# to build, install (and cache), 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_50
git clone https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi -b release_50
mkdir llvm-build && cd llvm-build
# Building llvm requires a newer cmake than is provided by the trusty container:
CMAKE_VER=cmake-3.8.0-Linux-x86_64
curl https://cmake.org/files/v3.8/$CMAKE_VER.tar.gz | tar xz
./$CMAKE_VER/bin/cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/.local ../llvm-source
make -j2 install-cxxabi install-cxx
cp -a include/c++/v1/*cxxabi*.h ~/.local/include/c++/v1
cd ..
fi
export CXXFLAGS="-isystem $HOME/.local/include/c++/v1 -stdlib=libc++"
export LDFLAGS="-L$HOME/.local/lib -fuse-ld=lld-$CLANG"
export LD_LIBRARY_PATH="$HOME/.local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
if [ "$CPP" = "-std=c++17" ]; then CPP="-std=c++1z"; fi
if [ "$CLANG" = "7" ]; then
export CXXFLAGS="-stdlib=libc++"
fi

export NPY_NUM_BUILD_JOBS=2
echo "Installing pytest, numpy, scipy..."
${PYPY:+travis_wait 30} $PY_CMD -m pip install --user --upgrade pytest numpy scipy \
${PYPY:+--extra-index-url https://imaginary.ca/trusty-pypi}
local PIP_CMD=""
if [ -n $PYPY ]; then
# For expediency, install only versions that are available on the extra index.
travis_wait 30 \
$PY_CMD -m pip install --user --upgrade --extra-index-url https://imaginary.ca/trusty-pypi \
pytest numpy==1.15.4 scipy==1.2.0
else
$PY_CMD -m pip install --user --upgrade pytest numpy scipy
fi
echo "done."

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"
fi
set +e
set +ex
script:
- $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS}
-DPYBIND11_PYTHON_VERSION=$PYTHON
-DPYBIND11_CPP_STANDARD=$CPP
-DPYBIND11_WERROR=${WERROR:-ON}
-DDOWNLOAD_CATCH=${DOWNLOAD_CATCH:-ON}
- $SCRIPT_RUN_PREFIX make pytest -j 2
- $SCRIPT_RUN_PREFIX make cpptest -j 2
- if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi
- |
# 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
after_failure: cat tests/test_cmake_build/*.log*
after_script:
- if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
- |
# Cleanup (Docker)
set -ex
if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
set +ex
4 changes: 2 additions & 2 deletions include/pybind11/numpy.h
Original file line number Diff line number Diff line change
Expand Up @@ -1509,15 +1509,15 @@ struct vectorize_helper {
if (trivial == broadcast_trivial::f_trivial) result = array_t<Return, array::f_style>(shape);
else result = array_t<Return>(shape);

if (size == 0) return result;
if (size == 0) return std::move(result);

/* Call the function */
if (trivial == broadcast_trivial::non_trivial)
apply_broadcast(buffers, params, result, i_seq, vi_seq, bi_seq);
else
apply_trivial(buffers, params, result.mutable_data(), size, i_seq, vi_seq, bi_seq);

return result;
return std::move(result);
}

template <size_t... Index, size_t... VIndex, size_t... BIndex>
Expand Down
1 change: 1 addition & 0 deletions tests/test_gil_scoped.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

class VirtClass {
public:
virtual ~VirtClass() {}
virtual void virtual_func() {}
virtual void pure_virtual_func() = 0;
};
Expand Down
4 changes: 3 additions & 1 deletion tests/test_kwargs_and_defaults.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ TEST_SUBMODULE(kwargs_and_defaults, m) {
m.def("kw_func_udl_z", kw_func, "x"_a, "y"_a=0);

// test_args_and_kwargs
m.def("args_function", [](py::args args) -> py::tuple { return args; });
m.def("args_function", [](py::args args) -> py::tuple {
return std::move(args);
});
m.def("args_kwargs_function", [](py::args args, py::kwargs kwargs) {
return py::make_tuple(args, kwargs);
});
Expand Down
18 changes: 18 additions & 0 deletions tests/test_operator_overloading.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,22 @@ namespace std {
};
}

#pragma GCC diagnostic push
// clang 7.0.0 and Apple LLVM 10.0.1 introduce `-Wself-assign-overloaded` to
// `-Wall`, which is used here for overloading (e.g. `py::self += py::self `).
// Here, we suppress the warning using `#pragma diagnostic`.
// Taken from: https://github.com/RobotLocomotion/drake/commit/aaf84b46
// TODO(eric): This could be resolved using a function / functor (e.g. `py::self()`).
#if (__APPLE__) && (__clang__)
#if (__clang_major__ >= 10) && (__clang_minor__ >= 0) && (__clang_patchlevel__ >= 1)
#pragma GCC diagnostic ignored "-Wself-assign-overloaded"
#endif
#elif (__clang__)
#if (__clang_major__ >= 7)
#pragma GCC diagnostic ignored "-Wself-assign-overloaded"
#endif
#endif

TEST_SUBMODULE(operators, m) {

// test_operator_overloading
Expand Down Expand Up @@ -144,3 +160,5 @@ TEST_SUBMODULE(operators, m) {
.def_readwrite("b", &NestC::b);
m.def("get_NestC", [](const NestC &c) { return c.value; });
}

#pragma GCC diagnostic pop
4 changes: 3 additions & 1 deletion tests/test_smart_ptr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,9 @@ TEST_SUBMODULE(smart_ptr, m) {

// test_shared_ptr_gc
// #187: issue involving std::shared_ptr<> return value policy & garbage collection
struct ElementBase { virtual void foo() { } /* Force creation of virtual table */ };
struct ElementBase {
virtual ~ElementBase() { } /* Force creation of virtual table */
};
py::class_<ElementBase, std::shared_ptr<ElementBase>>(m, "ElementBase");

struct ElementA : ElementBase {
Expand Down
1 change: 1 addition & 0 deletions tests/test_virtual_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ class Movable {

class NCVirt {
public:
virtual ~NCVirt() { }
virtual NonCopyable get_noncopyable(int a, int b) { return NonCopyable(a, b); }
virtual Movable get_movable(int a, int b) = 0;

Expand Down