X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fsourcegenerator.cpp;h=6394bd715861466eef2f6fc78640d795c35e31d2;hb=8543062496cb35d73014d0a9877cbe5553aa30a4;hp=f00b26bc8a5dc06bf1dddf2d0e79ac89ed171389;hpb=5033a9de732963dfcadc42ad381df00b69cf624d;p=builder.git diff --git a/source/sourcegenerator.cpp b/source/sourcegenerator.cpp index f00b26b..6394bd7 100644 --- a/source/sourcegenerator.cpp +++ b/source/sourcegenerator.cpp @@ -22,7 +22,7 @@ Target *SourceGenerator::create_source(const Component &comp, const FS::Path &pa Target *SourceGenerator::create_target(const list &sources, const string &) { - if(sources.size()!=1) + if(sources.empty()) throw invalid_argument("SourceGenerator::create_target"); if(out_suffixes.empty()) throw logic_error("No output suffixes"); @@ -30,7 +30,13 @@ Target *SourceGenerator::create_target(const list &sources, const stri TemplateFile &tmpl = dynamic_cast(*sources.front()); const Component *comp = tmpl.get_component(); const SourcePackage *pkg = tmpl.get_package(); - string base = FS::basepart(FS::basename(tmpl.get_path())); + string base; + if(processing_unit==ONE_FILE) + base = FS::basepart(FS::basename(tmpl.get_path())); + else if(processing_unit==DIRECTORY) + base = FS::basename(FS::dirname(tmpl.get_path())); + else + base = comp->get_name(); Target *primary = 0; for(list::const_iterator i=out_suffixes.begin(); i!=out_suffixes.end(); ++i) @@ -41,7 +47,8 @@ Target *SourceGenerator::create_target(const list &sources, const stri FS::Path fn = pkg->get_temp_directory()/comp->get_name()/(base+*i); Target *target = tool->create_source(*comp, fn); target->set_tool(*this); - target->add_dependency(tmpl); + for(list::const_iterator j=sources.begin(); j!=sources.end(); ++j) + target->add_dependency(**j); if(primary) primary->add_side_effect(*target); else @@ -82,6 +89,7 @@ SourceGenerator::Loader::Loader(SourceGenerator &sg): add("command", &Loader::command); add("in_suffix", &Loader::in_suffix); add("out_suffix", &Loader::out_suffix); + add("processing_unit", static_cast(&SourceGenerator::processing_unit)); } void SourceGenerator::Loader::argument(const string &a) @@ -91,7 +99,10 @@ void SourceGenerator::Loader::argument(const string &a) void SourceGenerator::Loader::command(const string &c) { - obj.set_command((obj.package.get_source_directory()/c).str()); + if(c.find('/')!=string::npos) + obj.set_command((obj.package.get_source_directory()/c).str()); + else + obj.set_command(c); } void SourceGenerator::Loader::in_suffix(const string &s)