aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/PackageSpec.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-08-19 19:27:34 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-08-19 19:27:34 -0700
commitf219ce0b8c3e84e5fc1df21ad2f2c8b13f0fe413 (patch)
treed78ee0a1a2e2a30ee465c6c90cd8544106a9c133 /toolsrc/src/PackageSpec.cpp
parent4d34488649fe5d71b8a553706d960a3784c56bb1 (diff)
downloadvcpkg-f219ce0b8c3e84e5fc1df21ad2f2c8b13f0fe413.tar.gz
vcpkg-f219ce0b8c3e84e5fc1df21ad2f2c8b13f0fe413.zip
[vcpkg] Reorganize some parsing functions.
Diffstat (limited to 'toolsrc/src/PackageSpec.cpp')
-rw-r--r--toolsrc/src/PackageSpec.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/toolsrc/src/PackageSpec.cpp b/toolsrc/src/PackageSpec.cpp
index e243f4d89..475b3e3f6 100644
--- a/toolsrc/src/PackageSpec.cpp
+++ b/toolsrc/src/PackageSpec.cpp
@@ -1,8 +1,11 @@
#include "pch.h"
#include "PackageSpec.h"
+#include "vcpkg_Parse.h"
#include "vcpkg_Util.h"
+using vcpkg::Parse::parse_comma_list;
+
namespace vcpkg
{
static bool is_valid_package_spec_char(char c)
@@ -45,11 +48,7 @@ namespace vcpkg
std::string PackageSpec::dir() const { return Strings::format("%s_%s", this->m_name, this->m_triplet); }
- std::string PackageSpec::to_string(const std::string& name, const Triplet& triplet)
- {
- return Strings::format("%s:%s", name, triplet);
- }
- std::string PackageSpec::to_string() const { return to_string(this->name(), this->triplet()); }
+ std::string PackageSpec::to_string() const { return Strings::format("%s:%s", this->name(), this->triplet()); }
bool operator==(const PackageSpec& left, const PackageSpec& right)
{
@@ -106,4 +105,21 @@ namespace vcpkg
}
return f;
}
+
+ ExpectedT<Features, PackageSpecParseResult> Features::from_string(const std::string& name)
+ {
+ auto maybe_spec = ParsedSpecifier::from_string(name);
+ if (auto spec = maybe_spec.get())
+ {
+ Checks::check_exit(
+ VCPKG_LINE_INFO, spec->triplet.empty(), "error: triplet not allowed in specifier: %s", name);
+
+ Features f;
+ f.name = spec->name;
+ f.features = spec->features;
+ return f;
+ }
+
+ return maybe_spec.error();
+ }
}