from buildutils import *

Import('env', 'build')

class MatlabBuilder(object):
    def __init__(self, libs):
        self.libs = libs

    def __call__(self, target, source, env):
        filenames = [os.path.split(node.path)[1] for node in source]
        sourcestr = ' '.join(pjoin('private',name) for name in filenames)
        includes = ' '.join('-I%s' % Dir(s).abspath for s in env['CPPPATH'])
        libdir = ' '.join('-L%s' % Dir(s).abspath for s in env['LIBPATH'])
        libs = ' '.join('-l'+s for s in self.libs)
        text = """
disp('building Cantera...');
mex -cxx -v %(sourcestr)s %(include)s %(libdir)s %(libs)s
disp('done.');
exit
""" % dict(sourcestr=sourcestr,
           include=includes,
           libdir=libdir,
           libs=libs)

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

localenv = env.Clone()

linkLibs = ['clib','oneD','zeroD','equil','kinetics','transport',
            'thermo','ctnumerics','ctmath','tpx',
            'ctspectra','converters','ctbase']

if env['use_sundials']:
    linkLibs.extend(('sundials_cvodes','sundials_nvecserial'))

linkLibs.extend(localenv['blas_lapack_libs'])

if env['build_with_f2c']:
    linkLibs.append('ctf2c')
else:
    linkLibs.append('gfortran')

localenv.Command('cantera/build_cantera.m', mglob(localenv, 'cantera/private', 'cpp'),
                 MatlabBuilder(linkLibs))

localenv['ENV']['PATH'] = os.environ['PATH']

localenv.Command('cantera/ctfunctions.mexa64', 'cantera/build_cantera.m',
                 'cd ${SOURCE.dir}; %(matlab_cmd)s -nojvm -nosplash -r build_cantera' % localenv)
