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(filenames) includes = ' '.join('-I%s' % quoted(Dir(s).abspath) for s in env['CPPPATH']) libdir = ' '.join('-L%s' % quoted(Dir(s).abspath) for s in env['LIBPATH']) libs = ' '.join('-l'+s for s in self.libs) extraFlag = '-cxx' if os.name == 'posix' else '' debugFlag = '-g' if not env['optimize'] else '' outdir = "'%s'" % Dir('#interfaces/matlab/toolbox').abspath text = ("disp('building Cantera...');\n" "mex %(debugFlag)s %(extraFlag)s -v -output ctmethods " "-outdir %(outdir)s " "%(includes)s %(libdir)s " "%(libs)s %(sourcestr)s\n" "disp('done.');\n" "exit\n") % locals() with open(str(target[0]), 'w') as f: f.write(text) localenv = env.Clone() localenv.Append(CPPPATH=['#include', '#src']) libs = ['clib'] if localenv['OS'] != 'Windows': libs.extend(env['cantera_libs']) localenv.Command('build_cantera.m', mglob(localenv, '.', 'cpp'), MatlabBuilder(libs)) localenv['ENV']['PATH'] = os.environ['PATH'] if 'TEMP' in os.environ: localenv['ENV']['TEMP'] = os.environ['TEMP'] build_cmd = 'cd ${SOURCE.dir} && "%(matlab_cmd)s" -nojvm -nosplash -r build_cantera' if os.name == 'posix': mexFile = 'cantera/ctmethods.mexa%i' % localenv['OS_BITS'] elif os.name == 'nt': mexFile = 'cantera/ctmethods.mexw%i' % localenv['OS_BITS'] if localenv['OS_BITS'] == 64: localenv['ENV']['PROCESSOR_ARCHITECTURE'] = "AMD64" else: localenv['ENV']['PROCESSOR_ARCHITECTURE'] = "x86" target = localenv.Command(mexFile, 'build_cantera.m', build_cmd % localenv) buildTargets.extend(target) ### Install the Matlab toolbox ### # 'ctpath.m' target = localenv.SubstFile('ctpath.m', '#interfaces/matlab/ctpath.m.in') buildTargets.extend(target) inst = localenv.Install('$inst_matlab_dir', target) installTargets.extend(inst) # 'cantera_demos.m' inst = localenv.Install('$inst_matlab_dir', '#samples/matlab/cantera_demos.m') installTargets.extend(inst) inst = localenv.RecursiveInstall('$inst_matlab_dir', '#interfaces/matlab/toolbox') installTargets.extend(inst) inst = localenv.RecursiveInstall(pjoin('$inst_sampledir', 'matlab'), '#samples/matlab') installTargets.extend(inst) if os.name == 'nt': inst = localenv.Install('$inst_matlab_dir', localenv['clib_shared']) installTargets.extend(inst)