diff --git a/.github/workflows/sdist.yml b/.github/workflows/sdist.yml new file mode 100644 index 0000000..a938ff9 --- /dev/null +++ b/.github/workflows/sdist.yml @@ -0,0 +1,35 @@ +# This workflow will install Python and build sdist + +name: sdist + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + - dev + +jobs: + build-dist: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.13 + + - name: Build package + run: | + pip install build + # fake IDL_DIR to build source package without installing IDL + IDL_DIR=/fake-idl-dir python -m build --sdist . + + - name: Store source distribution as artifact + uses: actions/upload-artifact@v4 + with: + path: 'dist/idlbridge-*.tar.gz' diff --git a/MANIFEST.in b/MANIFEST.in index 33f21da..603ab84 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ include README.md MANIFEST.in setup.py .gitignore -recursive-include idlbridge *.py *.pyx *.pxd *.pxi *.pro VERSION +recursive-include idlbridge *.py *.pyx *.pxd *.pxi *.pro recursive-include dev * diff --git a/idlbridge/VERSION b/idlbridge/VERSION deleted file mode 100644 index 1cc5f65..0000000 --- a/idlbridge/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.1.0 \ No newline at end of file diff --git a/idlbridge/__init__.py b/idlbridge/__init__.py index de451ef..743aca0 100644 --- a/idlbridge/__init__.py +++ b/idlbridge/__init__.py @@ -26,9 +26,15 @@ import ctypes as _ctypes from . import _core +try: + from importlib.metadata import version +except ImportError: + # try-except be removed if requires-python set to >= 3.8 + from importlib_metadata import version + __author__ = 'Dr. Alex Meakins' __responsible_officer__ = 'Dr. Alex Meakins' -__version__ = "1.1.0" +__version__ = version("idlbridge") # By default the core (IDL) library is opened by Python with RTLD_LOCAL # preventing subsequently loaded IDL DLM libraries from seeing the IDL_* diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..dcf2909 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "Cython", "numpy"] +build-backend = "setuptools.build_meta" diff --git a/setup.py b/setup.py index eb1fbad..414a3f1 100644 --- a/setup.py +++ b/setup.py @@ -15,8 +15,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with IDLBridge. If not, see . -from distutils.core import setup -from distutils.extension import Extension +from setuptools import setup, Extension from Cython.Build import cythonize import sys import numpy @@ -57,22 +56,18 @@ extra_compile_args = [] extra_link_args = ["-Wl,-rpath,.", "-Wl,-rpath,{}".format(idl_library_path)] -setup_path = path.dirname(path.abspath(__file__)) +idl_core_sources = ["idlbridge/_core.pyx"] +idl_core = Extension( + "idlbridge._core", + idl_core_sources, + include_dirs=include_dirs, + libraries=libraries, + library_dirs=library_dirs, + extra_compile_args=extra_compile_args, + extra_link_args=extra_link_args, +) -# build extension list -extensions = [] -for root, dirs, files in os.walk(setup_path): - for file in files: - if path.splitext(file)[1] == ".pyx": - pyx_file = path.relpath(path.join(root, file), setup_path) - module = path.splitext(pyx_file)[0].replace("/", ".") - extensions.append(Extension(module, - [pyx_file], - include_dirs=include_dirs, - libraries=libraries, - library_dirs=library_dirs, - extra_compile_args=extra_compile_args, - extra_link_args=extra_link_args)) +extensions = [idl_core] if profile: directives = {"profile": True} @@ -83,6 +78,7 @@ name="idlbridge", version=__version__, description="An IDL wrapper for Python", + requires_python=">=3.4", author='Dr. Alex Meakins', author_email='alex.meakins@ukaea.uk', license="LGPLv3", @@ -96,8 +92,10 @@ "Operating System :: POSIX :: Linux", "Topic :: Scientific/Engineering" ], -# setup_requires=["cython>=0.19"], -# install_requires=["cython>=0.19"], + install_requires=[ + "importlib_metadata>=0.1 ; python_version < \"3.8\"", + "numpy", + ], packages=["idlbridge"], ext_modules=cythonize(extensions, force=force, compiler_directives=directives) )