From ce1681f2524e512f461a446ee5ca86adfe9116df Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 20 Jun 2016 13:13:12 +0200 Subject: Support suppressing CLI runtime generation (--suppress-cli) This is useful in pure-help pages. --- cli/generator.cxx | 22 +++++++++++++++------- cli/options.cli | 8 ++++++++ cli/options.cxx | 11 +++++++++++ cli/options.hxx | 4 ++++ cli/options.ixx | 6 ++++++ 5 files changed, 44 insertions(+), 7 deletions(-) (limited to 'cli') diff --git a/cli/generator.cxx b/cli/generator.cxx index 01f77d5..3a0a55b 100644 --- a/cli/generator.cxx +++ b/cli/generator.cxx @@ -204,13 +204,20 @@ generate (options const& ops, semantics::cli_unit& unit, path const& p) // have to include in the generated header file, we will still // need to generate some template code in the source file. // - bool runtime (true); - for (semantics::cli_unit::includes_iterator i (unit.includes_begin ()); - runtime && i != unit.includes_end (); - ++i) + bool runtime (!ops.suppress_cli ()); + + if (runtime) { - if (i->is_a ()) - runtime = false; + for (semantics::cli_unit::includes_iterator i (unit.includes_begin ()); + i != unit.includes_end (); + ++i) + { + if (i->is_a ()) + { + runtime = false; + break; + } + } } // @@ -391,7 +398,8 @@ generate (options const& ops, semantics::cli_unit& unit, path const& p) if (runtime && !inl) generate_runtime_inline (ctx); - generate_runtime_source (ctx, runtime); + if (!ops.suppress_cli ()) + generate_runtime_source (ctx, runtime); if (!inl) generate_inline (ctx); diff --git a/cli/options.cli b/cli/options.cli index aa353e1..a7e1cee 100644 --- a/cli/options.cli +++ b/cli/options.cli @@ -80,6 +80,14 @@ class options made inline. This option suppresses creation of the inline file." }; + bool --suppress-cli + { + "Do not generate the CLI support types (scanners, parser, etc). Normally, + the support types are generated unless another \cb{.cli} was included, + in which case the support types are expected to be provided by its + generated code." + }; + std::string --cli-namespace = "::cli" { "", diff --git a/cli/options.cxx b/cli/options.cxx index 26f6eba..823dcd4 100644 --- a/cli/options.cxx +++ b/cli/options.cxx @@ -578,6 +578,7 @@ options () generate_file_scanner_ (), generate_vector_scanner_ (), suppress_inline_ (), + suppress_cli_ (), cli_namespace_ ("::cli"), cli_namespace_specified_ (false), ostream_type_ ("::std::ostream"), @@ -710,6 +711,7 @@ options (int& argc, generate_file_scanner_ (), generate_vector_scanner_ (), suppress_inline_ (), + suppress_cli_ (), cli_namespace_ ("::cli"), cli_namespace_specified_ (false), ostream_type_ ("::std::ostream"), @@ -845,6 +847,7 @@ options (int start, generate_file_scanner_ (), generate_vector_scanner_ (), suppress_inline_ (), + suppress_cli_ (), cli_namespace_ ("::cli"), cli_namespace_specified_ (false), ostream_type_ ("::std::ostream"), @@ -980,6 +983,7 @@ options (int& argc, generate_file_scanner_ (), generate_vector_scanner_ (), suppress_inline_ (), + suppress_cli_ (), cli_namespace_ ("::cli"), cli_namespace_specified_ (false), ostream_type_ ("::std::ostream"), @@ -1117,6 +1121,7 @@ options (int start, generate_file_scanner_ (), generate_vector_scanner_ (), suppress_inline_ (), + suppress_cli_ (), cli_namespace_ ("::cli"), cli_namespace_specified_ (false), ostream_type_ ("::std::ostream"), @@ -1250,6 +1255,7 @@ options (::cli::scanner& s, generate_file_scanner_ (), generate_vector_scanner_ (), suppress_inline_ (), + suppress_cli_ (), cli_namespace_ ("::cli"), cli_namespace_specified_ (false), ostream_type_ ("::std::ostream"), @@ -1401,6 +1407,9 @@ print_usage (::std::ostream& os, ::cli::usage_para p) os << "--suppress-inline Generate all functions non-inline." << ::std::endl; + os << "--suppress-cli Do not generate the CLI support types (scanners," << ::std::endl + << " parser, etc)." << ::std::endl; + os << "--cli-namespace Generate the CLI support types in the " << ::std::endl << " namespace (cli by default)." << ::std::endl; @@ -1633,6 +1642,8 @@ struct _cli_options_map_init &::cli::thunk< options, bool, &options::generate_vector_scanner_ >; _cli_options_map_["--suppress-inline"] = &::cli::thunk< options, bool, &options::suppress_inline_ >; + _cli_options_map_["--suppress-cli"] = + &::cli::thunk< options, bool, &options::suppress_cli_ >; _cli_options_map_["--cli-namespace"] = &::cli::thunk< options, std::string, &options::cli_namespace_, &options::cli_namespace_specified_ >; diff --git a/cli/options.hxx b/cli/options.hxx index 5e6ae8c..ed54bb2 100644 --- a/cli/options.hxx +++ b/cli/options.hxx @@ -438,6 +438,9 @@ class options const bool& suppress_inline () const; + const bool& + suppress_cli () const; + const std::string& cli_namespace () const; @@ -796,6 +799,7 @@ class options bool generate_file_scanner_; bool generate_vector_scanner_; bool suppress_inline_; + bool suppress_cli_; std::string cli_namespace_; bool cli_namespace_specified_; std::string ostream_type_; diff --git a/cli/options.ixx b/cli/options.ixx index f8ceadf..609d5a9 100644 --- a/cli/options.ixx +++ b/cli/options.ixx @@ -301,6 +301,12 @@ suppress_inline () const return this->suppress_inline_; } +inline const bool& options:: +suppress_cli () const +{ + return this->suppress_cli_; +} + inline const std::string& options:: cli_namespace () const { -- cgit v1.1