summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-06-20 13:13:12 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-06-20 13:13:12 +0200
commitce1681f2524e512f461a446ee5ca86adfe9116df (patch)
treef1fa78fd494a44dd7836cac4ea696e5601d7a4de
parentc5db2b9db6c8c707c745c5920a4179e6e6b2772c (diff)
Support suppressing CLI runtime generation (--suppress-cli)
This is useful in pure-help pages.
-rw-r--r--cli/generator.cxx22
-rw-r--r--cli/options.cli8
-rw-r--r--cli/options.cxx11
-rw-r--r--cli/options.hxx4
-rw-r--r--cli/options.ixx6
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
{