aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/include')
-rw-r--r--toolsrc/include/vcpkg/base/span.h12
-rw-r--r--toolsrc/include/vcpkg/base/util.h2
-rw-r--r--toolsrc/include/vcpkg/build.h8
-rw-r--r--toolsrc/include/vcpkg/commands.h7
-rw-r--r--toolsrc/include/vcpkg/vcpkgcmdarguments.h65
5 files changed, 62 insertions, 32 deletions
diff --git a/toolsrc/include/vcpkg/base/span.h b/toolsrc/include/vcpkg/base/span.h
index 6be546351..158f1ac74 100644
--- a/toolsrc/include/vcpkg/base/span.h
+++ b/toolsrc/include/vcpkg/base/span.h
@@ -57,4 +57,16 @@ namespace vcpkg
{
return {v.data(), v.size()};
}
+
+ template<class T>
+ constexpr T* begin(Span<T> sp)
+ {
+ return sp.begin();
+ }
+
+ template<class T>
+ constexpr T* end(Span<T> sp)
+ {
+ return sp.end();
+ }
} \ No newline at end of file
diff --git a/toolsrc/include/vcpkg/base/util.h b/toolsrc/include/vcpkg/base/util.h
index e67d38ad8..155b16cf7 100644
--- a/toolsrc/include/vcpkg/base/util.h
+++ b/toolsrc/include/vcpkg/base/util.h
@@ -30,7 +30,7 @@ namespace vcpkg::Util
}
template<class Cont, class Func>
- using FmapOut = decltype(std::declval<Func>()(*begin(std::declval<Cont>())));
+ using FmapOut = decltype(std::declval<Func&>()(*begin(std::declval<Cont&>())));
template<class Cont, class Func, class Out = FmapOut<Cont, Func>>
std::vector<Out> fmap(Cont&& xs, Func&& f)
diff --git a/toolsrc/include/vcpkg/build.h b/toolsrc/include/vcpkg/build.h
index 94d9fddf5..824f3ccaf 100644
--- a/toolsrc/include/vcpkg/build.h
+++ b/toolsrc/include/vcpkg/build.h
@@ -18,10 +18,10 @@ namespace vcpkg::Build
{
namespace Command
{
- void perform_and_exit(const FullPackageSpec& full_spec,
- const fs::path& port_dir,
- const ParsedArguments& options,
- const VcpkgPaths& paths);
+ void perform_and_exit_ex(const FullPackageSpec& full_spec,
+ const fs::path& port_dir,
+ const ParsedArguments& options,
+ const VcpkgPaths& paths);
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet);
}
diff --git a/toolsrc/include/vcpkg/commands.h b/toolsrc/include/vcpkg/commands.h
index d9ebad2c4..74fd80c03 100644
--- a/toolsrc/include/vcpkg/commands.h
+++ b/toolsrc/include/vcpkg/commands.h
@@ -23,16 +23,19 @@ namespace vcpkg::Commands
namespace CI
{
+ extern const CommandStructure COMMAND_STRUCTURE;
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet);
}
namespace Env
{
+ extern const CommandStructure COMMAND_STRUCTURE;
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet);
}
namespace Create
{
+ extern const CommandStructure COMMAND_STRUCTURE;
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
}
@@ -49,16 +52,19 @@ namespace vcpkg::Commands
namespace Search
{
+ extern const CommandStructure COMMAND_STRUCTURE;
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
}
namespace List
{
+ extern const CommandStructure COMMAND_STRUCTURE;
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
}
namespace Owns
{
+ extern const CommandStructure COMMAND_STRUCTURE;
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
}
@@ -99,6 +105,7 @@ namespace vcpkg::Commands
namespace Contact
{
+ extern const CommandStructure COMMAND_STRUCTURE;
const std::string& email();
void perform_and_exit(const VcpkgCmdArguments& args);
}
diff --git a/toolsrc/include/vcpkg/vcpkgcmdarguments.h b/toolsrc/include/vcpkg/vcpkgcmdarguments.h
index e59979ad1..a832caf04 100644
--- a/toolsrc/include/vcpkg/vcpkgcmdarguments.h
+++ b/toolsrc/include/vcpkg/vcpkgcmdarguments.h
@@ -17,13 +17,47 @@ namespace vcpkg
std::unordered_map<std::string, std::string> settings;
};
- struct VcpkgCmdArguments
+ struct VcpkgPaths;
+
+ struct CommandSwitch
+ {
+ std::string name;
+ CStringView short_help_text;
+ };
+
+ struct CommandSetting
{
+ std::string name;
+ CStringView short_help_text;
+ };
+
+ struct CommandOptionsStructure
+ {
+ Span<const CommandSwitch> switches;
+ Span<const CommandSetting> settings;
+ };
+
+ struct CommandStructure
+ {
+ std::string example_text;
+
+ size_t minimum_arity;
+ size_t maximum_arity;
+
+ CommandOptionsStructure options;
+
+ std::vector<std::string> (*valid_arguments)(const VcpkgPaths& paths);
+ };
+
#if defined(_WIN32)
- static VcpkgCmdArguments create_from_command_line(const int argc, const wchar_t* const* const argv);
+ using CommandLineCharType = wchar_t;
#else
- static VcpkgCmdArguments create_from_command_line(const int argc, const char* const* const argv);
+ using CommandLineCharType = char;
#endif
+
+ struct VcpkgCmdArguments
+ {
+ static VcpkgCmdArguments create_from_command_line(const int argc, const CommandLineCharType* const* const argv);
static VcpkgCmdArguments create_from_arg_sequence(const std::string* arg_begin, const std::string* arg_end);
std::unique_ptr<std::string> vcpkg_root_dir;
@@ -35,32 +69,9 @@ namespace vcpkg
std::string command;
std::vector<std::string> command_arguments;
- ParsedArguments check_and_get_optional_command_arguments(const std::vector<std::string>& valid_switches,
- const std::vector<std::string>& valid_settings) const;
-
- void check_max_arg_count(const size_t expected_arg_count) const;
- void check_max_arg_count(const size_t expected_arg_count, const std::string& example_text) const;
- void check_min_arg_count(const size_t expected_arg_count) const;
- void check_min_arg_count(const size_t expected_arg_count, const std::string& example_text) const;
- void check_exact_arg_count(const size_t expected_arg_count) const;
- void check_exact_arg_count(const size_t expected_arg_count, const std::string& example_text) const;
+ ParsedArguments parse_arguments(const CommandStructure& command_structure) const;
private:
std::unordered_map<std::string, Optional<std::string>> optional_command_arguments;
};
-
- struct VcpkgPaths;
-
- struct CommandStructure
- {
- CStringView example_text;
-
- size_t minimum_arity;
- size_t maximum_arity;
-
- Span<const std::string> switches;
- Span<const std::string> settings;
-
- std::vector<std::string> (*valid_arguments)(const VcpkgPaths& paths);
- };
}