X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fandroidassetpackagingtool.cpp;h=a511da04986ba65eae493f31965e1becfbb4a5c5;hb=1ed833343bc83b83c5f61cbfd74423bbba677a04;hp=9e0fef75a990f8252d226ceda12dd396fe84fe60;hpb=266697cea92aed098fff31c1ddd4a4bfab3a683f;p=builder.git diff --git a/source/androidassetpackagingtool.cpp b/source/androidassetpackagingtool.cpp index 9e0fef7..a511da0 100644 --- a/source/androidassetpackagingtool.cpp +++ b/source/androidassetpackagingtool.cpp @@ -1,3 +1,4 @@ +#include #include #include "androidassetpackagingtool.h" #include "androidmanifestfile.h" @@ -23,17 +24,20 @@ AndroidAssetPackagingTool::AndroidAssetPackagingTool(Builder &b, const AndroidSd if(sdk.get_platform_jar().empty()) problems.push_back("Android platform not found"); + + set_run(_run); } -Target *AndroidAssetPackagingTool::create_target(const list &sources, const string &) +Target *AndroidAssetPackagingTool::create_target(const vector &sources, const string &) { AndroidManifestFile *manifest = 0; - list resources; - for(list::const_iterator i=sources.begin(); i!=sources.end(); ++i) + vector resources; + resources.reserve(sources.size()); + for(Target *s: sources) { - if(AndroidManifestFile *m = dynamic_cast(*i)) + if(AndroidManifestFile *m = dynamic_cast(s)) manifest = m; - else if(FileTarget *f = dynamic_cast(*i)) + else if(FileTarget *f = dynamic_cast(s)) resources.push_back(f); } @@ -45,28 +49,28 @@ Target *AndroidAssetPackagingTool::create_target(const list &sources, return res; } -Task *AndroidAssetPackagingTool::run(const Target &tgt) const +Task *AndroidAssetPackagingTool::_run(const AndroidResourceBundle &res) { - const AndroidResourceBundle &res = dynamic_cast(tgt); + const AndroidAssetPackagingTool &tool = dynamic_cast(*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()); - const Target::Dependencies &depends = res.get_dependencies(); - list resource_dirs; - for(Target::Dependencies::const_iterator i=depends.begin(); i!=depends.end(); ++i) + vector resource_dirs; + resource_dirs.reserve(res.get_dependencies().size()); + for(Target *d: res.get_dependencies()) { - FileTarget *file = dynamic_cast(*i); - Target *real = (*i)->get_real_target(); + FileTarget *file = dynamic_cast(d); + Target *real = d->get_real_target(); if(dynamic_cast(real)) { @@ -76,17 +80,17 @@ Task *AndroidAssetPackagingTool::run(const Target &tgt) const 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 seen_dirs; - for(list::const_iterator i=resource_dirs.begin(); i!=resource_dirs.end(); ++i) - if(seen_dirs.insert(i->str()).second) - { - argv.push_back("-S"); - argv.push_back(FS::relative(*i, work_dir).str()); - } + for(const FS::Path &d: resource_dirs) + { + argv.push_back("-S"); + argv.push_back(FS::relative(d, work_dir).str()); + } return new ExternalTask(argv, work_dir); }