diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-10-03 17:20:52 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-10-03 17:20:52 -0700 |
| commit | 330b411cd2f4aa25632b2ae5ea2fef396fb13d12 (patch) | |
| tree | c7aa03d21ebb2ad58241f3f412fd13bdb34d8397 /toolsrc/src | |
| parent | e03e617f069471c34e90b1a84e256c1607252f04 (diff) | |
| download | vcpkg-330b411cd2f4aa25632b2ae5ea2fef396fb13d12.tar.gz vcpkg-330b411cd2f4aa25632b2ae5ea2fef396fb13d12.zip | |
[triplet] Force using the factory that does sanity checks
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/BinaryParagraph.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/commands_installation.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/lib.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/main.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/package_spec.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/test.cpp | 6 | ||||
| -rw-r--r-- | toolsrc/src/triplet.cpp | 43 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg_Input.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg_paths.cpp | 2 |
9 files changed, 44 insertions, 27 deletions
diff --git a/toolsrc/src/BinaryParagraph.cpp b/toolsrc/src/BinaryParagraph.cpp index da20c725c..6d32ff137 100644 --- a/toolsrc/src/BinaryParagraph.cpp +++ b/toolsrc/src/BinaryParagraph.cpp @@ -12,9 +12,9 @@ namespace vcpkg name(required_field(fields, "Package")), version(required_field(fields, "Version")), description(optional_field(fields, "Description")), - maintainer(optional_field(fields, "Maintainer")) + maintainer(optional_field(fields, "Maintainer")), + target_triplet(triplet::from_canonical_name(required_field(fields, "Architecture"))) { - target_triplet.value = required_field(fields, "Architecture"); { std::string multi_arch = required_field(fields, "Multi-Arch"); Checks::check_throw(multi_arch == "same", "Multi-Arch must be 'same' but was %s", multi_arch); diff --git a/toolsrc/src/commands_installation.cpp b/toolsrc/src/commands_installation.cpp index d6590fd0d..521d4df71 100644 --- a/toolsrc/src/commands_installation.cpp +++ b/toolsrc/src/commands_installation.cpp @@ -26,7 +26,7 @@ namespace vcpkg const std::wstring command = Strings::wformat(LR"("%%VS140COMNTOOLS%%..\..\VC\vcvarsall.bat" %s && cmake -DCMD=BUILD -DPORT=%s -DTARGET_TRIPLET=%s "-DCURRENT_PORT_DIR=%s/." -P "%s")", Strings::utf8_to_utf16(spec.target_triplet.architecture()), Strings::utf8_to_utf16(spec.name), - Strings::utf8_to_utf16(spec.target_triplet.value), + Strings::utf8_to_utf16(spec.target_triplet.canonical_name()), port_dir.generic_wstring(), ports_cmake_script_path.generic_wstring()); diff --git a/toolsrc/src/lib.cpp b/toolsrc/src/lib.cpp index 2a9b06d4a..2127b7850 100644 --- a/toolsrc/src/lib.cpp +++ b/toolsrc/src/lib.cpp @@ -158,7 +158,7 @@ static void install_and_write_listfile(const vcpkg_paths& paths, const BinaryPar auto prefix_length = package_prefix_path.native().size(); std::error_code ec; - fs::create_directory(paths.installed / bpgh.target_triplet.value, ec); + fs::create_directory(paths.installed / bpgh.target_triplet.canonical_name(), ec); listfile << bpgh.target_triplet << "\n"; for (auto it = fs::recursive_directory_iterator(package_prefix_path); it != fs::recursive_directory_iterator(); ++it) @@ -171,7 +171,7 @@ static void install_and_write_listfile(const vcpkg_paths& paths, const BinaryPar } auto suffix = it->path().generic_u8string().substr(prefix_length + 1); - auto target = paths.installed / bpgh.target_triplet.value / suffix; + auto target = paths.installed / bpgh.target_triplet.canonical_name() / suffix; auto status = it->status(ec); if (ec) diff --git a/toolsrc/src/main.cpp b/toolsrc/src/main.cpp index b49f2bdef..f3d68f5dd 100644 --- a/toolsrc/src/main.cpp +++ b/toolsrc/src/main.cpp @@ -73,14 +73,14 @@ static void inner(const vcpkg_cmd_arguments& args) triplet default_target_triplet; if (args.target_triplet != nullptr) { - default_target_triplet = {*args.target_triplet}; + default_target_triplet = triplet::from_canonical_name(*args.target_triplet); } else { const auto vcpkg_default_triplet_env = System::wdupenv_str(L"VCPKG_DEFAULT_TRIPLET"); if (!vcpkg_default_triplet_env.empty()) { - default_target_triplet = {Strings::utf16_to_utf8(vcpkg_default_triplet_env)}; + default_target_triplet = triplet::from_canonical_name(Strings::utf16_to_utf8(vcpkg_default_triplet_env)); } else { diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index efa54734e..444ec8459 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -16,7 +16,7 @@ namespace vcpkg return std::error_code(package_spec_parse_result::too_many_colons); } - return package_spec{spec.substr(0, pos), spec.substr(pos + 1)}; + return package_spec{spec.substr(0, pos), triplet::from_canonical_name(spec.substr(pos + 1))}; } std::string package_spec::dir() const diff --git a/toolsrc/src/test.cpp b/toolsrc/src/test.cpp index 9c5f1dc87..9bc41fc9e 100644 --- a/toolsrc/src/test.cpp +++ b/toolsrc/src/test.cpp @@ -91,7 +91,7 @@ namespace UnitTest1 Assert::AreEqual("1.2.8", pgh.version.c_str()); Assert::AreEqual("", pgh.maintainer.c_str()); Assert::AreEqual("", pgh.description.c_str()); - Assert::AreEqual("a", pgh.target_triplet.value.c_str()); + Assert::AreEqual("a", pgh.target_triplet.canonical_name().c_str()); Assert::AreEqual(size_t(0), pgh.depends.size()); } @@ -311,7 +311,7 @@ namespace UnitTest1 vcpkg::expected<vcpkg::package_spec> spec = vcpkg::package_spec::from_string("zlib", vcpkg::triplet::X86_WINDOWS); Assert::AreEqual(vcpkg::package_spec_parse_result::success, vcpkg::to_package_spec_parse_result(spec.error_code())); Assert::AreEqual("zlib", spec.get()->name.c_str()); - Assert::AreEqual(vcpkg::triplet::X86_WINDOWS.value, spec.get()->target_triplet.value); + Assert::AreEqual(vcpkg::triplet::X86_WINDOWS.canonical_name(), spec.get()->target_triplet.canonical_name()); } TEST_METHOD(package_spec_parse_with_arch) @@ -319,7 +319,7 @@ namespace UnitTest1 vcpkg::expected<vcpkg::package_spec> spec = vcpkg::package_spec::from_string("zlib:x64-uwp", vcpkg::triplet::X86_WINDOWS); Assert::AreEqual(vcpkg::package_spec_parse_result::success, vcpkg::to_package_spec_parse_result(spec.error_code())); Assert::AreEqual("zlib", spec.get()->name.c_str()); - Assert::AreEqual(vcpkg::triplet::X64_UWP.value, spec.get()->target_triplet.value); + Assert::AreEqual(vcpkg::triplet::X64_UWP.canonical_name(), spec.get()->target_triplet.canonical_name()); } TEST_METHOD(package_spec_parse_with_multiple_colon) diff --git a/toolsrc/src/triplet.cpp b/toolsrc/src/triplet.cpp index e3a935958..a6816b445 100644 --- a/toolsrc/src/triplet.cpp +++ b/toolsrc/src/triplet.cpp @@ -1,17 +1,18 @@ #include "triplet.h" #include "vcpkg_Checks.h" +#include <algorithm> namespace vcpkg { - const triplet triplet::X86_WINDOWS = {"x86-windows"}; - const triplet triplet::X64_WINDOWS = {"x64-windows"}; - const triplet triplet::X86_UWP = {"x86-uwp"}; - const triplet triplet::X64_UWP = {"x64-uwp"}; - const triplet triplet::ARM_UWP = {"arm-uwp"}; + const triplet triplet::X86_WINDOWS = from_canonical_name("x86-windows"); + const triplet triplet::X64_WINDOWS = from_canonical_name("x64-windows"); + const triplet triplet::X86_UWP = from_canonical_name("x86-uwp"); + const triplet triplet::X64_UWP = from_canonical_name("x64-uwp"); + const triplet triplet::ARM_UWP = from_canonical_name("arm-uwp"); std::string to_string(const triplet& t) { - return t.value; + return t.canonical_name(); } std::string to_printf_arg(const triplet& t) @@ -21,7 +22,7 @@ namespace vcpkg bool operator==(const triplet& left, const triplet& right) { - return left.value == right.value; + return left.canonical_name() == right.canonical_name(); } bool operator!=(const triplet& left, const triplet& right) @@ -34,17 +35,33 @@ namespace vcpkg return os << to_string(t); } + triplet triplet::from_canonical_name(const std::string& triplet_as_string) + { + std::string s(triplet_as_string); + std::transform(s.begin(), s.end(), s.begin(), ::tolower); + + auto it = std::find(s.cbegin(), s.cend(), '-'); + Checks::check_exit(it != s.cend(), "Invalid triplet: %s", triplet_as_string); + + triplet t; + t.m_canonical_name = s; + return t; + } + + const std::string& triplet::canonical_name() const + { + return this->m_canonical_name; + } + std::string triplet::architecture() const { - auto it = std::find(this->value.cbegin(), this->value.cend(), '-'); - Checks::check_exit(it != this->value.end(), "Invalid triplet: %s", this->value); - return std::string(this->value.cbegin(), it); + auto it = std::find(this->m_canonical_name.cbegin(), this->m_canonical_name.cend(), '-'); + return std::string(this->m_canonical_name.cbegin(), it); } std::string triplet::system() const { - auto it = std::find(this->value.cbegin(), this->value.cend(), '-'); - Checks::check_exit(it != this->value.end(), "Invalid triplet: %s", this->value); - return std::string(it + 1, this->value.cend()); + auto it = std::find(this->m_canonical_name.cbegin(), this->m_canonical_name.cend(), '-'); + return std::string(it + 1, this->m_canonical_name.cend()); } } diff --git a/toolsrc/src/vcpkg_Input.cpp b/toolsrc/src/vcpkg_Input.cpp index 269de13b3..435d55576 100644 --- a/toolsrc/src/vcpkg_Input.cpp +++ b/toolsrc/src/vcpkg_Input.cpp @@ -33,8 +33,8 @@ namespace vcpkg {namespace Input { if (!paths.is_valid_triplet(t)) { - System::println(System::color::error, "Error: invalid triplet: %s", t.value); - TrackProperty("error", "invalid triplet: " + t.value); + System::println(System::color::error, "Error: invalid triplet: %s", t.canonical_name()); + TrackProperty("error", "invalid triplet: " + t.canonical_name()); help_topic_valid_triplet(paths); exit(EXIT_FAILURE); } diff --git a/toolsrc/src/vcpkg_paths.cpp b/toolsrc/src/vcpkg_paths.cpp index 982eb9970..559f719af 100644 --- a/toolsrc/src/vcpkg_paths.cpp +++ b/toolsrc/src/vcpkg_paths.cpp @@ -61,7 +61,7 @@ namespace vcpkg for (; it != fs::directory_iterator(); ++it) { std::string triplet_file_name = it->path().stem().generic_u8string(); - if (t.value == triplet_file_name) // TODO: fuzzy compare + if (t.canonical_name() == triplet_file_name) // TODO: fuzzy compare { //t.value = triplet_file_name; // NOTE: uncomment when implementing fuzzy compare return true; |
