diff --git a/kmeans1d/version.txt b/kmeans1d/version.txt index 0ea3a94..0d91a54 100644 --- a/kmeans1d/version.txt +++ b/kmeans1d/version.txt @@ -1 +1 @@ -0.2.0 +0.3.0 diff --git a/setup.py b/setup.py index c308fc1..ad9be5b 100755 --- a/setup.py +++ b/setup.py @@ -1,8 +1,31 @@ import os +import setuptools from setuptools import Extension, setup +from setuptools.command.build_ext import build_ext -extension = Extension( - 'kmeans1d._core', ["kmeans1d/_core.cpp"], extra_compile_args=['-std=c++11']) + +class BuildExt(build_ext): + """A custom build extension for adding -stdlib arguments for clang++.""" + + def build_extensions(self): + # '-std=c++11' is added to `extra_compile_args` so the code can compile + # with clang++. This works across compilers (ignored by MSVC). + for extension in self.extensions: + extension.extra_compile_args.append('-std=c++11') + + try: + build_ext.build_extensions(self) + except setuptools.distutils.errors.CompileError: + # Workaround Issue #2. + # '-stdlib=libc++' is added to `extra_compile_args` and `extra_link_args` + # so the code can compile on macOS with Anaconda. + for extension in self.extensions: + extension.extra_compile_args.append('-stdlib=libc++') + extension.extra_link_args.append('-stdlib=libc++') + build_ext.build_extensions(self) + + +extension = Extension('kmeans1d._core', ['kmeans1d/_core.cpp']) version_txt = os.path.join(os.path.dirname(__file__), 'kmeans1d', 'version.txt') with open(version_txt, 'r') as f: @@ -12,19 +35,20 @@ author='Daniel Steinberg', author_email='ds@dannyadam.com', classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'Intended Audience :: Science/Research', - 'Topic :: Scientific/Engineering', - 'Topic :: Scientific/Engineering :: Artificial Intelligence', - 'Topic :: Scientific/Engineering :: Information Analysis', - 'License :: OSI Approved :: MIT License', - 'Operating System :: Unix', - 'Operating System :: POSIX :: Linux', - 'Operating System :: MacOS', - 'Operating System :: Microsoft :: Windows', - 'Programming Language :: Python :: 3', + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'Topic :: Scientific/Engineering', + 'Topic :: Scientific/Engineering :: Artificial Intelligence', + 'Topic :: Scientific/Engineering :: Information Analysis', + 'License :: OSI Approved :: MIT License', + 'Operating System :: Unix', + 'Operating System :: POSIX :: Linux', + 'Operating System :: MacOS', + 'Operating System :: Microsoft :: Windows', + 'Programming Language :: Python :: 3', ], + cmdclass={'build_ext': BuildExt}, description='A Python package for optimal 1D k-means clustering', ext_modules=[extension], keywords=['k-means', 'machine learning', 'optimization'],