+#include <msp/core/algorithm.h>
#include <msp/fs/utils.h>
#include "androidassetpackagingtool.h"
#include "androidmanifestfile.h"
problems.push_back("Android platform not found");
}
-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))
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);
}