from buildutils import * Import('env', 'buildTargets', 'installTargets') 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('..','src',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...'); cd cantera mex -cxx -v -output ctmethods %(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() localenv.Command('build_cantera.m', mglob(localenv, 'src', 'cpp'), MatlabBuilder(localenv['cantera_libs'])) localenv['ENV']['PATH'] = os.environ['PATH'] build_cmd = 'cd ${SOURCE.dir}; %(matlab_cmd)s -nojvm -nosplash -r build_cantera' target = localenv.Command('cantera/ctmethods.mexa64', 'build_cantera.m', build_cmd % localenv) buildTargets.extend(target) ### Install the Matlab toolbox ### inst = localenv.RecursiveInstall(pjoin('$prefix', 'matlab','toolbox'), 'cantera') installTargets.extend(inst) inst = localenv.RecursiveInstall(pjoin('$ct_tutdir', 'matlab'), 'tutorial') installTargets.extend(inst) inst = localenv.RecursiveInstall(pjoin('$ct_demodir', 'matlab'), 'examples') installTargets.extend(inst)