// TODO Separate jar into its own tool and have this one just chain the two
ApkBuilder::ApkBuilder(Builder &b):
- Tool(b, "APK"),
- jarsigner(0)
+ Tool(b, "APK")
{
set_command("jar");
+ set_run(_run);
}
-Target *ApkBuilder::create_target(const list<Target *> &sources, const string &)
+Target *ApkBuilder::create_target(const vector<Target *> &sources, const string &)
{
AndroidResourceBundle *resource_bundle = 0;
- list<FileTarget *> other_files;
+ vector<FileTarget *> other_files;
+ other_files.reserve(sources.size());
for(Target *s: sources)
{
if(AndroidResourceBundle *r = dynamic_cast<AndroidResourceBundle *>(s))
jarsigner->prepare();
}
-Task *ApkBuilder::run(const Target &tgt) const
+Task *ApkBuilder::_run(const AndroidPackageFile &apk)
{
- const AndroidPackageFile &apk = dynamic_cast<const AndroidPackageFile &>(tgt);
+ const ApkBuilder &tool = dynamic_cast<const ApkBuilder &>(*apk.get_tool());
ExternalTask::Arguments argv;
- argv.push_back(executable->get_path().str());
+ argv.push_back(tool.get_executable()->get_path().str());
argv.push_back("u");
FS::Path input_path;
- list<FS::Path> files;
+ vector<FS::Path> files;
+ files.reserve(apk.get_dependencies().size());
for(Target *d: apk.get_dependencies())
{
FileTarget *file = dynamic_cast<FileTarget *>(d);
task->set_stdin(FS::basename(input_path));
task->set_stdout(FS::relative(apk.get_path(), work_dir));
ChainedTask *chain = new ChainedTask(task);
- chain->add_task(jarsigner->run(tgt));
+ chain->add_task(tool.jarsigner->run(apk));
return chain;
}