from setuptools import setup, find_packages from setuptools import Extension from setuptools.command.build_ext import build_ext import sys import setuptools import glob import os import re import subprocess try: from importlib.machinery import EXTENSION_SUFFIXES suffix = EXTENSION_SUFFIXES[0] except ImportError: suffix = ".so" setupdir = os.path.dirname(__file__) if setupdir != '': os.chdir( setupdir ) cc = "@CMAKE_CXX_COMPILER@" # setuptools will use the first path as the linker. # This should not be ccache as this will fail. # CXX is used for linking and CC for compilation os.environ['CXX'] = cc try: subprocess.call(['ccache', '--version']) os.environ['CC'] = 'ccache {}'.format(cc) print("Using 'ccache {}' as compiler".format(cc)) except OSError as e: os.environ['CC'] = cc print('\nNOTE: please install ccache for faster compilation of python bindings.\n') # This is very hacky but so is the entire setup.py buildsystem. output=subprocess.check_output([cc, "--version"]) libs=['opmcommon', 'boost_system'] output=str(output) if output.find('Free Software Foundation'): libs.append('stdc++fs') if 'build' in sys.argv: if not 'build_ext' in sys.argv: raise TypeError("Missing option 'build_ext'.") ext_modules = [ Extension( 'opm.libopmcommon_python', [ 'cxx/unit_system.cpp', 'cxx/connection.cpp', 'cxx/converters.cpp', 'cxx/deck.cpp', 'cxx/deck_keyword.cpp', 'cxx/eclipse_io.cpp', 'cxx/field_props.cpp', 'cxx/eclipse_config.cpp', 'cxx/eclipse_grid.cpp', 'cxx/eclipse_state.cpp', 'cxx/group.cpp', 'cxx/log.cpp', 'cxx/parsecontext.cpp', 'cxx/parser.cpp', 'cxx/schedule.cpp', 'cxx/summary_state.cpp', 'cxx/table_manager.cpp', 'cxx/well.cpp', 'cxx/emodel_util.cpp', 'cxx/builtin_pybind11.cpp', 'cxx/export.cpp' ], libraries=libs, language='c++', undef_macros=["NDEBUG"], include_dirs=[@SETUP_PY_INCLUDE_DIRS@], extra_compile_args=[@SETUP_PY_FLAGS@], extra_link_args=[@SETUP_PY_LINKAGE@] ) ] with open("README.md", "r") as fh: long_description = fh.read() setup( name='opm', version = '@opm-common_VERSION@' + '@opm-common_PYTHON_PACKAGE_VERSION@', url='http://www.opm-project.org', author='The Open Porous Media Project', author_email='opmuser@gmail.com', description='OPM-Common Python bindings', long_description=long_description, long_description_content_type="text/markdown", packages=[ 'opm', 'opm.io', 'opm.io.deck', 'opm.io.ecl_state', 'opm.io.parser', 'opm.io.schedule', 'opm.io.ecl', 'opm.tools', 'opm.util' ], ext_modules=ext_modules, include_package_data=True, license='Open Source', zip_safe=False, test_suite='tests', setup_requires=["pytest-runner", 'setuptools_scm'], python_requires='>=3.5', classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", ], )