Merge "AAPT2: Accept a file with arguments when argument list is too long" into nyc-dev am: 28d6c1e493

am: 461be97e30

* commit '461be97e3007d20cc9f494c24aade1302435ae5d':
  AAPT2: Accept a file with arguments when argument list is too long

Change-Id: I7d2bf40c59e06056e46808c8a9d7c7ca97467381
This commit is contained in:
Adam Lesinski
2016-04-28 19:46:42 +00:00
committed by android-build-merger
3 changed files with 40 additions and 1 deletions

View File

@ -1459,6 +1459,21 @@ int link(const std::vector<StringPiece>& args) {
return 1;
}
// Expand all argument-files passed into the command line. These start with '@'.
std::vector<std::string> argList;
for (const std::string& arg : flags.getArgs()) {
if (util::stringStartsWith<char>(arg, "@")) {
const std::string path = arg.substr(1, arg.size() - 1);
std::string error;
if (!file::appendArgsFromFile(path, &argList, &error)) {
context.getDiagnostics()->error(DiagMessage(path) << error);
return 1;
}
} else {
argList.push_back(arg);
}
}
if (verbose) {
context.setVerbose(verbose);
}
@ -1568,7 +1583,7 @@ int link(const std::vector<StringPiece>& args) {
}
LinkCommand cmd(&context, options);
return cmd.run(flags.getArgs());
return cmd.run(argList);
}
} // namespace aapt

View File

@ -18,6 +18,7 @@
#include "util/Util.h"
#include <algorithm>
#include <android-base/file.h>
#include <cerrno>
#include <cstdio>
#include <dirent.h>
@ -190,6 +191,23 @@ Maybe<android::FileMap> mmapPath(const StringPiece& path, std::string* outError)
return std::move(fileMap);
}
bool appendArgsFromFile(const StringPiece& path, std::vector<std::string>* outArgList,
std::string* outError) {
std::string contents;
if (!android::base::ReadFileToString(path.toString(), &contents)) {
if (outError) *outError = "failed to read argument-list file";
return false;
}
for (StringPiece line : util::tokenize<char>(contents, ' ')) {
line = util::trimWhitespace(line);
if (!line.empty()) {
outArgList->push_back(line.toString());
}
}
return true;
}
bool FileFilter::setPattern(const StringPiece& pattern) {
mPatternTokens = util::splitAndLowercase(pattern, ':');
return true;

View File

@ -95,6 +95,12 @@ std::string packageToPath(const StringPiece& package);
*/
Maybe<android::FileMap> mmapPath(const StringPiece& path, std::string* outError);
/**
* Reads the file at path and appends each line to the outArgList vector.
*/
bool appendArgsFromFile(const StringPiece& path, std::vector<std::string>* outArgList,
std::string* outError);
/*
* Filter that determines which resource files/directories are
* processed by AAPT. Takes a pattern string supplied by the user.