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:
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
Reference in New Issue
Block a user