+#include <msp/core/algorithm.h>
#include <msp/fs/utils.h>
#include "androidassetpackagingtool.h"
#include "androidmanifestfile.h"
if(sdk.get_platform_jar().empty())
problems.push_back("Android platform not found");
+
+ set_run(_run);
}
-Target *AndroidAssetPackagingTool::create_target(const list<Target *> &sources, const string &)
+Target *AndroidAssetPackagingTool::create_target(const vector<Target *> &sources, const string &)
{
AndroidManifestFile *manifest = 0;
- list<FileTarget *> resources;
+ vector<FileTarget *> resources;
+ resources.reserve(sources.size());
for(Target *s: sources)
{
if(AndroidManifestFile *m = dynamic_cast<AndroidManifestFile *>(s))
return res;
}
-Task *AndroidAssetPackagingTool::run(const Target &tgt) const
+Task *AndroidAssetPackagingTool::_run(const AndroidResourceBundle &res)
{
- const AndroidResourceBundle &res = dynamic_cast<const AndroidResourceBundle &>(tgt);
+ const AndroidAssetPackagingTool &tool = dynamic_cast<const AndroidAssetPackagingTool &>(*res.get_tool());
ExternalTask::Arguments argv;
- argv.push_back(executable->get_path().str());
+ argv.push_back(tool.get_executable()->get_path().str());
argv.push_back("package");
FS::Path work_dir = res.get_component()->get_package().get_source_directory();
argv.push_back("-I");
- argv.push_back(sdk.get_platform_jar().str());
+ argv.push_back(tool.sdk.get_platform_jar().str());
argv.push_back("-F");
argv.push_back(FS::relative(res.get_path(), work_dir).str());
- list<FS::Path> resource_dirs;
+ vector<FS::Path> resource_dirs;
+ resource_dirs.reserve(res.get_dependencies().size());
for(Target *d: res.get_dependencies())
{
FileTarget *file = dynamic_cast<FileTarget *>(d);
else if(real->get_package()==res.get_package())
{
const FS::Path &path = file->get_path();
- resource_dirs.push_back(path.subpath(0, path.size()-2));
+ FS::Path res_dir = path.subpath(0, path.size()-2);
+ if(!any_equals(resource_dirs, res_dir))
+ resource_dirs.push_back(res_dir);
}
}
- set<string> seen_dirs;
for(const FS::Path &d: resource_dirs)
- if(seen_dirs.insert(d.str()).second)
- {
- argv.push_back("-S");
- argv.push_back(FS::relative(d, work_dir).str());
- }
+ {
+ argv.push_back("-S");
+ argv.push_back(FS::relative(d, work_dir).str());
+ }
return new ExternalTask(argv, work_dir);
}