versioner: autodetect paths when no specified.

Search for the header/dependency/platform directories in a hard-coded
path relative to $ANDROID_BUILD_TOP when they're not specified.

Change-Id: I476385cfc0247e3b2009348ec37c1810a0e9a7f7
This commit is contained in:
Josh Gao 2016-06-02 14:29:13 -07:00
parent 62aaf8f8fe
commit 9b5af7ad5e
1 changed files with 31 additions and 7 deletions

View File

@ -477,6 +477,7 @@ static void usage(bool help = false) {
exit(1);
} else {
fprintf(stderr, "Version headers at HEADER_PATH, with DEPS_PATH/ARCH/* on the include path\n");
fprintf(stderr, "Autodetects paths if HEADER_PATH and DEPS_PATH are not specified\n");
fprintf(stderr, "\n");
fprintf(stderr, "Target specification (defaults to all):\n");
fprintf(stderr, " -a API_LEVEL\tbuild with specified API level (can be repeated)\n");
@ -559,10 +560,35 @@ int main(int argc, char** argv) {
}
}
if (argc - optind > 2 || optind >= argc) {
if (argc - optind > 2 || optind > argc) {
usage();
}
std::string header_dir;
std::string dependency_dir;
if (optind == argc) {
// Neither HEADER_PATH nor DEPS_PATH were specified, so try to figure them out.
const char* top = getenv("ANDROID_BUILD_TOP");
if (!top) {
fprintf(stderr, "versioner: failed to autodetect bionic paths. Is ANDROID_BUILD_TOP set?\n");
usage();
}
std::string versioner_dir = std::to_string(top) + "/bionic/tools/versioner";
header_dir = versioner_dir + "/current";
dependency_dir = versioner_dir + "/dependencies";
if (platform_dir.empty()) {
platform_dir = versioner_dir + "/platforms";
}
} else {
header_dir = argv[optind];
if (argc - optind == 2) {
dependency_dir = argv[optind + 1];
}
}
if (selected_levels.empty()) {
selected_levels = supported_levels;
}
@ -571,14 +597,12 @@ int main(int argc, char** argv) {
selected_architectures = supported_archs;
}
std::string dependencies = (argc - optind == 2) ? argv[optind + 1] : "";
const char* header_dir = argv[optind];
struct stat st;
if (stat(header_dir, &st) != 0) {
err(1, "failed to stat '%s'", header_dir);
if (stat(header_dir.c_str(), &st) != 0) {
err(1, "failed to stat '%s'", header_dir.c_str());
} else if (!S_ISDIR(st.st_mode)) {
errx(1, "'%s' is not a directory", header_dir);
errx(1, "'%s' is not a directory", header_dir.c_str());
}
std::set<CompilationType> compilation_types;
@ -594,7 +618,7 @@ int main(int argc, char** argv) {
}
bool failed = false;
declaration_database = compileHeaders(compilation_types, header_dir, dependencies, &failed);
declaration_database = compileHeaders(compilation_types, header_dir, dependency_dir, &failed);
if (!sanityCheck(compilation_types, declaration_database)) {
printf("versioner: sanity check failed\n");