From ba87e3e6c985e7175152993b5efcc7dd2f0e1c93 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Fri, 13 Mar 2009 13:04:22 -0700 Subject: auto import from //branches/cupcake_rel/...@138607 --- tools/aidl/aidl.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++++- tools/aidl/options.cpp | 23 ++++++++++++----- tools/aidl/options.h | 1 + 3 files changed, 85 insertions(+), 7 deletions(-) (limited to 'tools/aidl') diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp index e248763..fc658f5 100644 --- a/tools/aidl/aidl.cpp +++ b/tools/aidl/aidl.cpp @@ -610,6 +610,62 @@ generate_dep_file(const Options& options) } // ========================================================== +static string +generate_outputFileName(const Options& options, const document_item_type* items) +{ + string result; + + // items has already been checked to have only one interface. + if (items->item_type == INTERFACE_TYPE) { + interface_type* type = (interface_type*)items; + + // create the path to the destination folder based on the + // interface package name + result = options.outputBaseFolder; + result += OS_PATH_SEPARATOR; + + string package = type->package; + size_t len = package.length(); + for (size_t i=0; iname.data, '.'); + len = p ? p-type->name.data : strlen(type->name.data); + + result += OS_PATH_SEPARATOR; + result.append(type->name.data, len); + result += ".java"; + } + + return result; +} + +// ========================================================== +static void +check_outputFileName(const string& path) { + size_t len = path.length(); + for (size_t i=0; i 0) { + outputFileName = generate_outputFileName(options, mainDoc); + } + + // make sure the folders of the output file all exists + check_outputFileName(outputFileName); + + err = generate_java(outputFileName, options.inputFileName.c_str(), (interface_type*)mainDoc); return err; diff --git a/tools/aidl/options.cpp b/tools/aidl/options.cpp index 57b10ae..0aa7db2 100644 --- a/tools/aidl/options.cpp +++ b/tools/aidl/options.cpp @@ -13,16 +13,19 @@ usage() " aidl --preprocess OUTPUT INPUT...\n" "\n" "OPTIONS:\n" - " -I search path for import statements.\n" - " -d generate dependency file.\n" - " -p file created by --preprocess to import.\n" - " -b fail when trying to compile a parcelable.\n" + " -I search path for import statements.\n" + " -d generate dependency file.\n" + " -p file created by --preprocess to import.\n" + " -o base output folder for generated files.\n" + " -b fail when trying to compile a parcelable.\n" "\n" "INPUT:\n" " An aidl interface file.\n" "\n" "OUTPUT:\n" - " The generated interface files. If omitted, the input filename is used, with the .aidl extension changed to a .java extension.\n" + " The generated interface files.\n" + " If omitted and the -o option is not used, the input filename is used, with the .aidl extension changed to a .java extension.\n" + " If the -o option is used, the generated files will be placed in the base output folder, under their package folder\n" ); return 1; } @@ -78,6 +81,14 @@ parse_options(int argc, const char* const* argv, Options *options) return usage(); } } + else if (s[1] == 'o') { + if (len > 2) { + options->outputBaseFolder = s+2; + } else { + fprintf(stderr, "-o option (%d) requires a path.\n", i); + return usage(); + } + } else if (len == 2 && s[1] == 'b') { options->failOnParcelable = true; } @@ -111,7 +122,7 @@ parse_options(int argc, const char* const* argv, Options *options) if (i < argc) { options->outputFileName = argv[i]; i++; - } else { + } else if (options->outputBaseFolder.length() == 0) { // copy input into output and change the extension from .aidl to .java options->outputFileName = options->inputFileName; string::size_type pos = options->outputFileName.size()-5; diff --git a/tools/aidl/options.h b/tools/aidl/options.h index dc3c45a..e9bf0f7 100644 --- a/tools/aidl/options.h +++ b/tools/aidl/options.h @@ -20,6 +20,7 @@ struct Options vector preprocessedFiles; string inputFileName; string outputFileName; + string outputBaseFolder; string depFileName; vector filesToPreprocess; -- cgit v1.1