from buildutils import *

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

def defaultSetup(env, subdir, extensions):
    return mglob(env, subdir, *extensions)

def baseSetup(env, subdir, extensions):
    escaped_datadir = '\\"' + env['ct_datadir'].replace('\\', '\\\\') + '\\"'
    env.Append(CPPDEFINES={'CANTERA_DATA': escaped_datadir})
    return defaultSetup(env, subdir, extensions)

def equilSetup(env, subdir, extensions):
    env.Append(CPPPATH=['#ext/f2c_libs'])
    return defaultSetup(env, subdir, extensions)

def numericsSetup(env, subdir, extensions):
    if env['use_sundials'] == 'y':
        remove = 'CVodeInt.cpp'
    else:
        remove = 'CVodesIntegrator.cpp'
    return [s for s in mglob(env, subdir, *extensions)
            if s.name != remove]

# (subdir, library name, (file extensions), (extra setup(env)))
libs = [('base', 'ctbase', ['cpp'], baseSetup),
        ('thermo', 'thermo', ['cpp'], defaultSetup),
        ('tpx', 'tpx', ['cpp'], defaultSetup),
        ('equil', 'equil', ['cpp','c'], equilSetup),
        ('converters', 'converters', ['cpp'], defaultSetup),
        ('numerics', 'ctnumerics', ['cpp'], numericsSetup),
        ('kinetics', 'kinetics', ['cpp'], defaultSetup),
        ('transport', 'transport', ['cpp'], defaultSetup),
        ('spectra', 'ctspectra', ['cpp'], defaultSetup),
        ('oneD', 'oneD', ['cpp'], defaultSetup),
        ('zeroD', 'zeroD', ['cpp'], defaultSetup),
        ]

for subdir, libname, extensions, setup in libs:
    localenv = env.Clone()
    localenv.Append(CPPPATH=Dir('#include'))
    localenv.Append(CPPPATH=Dir('#src')) # todo: remove when not needed
    source = setup(localenv, subdir, extensions)

    lib = localenv.Library(pjoin('../lib', libname), source=source)
    localenv.Depends(lib, localenv['config_h_target'])
    inst = localenv.Install('$inst_libdir', lib)
    buildTargets.extend(lib)
    installTargets.extend(inst)

# clib is a bit different
localenv = env.Clone()
source = defaultSetup(localenv, 'clib', ['cpp'])
localenv.Append(CPPPATH=[Dir('#include'), Dir('#src')])

if env['OS'] == 'Windows':
    lib = localenv.SharedLibrary(pjoin('../lib', 'clib'),
                                 source=source,
                                 LIBS=localenv['cantera_libs'])
    env['clib_shared'] = lib
else:
    lib = localenv.Library(pjoin('../lib', 'clib'),
                           source=source)

localenv.Depends(lib, localenv['config_h_target'])
inst = localenv.Install('$inst_libdir', lib)
buildTargets.extend(lib)
installTargets.extend(inst)
