#!/usr/bin/env python from setuptools import setup from distutils.core import Extension from distutils.command.build_ext import build_ext as orig_build_ext import os.path import platform from glob import glob PROJECT_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) # Glob source files for modules core_sources = glob(os.path.join('src', 'core', '*.cpp')) expressions_sources = glob(os.path.join('src', 'expressions', '*.cpp')) logic_sources = glob(os.path.join('src', 'logic', '*.cpp')) storage_sources = glob(os.path.join('src', 'storage', '*.cpp')) # Configuration shared between external modules follows include_dirs = [PROJECT_DIR, os.path.join(PROJECT_DIR, 'src'), os.path.join(PROJECT_DIR, 'resources', 'pybind11', 'include')] libraries = ['storm'] library_dirs = [] extra_compile_args = [] define_macros = [] extra_link_args = [] ext_core = Extension( name='core', sources=['src/mod_core.cpp'] + core_sources, include_dirs=include_dirs, libraries=libraries, library_dirs=library_dirs, extra_compile_args=extra_compile_args, define_macros=define_macros, extra_link_args=extra_link_args ) ext_info = Extension( name='info.info', sources=['src/mod_info.cpp'], include_dirs=include_dirs, libraries=libraries, library_dirs=library_dirs, extra_compile_args=extra_compile_args, define_macros=define_macros, extra_link_args=extra_link_args ) ext_expressions = Extension( name='expressions.expressions', sources=['src/mod_expressions.cpp'] + expressions_sources, include_dirs=include_dirs, libraries=libraries, library_dirs=library_dirs, extra_compile_args=extra_compile_args, define_macros=define_macros, extra_link_args=extra_link_args ) ext_logic = Extension( name='logic.logic', sources=['src/mod_logic.cpp'] + logic_sources, include_dirs=include_dirs, libraries=libraries, library_dirs=library_dirs, extra_compile_args=extra_compile_args, define_macros=define_macros, extra_link_args=extra_link_args ) ext_storage = Extension( name='storage.storage', sources=['src/mod_storage.cpp'] + storage_sources, include_dirs=include_dirs, libraries=libraries, library_dirs=library_dirs, extra_compile_args=extra_compile_args, define_macros=define_macros, extra_link_args=extra_link_args ) class build_ext(orig_build_ext): """Extend build_ext to provide CLN toggle option """ user_options = orig_build_ext.user_options + [ ('use-cln', None, "use cln numbers instead of gmpxx"), ('compile-flags', None, "compile flags for C++"), ] boolean_options = orig_build_ext.boolean_options + ['use-cln'] def initialize_options (self): super(build_ext, self).initialize_options() self.use_cln = None self.compile_flags = None def finalize_options(self): super(build_ext, self).finalize_options() if self.use_cln: self.libraries += ['cln'] if not self.define: self.define = [] else: self.define = list(self.define) self.define += [('STORMPY_USE_CLN', 1)] else: self.libraries += ['gmp', 'gmpxx'] if not self.undef: self.undef = [] self.undef += ['STORMPY_USE_CLN'] if self.library_dirs: # Makes local storm library lookup that much easier self.rpath += self.library_dirs if platform.system() == 'Darwin' and len(self.rpath) > 0: for e in self.extensions: # If rpath is used on OS X, set this option e.extra_link_args.append('-Wl,-rpath,'+self.rpath[0]) for e in self.extensions: e.extra_compile_args += self.compile_flags.split() setup(name="stormpy", version="0.9", author="M. Volk", author_email="matthias.volk@cs.rwth-aachen.de", maintainer="S. Junges", maintainer_email="sebastian.junges@cs.rwth-aachen.de", url="http://moves.rwth-aachen.de", description="stormpy - Python Bindings for Storm", packages=['stormpy', 'stormpy.info', 'stormpy.expressions', 'stormpy.logic', 'stormpy.storage'], package_dir={'':'lib'}, ext_package='stormpy', ext_modules=[ext_core, ext_info, ext_expressions, ext_logic, ext_storage ], cmdclass={ 'build_ext': build_ext, } )