From 400cd4be38bc422859b9506fb084495a1ac78e6d Mon Sep 17 00:00:00 2001 From: David Reiss Date: Wed, 27 Feb 2008 01:54:55 +0000 Subject: [PATCH] Make the C++ generator dynamic. - Modify the C++ generator constructor to fit the new generic interface. - Register the C++ genrator with the central registry. - Deprecate the old way of invoking the C++ generator. - main.cc no longer includes t_cpp_generator.h. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665508 13f79535-47bb-0310-9956-ffa450edef68 --- compiler/cpp/src/generate/t_cpp_generator.cc | 6 +++++ compiler/cpp/src/generate/t_cpp_generator.h | 17 +++++++++--- compiler/cpp/src/main.cc | 27 ++++++++++---------- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index 1fb63b9c..2f958ae7 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -2926,3 +2926,9 @@ string t_cpp_generator::get_include_prefix(const t_program& program) const { return ""; } + + +THRIFT_REGISTER_GENERATOR(cpp, "C++", +" dense: Generate type specifications for the dense protocol.\n" +" include_prefix: Use full include paths in generated files.\n" +); diff --git a/compiler/cpp/src/generate/t_cpp_generator.h b/compiler/cpp/src/generate/t_cpp_generator.h index ac11e3d3..c8714478 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.h +++ b/compiler/cpp/src/generate/t_cpp_generator.h @@ -21,10 +21,19 @@ */ class t_cpp_generator : public t_oop_generator { public: - t_cpp_generator(t_program* program, bool gen_dense) : - t_oop_generator(program), - gen_dense_(gen_dense), - use_include_prefix_(false) { + t_cpp_generator( + t_program* program, + const std::map& parsed_options, + const std::string& option_string) + : t_oop_generator(program) + { + std::map::const_iterator iter; + + iter = parsed_options.find("dense"); + gen_dense_ = (iter != parsed_options.end()); + + iter = parsed_options.find("include_prefix"); + use_include_prefix_ = (iter != parsed_options.end()); out_dir_base_ = "gen-cpp"; } diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc index b24a9030..375c4a0a 100644 --- a/compiler/cpp/src/main.cc +++ b/compiler/cpp/src/main.cc @@ -34,7 +34,6 @@ #include "main.h" #include "parse/t_program.h" #include "parse/t_scope.h" -#include "generate/t_cpp_generator.h" #include "generate/t_java_generator.h" #include "generate/t_php_generator.h" #include "generate/t_py_generator.h" @@ -602,7 +601,6 @@ void generate_all_fingerprints(t_program* program) { void usage() { fprintf(stderr, "Usage: thrift [options] file\n"); fprintf(stderr, "Options:\n"); - fprintf(stderr, " -cpp Generate C++ output files\n"); fprintf(stderr, " -java Generate Java output files\n"); fprintf(stderr, " -javabean Generate Java bean-style output files\n"); fprintf(stderr, " -php Generate PHP output files\n"); @@ -626,9 +624,6 @@ void usage() { fprintf(stderr, " (default: current directory)\n"); fprintf(stderr, " -I dir Add a directory to the list of directories\n"); fprintf(stderr, " searched for include directives\n"); - fprintf(stderr, " -cpp_use_include_prefix\n"); - fprintf(stderr, " Make C++ include statements use path prefixes\n"); - fprintf(stderr, " -dense Generate metadata for TDenseProtocol (C++)\n"); fprintf(stderr, " -rest Generate PHP REST processors (with -php)\n"); fprintf(stderr, " -nowarn Suppress all compiler warnings (BAD!)\n"); fprintf(stderr, " -strict Strict compiler warnings on\n"); @@ -873,14 +868,6 @@ void generate(t_program* program, const vector& generator_strings) { // Compute fingerprints. generate_all_fingerprints(program); - if (gen_cpp) { - pverbose("Generating C++\n"); - t_cpp_generator* cpp = new t_cpp_generator(program, gen_dense); - cpp->set_use_include_prefix(g_cpp_use_include_prefix); - cpp->generate_program(); - delete cpp; - } - if (gen_java) { pverbose("Generating Java\n"); t_java_generator* java = new t_java_generator(program, false); @@ -1151,8 +1138,20 @@ int main(int argc, char** argv) { } } + // TODO(dreiss): Delete these when everyone is using the new hotness. + if (gen_cpp) { + pwarning(1, "-cpp is deprecated. Use --gen cpp"); + string gen_string = "cpp:"; + if (gen_dense) { + gen_string.append("dense,"); + } + if (g_cpp_use_include_prefix) { + gen_string.append("include_prefix,"); + } + generator_strings.push_back(gen_string); + } // You gotta generate something! - if (!gen_cpp && !gen_java && !gen_javabean && !gen_php && !gen_phpi && !gen_py && !gen_rb && !gen_xsd && !gen_perl && !gen_erl && !gen_ocaml && !gen_hs && !gen_cocoa && !gen_st && !gen_csharp && generator_strings.empty()) { + if (!gen_java && !gen_javabean && !gen_php && !gen_phpi && !gen_py && !gen_rb && !gen_xsd && !gen_perl && !gen_erl && !gen_ocaml && !gen_hs && !gen_cocoa && !gen_st && !gen_csharp && generator_strings.empty()) { fprintf(stderr, "!!! No output language(s) specified\n\n"); usage(); } -- 2.17.1