From 4f600c048e71f96f685e96a8ea91d445ed3fac57 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 15 Feb 2012 18:06:55 +0000 Subject: [PATCH] Fixed compilation of the C++ and Fortran sample programs --- SConstruct | 19 ++++++++++++++++--- samples/cxx/SConscript | 23 +++++++++++------------ samples/f77/SConscript | 19 +++++++++++++++++++ samples/f77/demo_ftnlib.cpp | 7 ++++--- src/fortran/SConscript | 22 +--------------------- 5 files changed, 51 insertions(+), 39 deletions(-) create mode 100644 samples/f77/SConscript diff --git a/SConstruct b/SConstruct index 0d9051caf..0f2ed926d 100644 --- a/SConstruct +++ b/SConstruct @@ -20,6 +20,8 @@ Basic usage: 'scons test-NAME' - Run the regression test named "FOO". + 'scons samples' - Compile the C++ and Fortran samples + 'scons msi' - Build a Windows installer (.msi) for Cantera. """ @@ -845,7 +847,7 @@ buildDir = 'build' buildTargets = [] libraryTargets = [] # objects that go in the Cantera library installTargets = [] -demoTargets = [] +sampleTargets = [] env.SConsignFile() @@ -881,7 +883,7 @@ env['cantera_libs'] = linkLibs # Add targets from the SConscript files in the various subdirectories Export('env', 'buildDir', 'buildTargets', 'libraryTargets', - 'installTargets', 'demoTargets') + 'installTargets', 'sampleTargets') # ext needs to come before src so that libraryTargets is fully populated VariantDir('build/ext', 'ext', duplicate=0) @@ -892,6 +894,12 @@ if env['f90_interface'] == 'y': VariantDir('build/src/fortran/', 'src/fortran', duplicate=1) SConscript('build/src/fortran/SConscript') + # install F90 / F77 samples + inst = env.RecursiveInstall(pjoin('$inst_sampledir', 'f77'), 'samples/f77') + installTargets.extend(inst) + inst = env.RecursiveInstall(pjoin('$inst_sampledir', 'f90'), 'samples/f90') + installTargets.extend(inst) + VariantDir('build/src', 'src', duplicate=0) SConscript('build/src/SConscript') @@ -910,12 +918,17 @@ if env['OS'] != 'Windows': if env['build_docs']: SConscript('doc/SConscript') +if 'samples' in COMMAND_LINE_TARGETS: + SConscript('samples/cxx/SConscript') + if env['f90_interface'] == 'y': + SConscript('samples/f77/SConscript') + # Data files inst = env.Install('$inst_datadir', mglob(env, pjoin('data','inputs'), 'cti', 'xml')) installTargets.extend(inst) ### Meta-targets ### -build_demos = Alias('demos', demoTargets) +build_samples = Alias('samples', sampleTargets) def postBuildMessage(target, source, env): print "**************************************************************" diff --git a/samples/cxx/SConscript b/samples/cxx/SConscript index 5a6de0b35..13d14a7c7 100644 --- a/samples/cxx/SConscript +++ b/samples/cxx/SConscript @@ -1,20 +1,19 @@ from buildutils import * -Import('env', 'buildTargets', 'installTargets', 'demoTargets') +Import('env', 'buildTargets', 'installTargets', 'sampleTargets') localenv = env.Clone() -### Demos ### - # (subdir, program name, [source extensions]) -demos = [('combustor', 'combustor', ['cpp']), - ('flamespeed', 'flamespeed', ['cpp']), - ('kinetics1', 'kinetics1', ['cpp']), - ('NASA_coeffs', 'NASA_coeffs', ['cpp']), - ('rankine', 'rankine', ['cpp'])] +samples = [('combustor', 'combustor', ['cpp']), + ('flamespeed', 'flamespeed', ['cpp']), + ('kinetics1', 'kinetics1', ['cpp']), + ('NASA_coeffs', 'NASA_coeffs', ['cpp']), + ('rankine', 'rankine', ['cpp'])] -for subdir, name, extensions in demos: - prog = localenv.Program(pjoin('demos',subdir, name), - mglob(localenv, pjoin('demos',subdir), *extensions), +for subdir, name, extensions in samples: + prog = localenv.Program(pjoin(subdir, name), + mglob(localenv, subdir, *extensions), + CPPPATH=['#include'], LIBS=env['cantera_libs']) - demoTargets.extend(prog) + sampleTargets.extend(prog) diff --git a/samples/f77/SConscript b/samples/f77/SConscript new file mode 100644 index 000000000..f32f4e9fe --- /dev/null +++ b/samples/f77/SConscript @@ -0,0 +1,19 @@ +from buildutils import * + +Import('env', 'installTargets', 'sampleTargets') +localenv = env.Clone() + +# (program name, [source files]) +samples = [('ctlib', ['ctlib.f']), + ('isentropic', ['isentropic.f'])] + +ftn_demo = localenv.Object('demo_ftnlib.cpp', + CPPPATH=['#include']) +for program_name, fortran_sources in samples: + prog = localenv.Program(program_name, + fortran_sources + ftn_demo, + CPPPATH=['#build/src/fortran', '#include'], + LIBS=env['cantera_libs']+['cantera_fortran']+['stdc++'], + LIBPATH=['#build/lib'], + LINK='$F77') + sampleTargets.extend(prog) diff --git a/samples/f77/demo_ftnlib.cpp b/samples/f77/demo_ftnlib.cpp index 55665037b..5e261566a 100644 --- a/samples/f77/demo_ftnlib.cpp +++ b/samples/f77/demo_ftnlib.cpp @@ -29,6 +29,7 @@ #include using namespace Cantera; +using std::string; // store a pointer to an IdealGasMix object static IdealGasMix* _gas = 0; @@ -62,7 +63,7 @@ Transport* _transptr() // error handler void handleError() { - showErrors(cout); + showErrors(std::cout); exit(-1); } @@ -131,7 +132,7 @@ extern "C" { void getspeciesname_(integer* k, char* name, ftnlen n) { int ik = *k - 1; - fill(name, name + n, ' '); + std::fill(name, name + n, ' '); string spnm = _gas->speciesName(ik); int ns = spnm.size(); unsigned int nmx = (ns > n ? n : ns); @@ -305,7 +306,7 @@ extern "C" { void getreactioneqn_(integer* i, char* eqn, ftnlen n) { int irxn = *i - 1; - fill(eqn, eqn + n, ' '); + std::fill(eqn, eqn + n, ' '); string e = _gas->reactionString(irxn); int ns = e.size(); unsigned int nmx = (ns > n ? n : ns); diff --git a/src/fortran/SConscript b/src/fortran/SConscript index d5e7b5973..dd02e1cf7 100644 --- a/src/fortran/SConscript +++ b/src/fortran/SConscript @@ -1,6 +1,6 @@ from buildutils import * -Import('env', 'buildTargets', 'installTargets', 'demoTargets', 'libraryTargets') +Import('env', 'buildTargets', 'installTargets', 'libraryTargets') localenv = env.Clone() localenv.Append(CPPPATH=['#include', '#src']) @@ -17,23 +17,3 @@ buildTargets.extend(lib) inst = localenv.Install('$inst_libdir', lib) installTargets.extend(inst) installTargets.extend(localenv.Install('$inst_incdir', mods)) - -# (subdir, program name, [source extensions]) -demos = [('f77demos', 'ctlib', ['^ctlib.f']), - ('f77demos', 'isentropic', ['^isentropic.f'])] - -ftn_demo = localenv.Object(pjoin('f77demos','demo_ftnlib.cpp')) -for subdir, name, extensions in demos: - prog = localenv.Program(pjoin(subdir, name), - mglob(localenv, subdir, *extensions) + ftn_demo, - LIBS=env['cantera_libs']+['cantera_fortran']+['stdc++'], - LINK='$F77') - demoTargets.extend(prog) - -inst = localenv.RecursiveInstall(pjoin('$inst_sampledir', 'f77'), - '#samples/f77') -installTargets.extend(inst) - -inst = localenv.RecursiveInstall(pjoin('$inst_sampledir', 'f77'), - '#samples/f90') -installTargets.extend(inst)