import os
from setuptools import setup

# Monkey patch to prevent bdist_msi from incorrectly overwriting the value of
# build-lib specified on the command line.
# See http://bugs.python.org/issue1109963

# This patch works by returning False the first time that the
# 'has_ext_modules' method is called in bdist_msi.run, which is where the
# replacement of build_lib happens. Subsequent calls to 'has_ext_modules'
# should use the correct value so that the resulting installer is specific to
# this Python version. Known to affect Python versions 2.6 through 3.7. If
# this bug is ever fixed, this patch should be made conditional on the Python
# version.
if os.name == 'nt':
    from distutils.command.bdist_msi import bdist_msi
    bdist_run_orig = bdist_msi.run
    def bdist_run_new(self):
        has_ext_modules_orig = self.distribution.has_ext_modules
        self._first_call = True
        def has_ext_modules():
            if self._first_call:
                self._first_call = False
                return False
            else:
                return has_ext_modules_orig()

        self.distribution.has_ext_modules = has_ext_modules
        return bdist_run_orig(self)

    bdist_msi.run = bdist_run_new

# Monkey patch to resolve https://bugs.python.org/issue34251
# (Affects Python 3.7.0)
if os.name == 'nt':
    import msilib
    msilib.Win64 = msilib.AMD64

# Copy the long_description from docs/sphinx/index.rst
long_description = """
Cantera is a suite of object-oriented software tools for problems involving
chemical kinetics, thermodynamics, and/or transport processes.

Cantera provides types (or classes) of objects representing phases of
matter, interfaces between these phases, reaction managers, time-dependent
reactor networks, and steady one-dimensional reacting flows. Cantera is
currently used for applications including combustion, detonations,
electrochemical energy conversion and storage, fuel cells, batteries, aqueous
electrolyte solutions, plasmas, and thin film deposition.

Cantera can be used from Python and Matlab, or in applications written
in C++ and Fortran 90.
"""

setup(
    name="Cantera",
    version="@cantera_version@",
    description="The Cantera Python Interface",
    long_description=long_description,
    author="Raymond Speth",
    author_email="speth@mit.edu",
    url="http://www.cantera.org",
    packages = [
        'cantera',
        'cantera.data',
        'cantera.test',
        'cantera.test.data',
        'cantera.examples',
    ],
    entry_points={
        'console_scripts': [
            'ck2cti=cantera.ck2cti:script_entry_point',
            'ctml_writer=cantera.ctml_writer:main',
        ],
    },
    classifiers=[
        'Development Status :: 5 - Production/Stable',
        'Intended Audience :: Education',
        'Intended Audience :: Science/Research',
        'License :: OSI Approved :: BSD License',
        'Operating System :: MacOS :: MacOS X',
        'Operating System :: Microsoft :: Windows',
        'Operating System :: POSIX :: Linux',
        'Programming Language :: C++',
        'Programming Language :: Fortran',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
        'Topic :: Scientific/Engineering :: Chemistry',
    ],
    package_data = {
        'cantera.data': ['*.*'],
        'cantera.test.data': ['*.*', '*/*.*'],
        'cantera.examples': ['*/*.*'],
        'cantera': ["@py_extension@", '*.pxd'],
    },
)
