Skip to content

Commit

Permalink
Merge pull request #126 from nschloe/new-pybind11
Browse files Browse the repository at this point in the history
New pybind11
  • Loading branch information
nschloe authored Dec 3, 2020
2 parents f5e7d9f + c171b47 commit 674ed9b
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 108 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,12 @@ jobs:
- uses: actions/checkout@v2
with:
lfs: true
- name: Install CGAL 5 from PPA
- name: Install CGAL 5
run: |
sudo apt-get install -y software-properties-common
sudo apt-add-repository -y ppa:nschloe/cgal-backports
sudo apt update
# Leave that here in case we ever need a PPA again
# sudo apt-get install -y software-properties-common
# sudo apt-add-repository -y ppa:nschloe/cgal-backports
# sudo apt update
sudo apt install -y libcgal-dev
- name: Install other dependencies
run: |
Expand All @@ -47,5 +48,4 @@ jobs:
run: |
pip install tox
CC="clang" tox
- name: Submit to codecov
run: bash <(curl -s https://codecov.io/bash)
- uses: codecov/codecov-action@v1
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[build-system]
requires = ["setuptools>=42", "wheel"]
requires = ["setuptools>=42", "wheel", "pybind11>=2.6.0"]
build-backend = "setuptools.build_meta"
6 changes: 2 additions & 4 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
[metadata]
name = pygalmesh
version = 0.9.1
version = 0.9.2
url = https://github.com/nschloe/pygalmesh
author = Nico Schlömer
author_email = nico.schloemer@gmail.com
description = Python frontend to CGAL's mesh generation capabilities
long_description = file: README.md
long_description_content_type = text/markdown
license = GPL-3.0-or-later
license_files = LICENSE
license_file = LICENSE
classifiers =
Development Status :: 4 - Beta
License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Expand All @@ -31,12 +31,10 @@ keywords =
[options]
packages = find:
setup_requires = pybind11 >= 2.5
install_requires =
importlib_metadata;python_version<"3.8"
meshio >= 4.0.0, < 5.0.0
numpy
pybind11 >= 2.5
python_requires = >=3.6
[options.entry_points]
Expand Down
103 changes: 6 additions & 97 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,97 +1,11 @@
import os
import sys

import setuptools
from setuptools import Extension, setup
from setuptools.command.build_ext import build_ext


# <https://github.com/pybind/python_example/blob/master/setup.py>
class get_pybind_include(object):
"""Helper class to determine the pybind11 include path
The purpose of this class is to postpone importing pybind11
until it is actually installed, so that the ``get_include()``
method can be invoked."""

def __str__(self):
import pybind11

return pybind11.get_include()


# cf http://bugs.python.org/issue26689
def has_flag(compiler, flagname):
"""Return a boolean indicating whether a flag name is supported on
the specified compiler.
"""
import os
import tempfile

with tempfile.NamedTemporaryFile("w", suffix=".cpp", delete=False) as f:
f.write("int main (int argc, char **argv) { return 0; }")
fname = f.name
try:
compiler.compile([fname], extra_postargs=[flagname])
except setuptools.distutils.errors.CompileError:
return False
finally:
try:
os.remove(fname)
except OSError:
pass
return True


def cpp_flag(compiler):
"""Return the -std=c++[11/14/17] compiler flag.
The newer version is prefered over c++11 (when it is available).
"""
flags = ["-std=c++17", "-std=c++14", "-std=c++11"]

for flag in flags:
if has_flag(compiler, flag):
return flag

raise RuntimeError("Unsupported compiler -- at least C++11 support " "is needed!")


class BuildExt(build_ext):
"""A custom build extension for adding compiler-specific options."""

c_opts = {
"msvc": ["/EHsc"],
"unix": [],
}
l_opts = {
"msvc": [],
"unix": [],
}

if sys.platform == "darwin":
darwin_opts = ["-stdlib=libc++", "-mmacosx-version-min=10.7"]
c_opts["unix"] += darwin_opts
l_opts["unix"] += darwin_opts

def build_extensions(self):
ct = self.compiler.compiler_type
opts = self.c_opts.get(ct, [])
link_opts = self.l_opts.get(ct, [])
if ct == "unix":
opts.append(cpp_flag(self.compiler))
if has_flag(self.compiler, "-fvisibility=hidden"):
opts.append("-fvisibility=hidden")

for ext in self.extensions:
ext.define_macros = [
("VERSION_INFO", '"{}"'.format(self.distribution.get_version()))
]
ext.extra_compile_args = opts
ext.extra_link_args = link_opts
build_ext.build_extensions(self)

from pybind11.setup_helpers import Pybind11Extension, build_ext
from setuptools import setup

# https://github.com/pybind/python_example/
ext_modules = [
Extension(
Pybind11Extension(
"_pygalmesh",
# Sort input source files to ensure bit-for-bit reproducible builds
# (https://github.com/pybind/python_example/pull/53)
Expand All @@ -107,20 +21,15 @@ def build_extensions(self):
"src/pybind11.cpp",
]
),
include_dirs=[
os.environ.get("EIGEN_INCLUDE_DIR", "/usr/include/eigen3/"),
# Path to pybind11 headers
get_pybind_include(),
],
language="c++",
include_dirs=[os.environ.get("EIGEN_INCLUDE_DIR", "/usr/include/eigen3/")],
# no CGAL libraries necessary from CGAL 5.0 onwards
libraries=["gmp", "mpfr"],
)
]

if __name__ == "__main__":
setup(
cmdclass={"build_ext": BuildExt},
cmdclass={"build_ext": build_ext},
ext_modules=ext_modules,
zip_safe=False,
)

0 comments on commit 674ed9b

Please sign in to comment.