from buildutils import *
import distutils.sysconfig

Import('env', 'buildTargets', 'installTargets')

localenv = env.Clone()

def make_ctconf(target, source, env):
    text = """
buildPython = %(BUILD_PYTHON)s
ctversion = %(cantera_version)r
""" % env

    with open(str(target[0]), 'w') as f:
        f.write(text)

gcv = distutils.sysconfig.get_config_var

localenv.Append(CPPPATH=[gcv('INCLUDEPY')],
                SHLINKFLAGS=gcv('LDFLAGS'),
                CPPFLAGS=[gcv('BASECFLAGS'), gcv('OPT')])

pymodule = localenv.SharedLibrary('Cantera/_cantera', ['src/pycantera.cpp'],
                                  LIBS=localenv['cantera_libs'],
                                  SHLIBPREFIX='',
                                  SHLIBSUFFIX=gcv('SO'))
buildTargets.extend(pymodule)

localenv.AddPreAction(pymodule, make_ctconf)
localenv.AddPostAction(pymodule, 'cd Cantera/python; $python_cmd setup.py build')

# Install the Python module
if env['cantera_python_home'] is None:
    # Install Python module in the default location
    extra = ''
elif env['cantera_python_home'] == env['prefix']:
    # Cantera is being installed with a non-default prefix
    extra = '--prefix=' + env['prefix']
else:
    # A specific location for the Cantera python module has been specified
    extra = '--home=' + env['cantera_python_home']

inst = localenv.Command('dummy', pymodule,
                        'cd Cantera/python; $python_cmd setup.py install %s' % extra)
installTargets.extend(inst)

# Copy tutorials
inst = localenv.Install('$ct_tutdir', mglob(localenv, 'tutorial', 'py'))
installTargets.extend(inst)

# Copy examples
exampleFiles = sum([localenv.Glob(pjoin('examples', '*', '*', name))
                    for name in ['runtest', 'cleanup', '*.txt', '*.py', '*.csv']], [])
for f in exampleFiles:
    subdir1, subdir2 = psplit(f.path)[3:5]
    installTargets.extend(localenv.Install(pjoin('$ct_demodir','python',subdir1,subdir2), f))
