diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-06-20 13:13:12 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-06-20 13:13:12 +0200 |
commit | ce1681f2524e512f461a446ee5ca86adfe9116df (patch) | |
tree | f1fa78fd494a44dd7836cac4ea696e5601d7a4de | |
parent | c5db2b9db6c8c707c745c5920a4179e6e6b2772c (diff) |
Support suppressing CLI runtime generation (--suppress-cli)
This is useful in pure-help pages.
-rw-r--r-- | cli/generator.cxx | 22 | ||||
-rw-r--r-- | cli/options.cli | 8 | ||||
-rw-r--r-- | cli/options.cxx | 11 | ||||
-rw-r--r-- | cli/options.hxx | 4 | ||||
-rw-r--r-- | cli/options.ixx | 6 |
5 files changed, 44 insertions, 7 deletions
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<semantics::cli_includes> ()) - runtime = false; + for (semantics::cli_unit::includes_iterator i (unit.includes_begin ()); + i != unit.includes_end (); + ++i) + { + if (i->is_a<semantics::cli_includes> ()) + { + 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" { "<ns>", 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 <ns> Generate the CLI support types in the <ns>" << ::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 { |