#include "builder.h"
#include "compilecommandsgenerator.h"
#include "compilecommandsjson.h"
+#include "internaltask.h"
#include "objectfile.h"
#include "sourcefile.h"
CompileCommandsGenerator::CompileCommandsGenerator(Builder &b):
Tool(b, "CCJG")
-{ }
-
-Target *CompileCommandsGenerator::create_target(const list<Target *> &, const string &)
{
- throw logic_error("Not implemented");
+ set_run_internal(_run);
}
-Task *CompileCommandsGenerator::run(const Target &target) const
+Target *CompileCommandsGenerator::create_target(const vector<Target *> &, const string &)
{
- const CompileCommandsJson &cmds = dynamic_cast<const CompileCommandsJson &>(target);
- Worker *worker = new Worker(cmds);
- return new InternalTask(worker);
+ throw logic_error("Not implemented");
}
-
-CompileCommandsGenerator::Worker::Worker(const CompileCommandsJson &t):
- target(t)
-{ }
-
-void CompileCommandsGenerator::Worker::main()
+bool CompileCommandsGenerator::_run(const CompileCommandsJson &cmds)
{
- Builder &builder = target.get_package()->get_builder();
- const SourcePackage &spkg = *target.get_package();
+ Builder &builder = cmds.get_package()->get_builder();
+ const SourcePackage &spkg = *cmds.get_package();
string work_dir = c_escape(spkg.get_source_directory().str());
- IO::BufferedFile out(target.get_path().str(), IO::M_WRITE);
+ IO::BufferedFile out(cmds.get_path().str(), IO::M_WRITE);
IO::print(out, "[");
bool first = true;
- const BuildGraph::TargetMap &targets = builder.get_build_graph().get_targets();
- for(BuildGraph::TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
- if(i->second->is_buildable() && i->second->get_package()==&spkg)
- if(ObjectFile *obj = dynamic_cast<ObjectFile *>(i->second))
+ for(const auto &kvp: builder.get_build_graph().get_targets())
+ if(kvp.second->is_buildable() && kvp.second->get_package()==&spkg)
+ if(ObjectFile *obj = dynamic_cast<ObjectFile *>(kvp.second))
{
FS::Path src_path = obj->get_source().get_path();
- Task *task = i->second->build();
+ Task *task = kvp.second->build();
if(!first)
out.put(',');
IO::print(out, "\n\t{\n");
IO::print(out, "\n]\n");
- status = Task::SUCCESS;
+ return true;
}