summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-01-11 10:07:12 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-01-11 10:07:12 +0200
commit8eef1041c8c28a3c4c0528c072a431db2886764b (patch)
tree59e44885f9a9085415fd549e5d4393b6de8fb231 /cli
parent67a2efeebcbbb8e6babd912e203f58b3eddfca8f (diff)
Add support for --output-{prefix,suffix} options
Diffstat (limited to 'cli')
-rw-r--r--cli/generator.cxx16
-rw-r--r--cli/header.cxx5
-rw-r--r--cli/options.cli14
-rw-r--r--cli/options.cxx36
-rw-r--r--cli/options.hxx16
-rw-r--r--cli/options.ixx24
6 files changed, 104 insertions, 7 deletions
diff --git a/cli/generator.cxx b/cli/generator.cxx
index 37092ab..b086089 100644
--- a/cli/generator.cxx
+++ b/cli/generator.cxx
@@ -116,6 +116,9 @@ generate (options const& ops, semantics::cli_unit& unit, path const& p)
path file (p.leaf ());
string base (file.base ().string ());
+ const string& pfx (ops.output_prefix ());
+ const string& sfx (ops.output_suffix ());
+
bool gen_cxx (ops.generate_cxx ());
bool gen_man (ops.generate_man ());
bool gen_html (ops.generate_html ());
@@ -147,9 +150,9 @@ generate (options const& ops, semantics::cli_unit& unit, path const& p)
{
bool inl (!ops.suppress_inline ());
- string hxx_name (base + ops.hxx_suffix ());
- string ixx_name (base + ops.ixx_suffix ());
- string cxx_name (base + ops.cxx_suffix ());
+ string hxx_name (pfx + base + sfx + ops.hxx_suffix ());
+ string ixx_name (pfx + base + sfx + ops.ixx_suffix ());
+ string cxx_name (pfx + base + sfx + ops.cxx_suffix ());
path hxx_path (hxx_name);
path ixx_path (ixx_name);
@@ -391,7 +394,7 @@ generate (options const& ops, semantics::cli_unit& unit, path const& p)
if (!ops.stdout_ ())
{
- path man_path (base + ops.man_suffix ());
+ path man_path (pfx + base + sfx + ops.man_suffix ());
if (!ops.output_dir ().empty ())
man_path = path (ops.output_dir ()) / man_path;
@@ -428,9 +431,10 @@ generate (options const& ops, semantics::cli_unit& unit, path const& p)
if (!ops.stdout_ ())
{
- // Remember to update link derivation if changing this.
+ // May have to update link derivation in format_line() if changing
+ // this.
//
- path html_path (base + ops.html_suffix ());
+ path html_path (pfx + base + sfx + ops.html_suffix ());
if (!ops.output_dir ().empty ())
html_path = path (ops.output_dir ()) / html_path;
diff --git a/cli/header.cxx b/cli/header.cxx
index e2aebd4..4286df6 100644
--- a/cli/header.cxx
+++ b/cli/header.cxx
@@ -288,7 +288,10 @@ namespace
traverse (semantics::cli_includes& i)
{
generate (i.kind (),
- i.file ().base ().string () + options.hxx_suffix ());
+ (options.output_prefix () +
+ i.file ().base ().string () +
+ options.output_suffix () +
+ options.hxx_suffix ()));
}
void
diff --git a/cli/options.cli b/cli/options.cli
index 0f0d1a9..32a2794 100644
--- a/cli/options.cli
+++ b/cli/options.cli
@@ -364,6 +364,20 @@ class options
"Insert the content of <file> at the end of the generated HTML file."
};
+ std::string --output-prefix
+ {
+ "<prefix>",
+ "Add <prefix> at the beginning of the generated output file name(s)."
+ };
+
+ std::string --output-suffix
+ {
+ "<suffix>",
+ "Add <suffix> at the end of the generated output file name(s). Note that
+ it is added before any file type-specific suffixes; see \cb{--*-suffix}
+ below."
+ };
+
std::string --hxx-suffix = ".hxx"
{
"<suffix>",
diff --git a/cli/options.cxx b/cli/options.cxx
index 3e7dbcc..118d8ee 100644
--- a/cli/options.cxx
+++ b/cli/options.cxx
@@ -640,6 +640,10 @@ options ()
man_epilogue_file_specified_ (false),
html_epilogue_file_ (),
html_epilogue_file_specified_ (false),
+ output_prefix_ (),
+ output_prefix_specified_ (false),
+ output_suffix_ (),
+ output_suffix_specified_ (false),
hxx_suffix_ (".hxx"),
hxx_suffix_specified_ (false),
ixx_suffix_ (".ixx"),
@@ -751,6 +755,10 @@ options (int& argc,
man_epilogue_file_specified_ (false),
html_epilogue_file_ (),
html_epilogue_file_specified_ (false),
+ output_prefix_ (),
+ output_prefix_specified_ (false),
+ output_suffix_ (),
+ output_suffix_specified_ (false),
hxx_suffix_ (".hxx"),
hxx_suffix_specified_ (false),
ixx_suffix_ (".ixx"),
@@ -865,6 +873,10 @@ options (int start,
man_epilogue_file_specified_ (false),
html_epilogue_file_ (),
html_epilogue_file_specified_ (false),
+ output_prefix_ (),
+ output_prefix_specified_ (false),
+ output_suffix_ (),
+ output_suffix_specified_ (false),
hxx_suffix_ (".hxx"),
hxx_suffix_specified_ (false),
ixx_suffix_ (".ixx"),
@@ -979,6 +991,10 @@ options (int& argc,
man_epilogue_file_specified_ (false),
html_epilogue_file_ (),
html_epilogue_file_specified_ (false),
+ output_prefix_ (),
+ output_prefix_specified_ (false),
+ output_suffix_ (),
+ output_suffix_specified_ (false),
hxx_suffix_ (".hxx"),
hxx_suffix_specified_ (false),
ixx_suffix_ (".ixx"),
@@ -1095,6 +1111,10 @@ options (int start,
man_epilogue_file_specified_ (false),
html_epilogue_file_ (),
html_epilogue_file_specified_ (false),
+ output_prefix_ (),
+ output_prefix_specified_ (false),
+ output_suffix_ (),
+ output_suffix_specified_ (false),
hxx_suffix_ (".hxx"),
hxx_suffix_specified_ (false),
ixx_suffix_ (".ixx"),
@@ -1207,6 +1227,10 @@ options (::cli::scanner& s,
man_epilogue_file_specified_ (false),
html_epilogue_file_ (),
html_epilogue_file_specified_ (false),
+ output_prefix_ (),
+ output_prefix_specified_ (false),
+ output_suffix_ (),
+ output_suffix_specified_ (false),
hxx_suffix_ (".hxx"),
hxx_suffix_specified_ (false),
ixx_suffix_ (".ixx"),
@@ -1382,6 +1406,12 @@ print_usage (::std::ostream& os, ::cli::usage_para p)
os << "--html-epilogue-file <file> Insert the content of <file> at the end of the" << ::std::endl
<< " generated HTML file." << ::std::endl;
+ os << "--output-prefix <prefix> Add <prefix> at the beginning of the generated" << ::std::endl
+ << " output file name(s)." << ::std::endl;
+
+ os << "--output-suffix <suffix> Add <suffix> at the end of the generated output" << ::std::endl
+ << " file name(s)." << ::std::endl;
+
os << "--hxx-suffix <suffix> Use <suffix> instead of the default '.hxx' to" << ::std::endl
<< " construct the name of the generated header file." << ::std::endl;
@@ -1572,6 +1602,12 @@ struct _cli_options_map_init
_cli_options_map_["--html-epilogue-file"] =
&::cli::thunk< options, std::string, &options::html_epilogue_file_,
&options::html_epilogue_file_specified_ >;
+ _cli_options_map_["--output-prefix"] =
+ &::cli::thunk< options, std::string, &options::output_prefix_,
+ &options::output_prefix_specified_ >;
+ _cli_options_map_["--output-suffix"] =
+ &::cli::thunk< options, std::string, &options::output_suffix_,
+ &options::output_suffix_specified_ >;
_cli_options_map_["--hxx-suffix"] =
&::cli::thunk< options, std::string, &options::hxx_suffix_,
&options::hxx_suffix_specified_ >;
diff --git a/cli/options.hxx b/cli/options.hxx
index 6171cc0..9794732 100644
--- a/cli/options.hxx
+++ b/cli/options.hxx
@@ -631,6 +631,18 @@ class options
html_epilogue_file_specified () const;
const std::string&
+ output_prefix () const;
+
+ bool
+ output_prefix_specified () const;
+
+ const std::string&
+ output_suffix () const;
+
+ bool
+ output_suffix_specified () const;
+
+ const std::string&
hxx_suffix () const;
bool
@@ -797,6 +809,10 @@ class options
bool man_epilogue_file_specified_;
std::string html_epilogue_file_;
bool html_epilogue_file_specified_;
+ std::string output_prefix_;
+ bool output_prefix_specified_;
+ std::string output_suffix_;
+ bool output_suffix_specified_;
std::string hxx_suffix_;
bool hxx_suffix_specified_;
std::string ixx_suffix_;
diff --git a/cli/options.ixx b/cli/options.ixx
index 1d61ecb..ed07f19 100644
--- a/cli/options.ixx
+++ b/cli/options.ixx
@@ -686,6 +686,30 @@ html_epilogue_file_specified () const
}
inline const std::string& options::
+output_prefix () const
+{
+ return this->output_prefix_;
+}
+
+inline bool options::
+output_prefix_specified () const
+{
+ return this->output_prefix_specified_;
+}
+
+inline const std::string& options::
+output_suffix () const
+{
+ return this->output_suffix_;
+}
+
+inline bool options::
+output_suffix_specified () const
+{
+ return this->output_suffix_specified_;
+}
+
+inline const std::string& options::
hxx_suffix () const
{
return this->hxx_suffix_;