diff --git a/example/example.py b/example/example.py index 9a17fe2..687e2aa 100644 --- a/example/example.py +++ b/example/example.py @@ -17,6 +17,6 @@ result = np.array(nninterpol(x, y, z, nx, ny)) plt.imshow(result) plt.scatter(x, y, c=z, edgecolor='k', linewidth=0.5) -plt.savefig('nn.jpg', dpi=120, bbox_inches='tight') +plt.savefig('nn_new.jpg', dpi=120, bbox_inches='tight') # rm -rf build && pip uninstall nnpycgal -y && python setup.py install && python example/example.py \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..875cc22 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[build-system] +requires = [ + "setuptools>=42", + "wheel", + "cmake>=3.10.2", + "pybind11>=2.11.1", +] +build-backend = "setuptools.build_meta" + +[project] +name = "nnpycgal" +version = "0.1" +description = "Natural Neighbor Interpolation using CGAL" +authors = [ + {name = "Jan Schindler", email = "schindlerj@landcareresearch.co.nz"} +] +requires-python = ">=3.10" +license = {file = "LICENSE.md"} +readme = "README.md" + +[tool.setuptools] +package-dir = {"" = "src"} +packages = ["nnpycgal"] \ No newline at end of file diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..0602a4e --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[options] +zip_safe = False \ No newline at end of file diff --git a/setup.py b/setup.py index dbfa85d..48f5bfd 100644 --- a/setup.py +++ b/setup.py @@ -1,81 +1,49 @@ import os -import re import sys import platform import subprocess - -from distutils.version import LooseVersion -from setuptools import setup, find_packages, Extension +from setuptools import setup, Extension from setuptools.command.build_ext import build_ext - class CMakeExtension(Extension): def __init__(self, name, sourcedir=''): Extension.__init__(self, name, sources=[]) self.sourcedir = os.path.abspath(sourcedir) - class CMakeBuild(build_ext): def run(self): try: - out = subprocess.check_output(['cmake', '--version']) + subprocess.check_output(['cmake', '--version']) except OSError: - raise RuntimeError( - "CMake must be installed to build the following extensions: " + - ", ".join(e.name for e in self.extensions)) - - if platform.system() == "Windows": - cmake_version = LooseVersion(re.search(r'version\s*([\d.]+)', - out.decode()).group(1)) - if cmake_version < '3.1.0': - raise RuntimeError("CMake >= 3.1.0 is required on Windows") - + raise RuntimeError("CMake must be installed to build this extension") + for ext in self.extensions: self.build_extension(ext) def build_extension(self, ext): - extdir = os.path.abspath( - os.path.dirname(self.get_ext_fullpath(ext.name))) - cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, - '-DPYTHON_EXECUTABLE=' + sys.executable] + extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name))) + + cmake_args = [ + f'-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}', + f'-DPYTHON_EXECUTABLE={sys.executable}', + f'-DCMAKE_BUILD_TYPE={"Debug" if self.debug else "Release"}' + ] - cfg = 'Debug' if self.debug else 'Release' - build_args = ['--config', cfg] + build_args = ['--config', 'Debug' if self.debug else 'Release'] if platform.system() == "Windows": - cmake_args += ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format( - cfg.upper(), - extdir)] - if sys.maxsize > 2**32: - cmake_args += ['-A', 'x64'] + cmake_args += ['-A', 'x64'] if sys.maxsize > 2**32 else [] build_args += ['--', '/m'] - build_args += ['-fopenmp'] else: - cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg] build_args += ['--', '-j2'] - env = os.environ.copy() - env['CXXFLAGS'] = '{} -DVERSION_INFO=\\"{}\\"'.format( - env.get('CXXFLAGS', ''), - self.distribution.get_version()) - if not os.path.exists(self.build_temp): - os.makedirs(self.build_temp) - subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, - cwd=self.build_temp, env=env) - subprocess.check_call(['cmake', '--build', '.'] + build_args, - cwd=self.build_temp) - print() # Add an empty line for cleaner output + build_temp = os.path.join(self.build_temp, ext.name) + os.makedirs(build_temp, exist_ok=True) + + subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, cwd=build_temp) + subprocess.check_call(['cmake', '--build', '.'] + build_args, cwd=build_temp) setup( - name='nnpycgal', - version='0.1', - author='Jan Schindler', - author_email='schindlerj@landcareresearch.co.nz', - description='Natural Neighbor Interpolation using CGAL', - long_description='', - packages=find_packages('src'), - package_dir={'':'src'}, ext_modules=[CMakeExtension('nnpycgal/nnpycgal')], - cmdclass=dict(build_ext=CMakeBuild), - zip_safe=False, + cmdclass={'build_ext': CMakeBuild}, ) \ No newline at end of file diff --git a/src/nnpycgal/__init__.py b/src/nnpycgal/__init__.py index 8b13789..e69de29 100644 --- a/src/nnpycgal/__init__.py +++ b/src/nnpycgal/__init__.py @@ -1 +0,0 @@ -