aboutsummaryrefslogtreecommitdiff
path: root/bdep/new.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bdep/new.cxx')
-rw-r--r--bdep/new.cxx30
1 files changed, 30 insertions, 0 deletions
diff --git a/bdep/new.cxx b/bdep/new.cxx
index 2a8a52d..e870648 100644
--- a/bdep/new.cxx
+++ b/bdep/new.cxx
@@ -524,7 +524,37 @@ cmd_new (cmd_new_options&& o, cli::group_scanner& args)
//
string a;
if (args.more ())
+ {
a = args.next ();
+
+ // Reduce name with a directory component to the simple name with
+ // --output-dir case.
+ //
+ if (path::traits_type::find_separator (a) != string::npos)
+ {
+ try
+ {
+ dir_path p (move (a));
+ a = p.leaf ().string ();
+
+ if (!p.simple ())
+ {
+ if (o.output_dir_specified ())
+ {
+ fail << "both --output-dir|-o and directory component in name "
+ << "specified";
+ }
+
+ o.output_dir (move (p));
+ o.output_dir_specified (true);
+ }
+ }
+ catch (const invalid_path& e)
+ {
+ fail << "invalid path '" << e.path << "'";
+ }
+ }
+ }
else
{
if (!o.output_dir_specified ())