diff options
-rw-r--r-- | bpkg/cfg-create.cli | 10 | ||||
-rw-r--r-- | bpkg/cfg-create.cxx | 29 |
2 files changed, 37 insertions, 2 deletions
diff --git a/bpkg/cfg-create.cli b/bpkg/cfg-create.cli index 510f477..c01c039 100644 --- a/bpkg/cfg-create.cli +++ b/bpkg/cfg-create.cli @@ -33,6 +33,16 @@ namespace bpkg \ bpkg create cxx config.cxx=clang++ config.install.root=/usr/local \ + + By default, \cb{bpkg} appends \cb{.config} to the names of the modules + that you specify so that only their configurations are loaded. You can + override this behavior by appending the period (\cb{.}) after the module + name. You can also instruct \cb{bpkg} to use the optional module load by + prefixing the module name with the question mark (\cb{?}). For example: + + \ + bpkg create cxx. \"?cli\" + \ " } diff --git a/bpkg/cfg-create.cxx b/bpkg/cfg-create.cxx index 94a7764..1d8171f 100644 --- a/bpkg/cfg-create.cxx +++ b/bpkg/cfg-create.cxx @@ -59,7 +59,25 @@ namespace bpkg while (args.more ()) { string a (args.next ()); - (a.find ('=') != string::npos ? vars : mods).push_back (move (a)); + + if (a.find ('=') != string::npos) + { + vars.push_back (move (a)); + } + else if (!a.empty ()) + { + // Append .config unless the module name ends with '.', in which case + // strip it. + // + if (a.back () != '.') + a += ".config"; + else + a.pop_back (); + + mods.push_back (move (a)); + } + else + fail << "empty string as argument"; } // Create build/. @@ -106,7 +124,14 @@ namespace bpkg // be loaded in bootstrap. // for (const string& m: mods) - ofs << "using " << m << endl; + { + // If the module name start with '?', then use optional load. + // + if (m.front () != '?') + ofs << "using " << m << endl; + else + ofs << "using? " << m.c_str () + 1 << endl; + } ofs.close (); } |