import os import sys import sysconfig setup_type = sys.argv[1] try: from setuptools import setup, Extension from setuptools.command.build_ext import build_ext use_setuptools = True print("setuptools is used.") # Trick to pip install numpy when it's not installed. # Reference: https://stackoverflow.com/questions/2379898/ class CustomBuildExtCommand(build_ext): def run(self): import numpy self.include_dirs.append(numpy.get_include()) build_ext.run(self) except ImportError: from distutils.core import setup, Extension use_setuptools = False print("distutils is used.") try: from numpy.distutils.misc_util import get_numpy_include_dirs except ImportError: print("numpy.distutils.misc_util cannot be imported. Please install " "numpy first before installing spglib...") sys.exit(1) # Workaround Python issue 21121 config_var = sysconfig.get_config_var("CFLAGS") if (config_var is not None and "-Werror=declaration-after-statement" in config_var): os.environ['CFLAGS'] = config_var.replace( "-Werror=declaration-after-statement", "") sources = ['arithmetic.c', 'cell.c', 'delaunay.c', 'debug.c', 'determination.c', 'hall_symbol.c', 'kgrid.c', 'kpoint.c', 'mathfunc.c', 'niggli.c', 'overlap.c', 'pointgroup.c', 'primitive.c', 'refinement.c', 'sitesym_database.c', 'site_symmetry.c', 'spacegroup.c', 'spin.c', 'spg_database.c', 'spglib.c', 'symmetry.c'] if os.path.exists('src'): source_dir = "src" else: source_dir = os.path.join(os.pardir, "src") include_dirs = [source_dir, ] if not use_setuptools: include_dirs += get_numpy_include_dirs() for i, s in enumerate(sources): sources[i] = os.path.join(source_dir, s) extra_compile_args = [] if setup_type == 'test': extra_compile_args.append("-UNDEBUG") extra_link_args = [] define_macros = [] ## Uncomment to activate OpenMP support for gcc # extra_compile_args += ['-fopenmp'] # extra_link_args += ['-lgomp'] ## For debugging # define_macros = [('SPGWARNING', None), # ('SPGDEBUG', None)] extension = Extension('spglib._spglib', include_dirs=include_dirs, sources=['_spglib.c'] + sources, extra_compile_args=extra_compile_args, extra_link_args=extra_link_args, define_macros=define_macros) version_nums = [None, None, None] with open(os.path.join(source_dir, "version.h")) as w: for line in w: for i, chars in enumerate(("MAJOR", "MINOR", "MICRO")): if chars in line: version_nums[i] = int(line.split()[2]) # To deploy to pypi by travis-CI nanoversion = 0 if os.path.isfile("__nanoversion__.txt"): with open('__nanoversion__.txt') as nv: try: for line in nv: nanoversion = int(line.strip()) break except ValueError: nanoversion = 0 if nanoversion != 0: version_nums.append(nanoversion) if None in version_nums: print("Failed to get version number in setup.py.") raise version = ".".join(["%d" % n for n in version_nums[:3]]) if len(version_nums) > 3: version += "-%d" % version_nums[3] if use_setuptools: setup(name='spglib', version=version, cmdclass={'build_ext': CustomBuildExtCommand}, setup_requires=['numpy', 'setuptools>=18.0'], license='BSD-3-Clause', description='This is the spglib module.', long_description=open('README.rst', 'rb').read().decode('utf-8'), long_description_content_type='text/x-rst', author='Atsushi Togo', author_email='atz.togo@gmail.com', url='http://spglib.github.io/spglib/', packages=['spglib'], install_requires=['numpy', ], provides=['spglib'], platforms=['all'], ext_modules=[extension], tests_require=['pyyaml', ]) else: setup(name='spglib', version=version, license='BSD-3-Clause', description='This is the spglib module.', long_description=open('README.rst', 'rb').read().decode('utf-8'), long_description_content_type='text/x-rst', author='Atsushi Togo', author_email='atz.togo@gmail.com', url='http://spglib.github.io/spglib/', packages=['spglib'], requires=['numpy'], provides=['spglib'], platforms=['all'], ext_modules=[extension], tests_require=['pyyaml', ])