From eba6126d15c393561969870aae7b89bba22163c6 Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Thu, 22 Sep 2016 12:00:27 +0200 Subject: Introduced environment variable "VCPKG_DEFAULT_TRIPLET" --- toolsrc/src/commands_other.cpp | 2 +- toolsrc/src/main.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/commands_other.cpp b/toolsrc/src/commands_other.cpp index f237d2726..f4fad6690 100644 --- a/toolsrc/src/commands_other.cpp +++ b/toolsrc/src/commands_other.cpp @@ -32,7 +32,7 @@ namespace vcpkg //"\n" "Options:\n" " --triplet Specify the target architecture triplet.\n" - " (default: x86-windows, see 'vcpkg help triplet')\n" + " (default: %%VCPKG_DEFAULT_TRIPLET%%, see 'vcpkg help triplet')\n" "\n" " --vcpkg-root Specify the vcpkg root directory\n" " (default: %%VCPKG_ROOT%%)\n" diff --git a/toolsrc/src/main.cpp b/toolsrc/src/main.cpp index e9ce4702c..65d3738ec 100644 --- a/toolsrc/src/main.cpp +++ b/toolsrc/src/main.cpp @@ -69,7 +69,16 @@ static void inner(const vcpkg_cmd_arguments& args) return command_function(args, paths); } - triplet default_target_triplet = triplet::X86_WINDOWS; + triplet default_target_triplet; + const auto vcpkg_default_triplet_env = System::wdupenv_str(L"VCPKG_DEFAULT_TRIPLET"); + if(!vcpkg_default_triplet_env.empty()) + { + default_target_triplet = {std::string(vcpkg_default_triplet_env.begin(), vcpkg_default_triplet_env.end())}; + } + else + { + default_target_triplet = triplet::X86_WINDOWS; + } if (args.target_triplet != nullptr) { -- cgit v1.2.3 From 4a818b6a3e86514af27381fe16dcf311a5c28ffb Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Thu, 22 Sep 2016 13:17:00 +0200 Subject: Fixed encoding of default triplet name --- toolsrc/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/main.cpp b/toolsrc/src/main.cpp index 65d3738ec..2ec2c8fba 100644 --- a/toolsrc/src/main.cpp +++ b/toolsrc/src/main.cpp @@ -73,7 +73,7 @@ static void inner(const vcpkg_cmd_arguments& args) const auto vcpkg_default_triplet_env = System::wdupenv_str(L"VCPKG_DEFAULT_TRIPLET"); if(!vcpkg_default_triplet_env.empty()) { - default_target_triplet = {std::string(vcpkg_default_triplet_env.begin(), vcpkg_default_triplet_env.end())}; + default_target_triplet = {Strings::utf16_to_utf8(vcpkg_default_triplet_env)}; } else { -- cgit v1.2.3 From 31935aa0fd142cbb4e0db1a62ba1483294b740f8 Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Fri, 23 Sep 2016 09:44:30 +0200 Subject: Improved error reporting when user provides invalid triplets --- toolsrc/src/commands_create.cpp | 2 +- toolsrc/src/commands_edit.cpp | 2 +- toolsrc/src/commands_installation.cpp | 2 +- toolsrc/src/commands_remove.cpp | 2 +- toolsrc/src/main.cpp | 39 ++++++++++++++--------------------- toolsrc/src/triplet.cpp | 16 ++++++++++++++ toolsrc/src/vcpkg_cmd_arguments.cpp | 11 ++++++++-- 7 files changed, 44 insertions(+), 30 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/commands_create.cpp b/toolsrc/src/commands_create.cpp index 73d163af8..8ae67b799 100644 --- a/toolsrc/src/commands_create.cpp +++ b/toolsrc/src/commands_create.cpp @@ -7,7 +7,7 @@ namespace vcpkg void create_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) { args.check_max_args(3); - package_spec spec = args.parse_all_arguments_as_package_specs(default_target_triplet).at(0); + package_spec spec = args.parse_all_arguments_as_package_specs(paths, default_target_triplet).at(0); if (args.command_arguments.size() < 2) { System::println(System::color::error, "Error: create requires the archive's URL as the second argument."); diff --git a/toolsrc/src/commands_edit.cpp b/toolsrc/src/commands_edit.cpp index 71ae8b2c8..2272c1277 100644 --- a/toolsrc/src/commands_edit.cpp +++ b/toolsrc/src/commands_edit.cpp @@ -7,7 +7,7 @@ namespace vcpkg { static auto example = "edit zlib"; args.check_max_args(1, example); - package_spec spec = args.parse_all_arguments_as_package_specs(default_target_triplet, example).at(0); + package_spec spec = args.parse_all_arguments_as_package_specs(paths, default_target_triplet, example).at(0); // Find editor std::wstring env_EDITOR = System::wdupenv_str(L"EDITOR"); diff --git a/toolsrc/src/commands_installation.cpp b/toolsrc/src/commands_installation.cpp index 36f26fdab..0ca754dfc 100644 --- a/toolsrc/src/commands_installation.cpp +++ b/toolsrc/src/commands_installation.cpp @@ -111,7 +111,7 @@ namespace vcpkg void build_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) { - std::vector specs = args.parse_all_arguments_as_package_specs(default_target_triplet); + std::vector specs = args.parse_all_arguments_as_package_specs(paths, default_target_triplet); Environment::ensure_utilities_on_path(paths); for (const package_spec& spec : specs) { diff --git a/toolsrc/src/commands_remove.cpp b/toolsrc/src/commands_remove.cpp index f5315ccb1..0b00e10f6 100644 --- a/toolsrc/src/commands_remove.cpp +++ b/toolsrc/src/commands_remove.cpp @@ -25,7 +25,7 @@ namespace vcpkg const std::unordered_set options = args.check_and_get_optional_command_arguments({OPTION_PURGE}); auto status_db = database_load_check(paths); - std::vector specs = args.parse_all_arguments_as_package_specs(default_target_triplet); + std::vector specs = args.parse_all_arguments_as_package_specs(paths, default_target_triplet); bool alsoRemoveFolderFromPackages = options.find(OPTION_PURGE) != options.end(); for (const package_spec& spec : specs) diff --git a/toolsrc/src/main.cpp b/toolsrc/src/main.cpp index 2ec2c8fba..a2f6fa10f 100644 --- a/toolsrc/src/main.cpp +++ b/toolsrc/src/main.cpp @@ -70,40 +70,31 @@ static void inner(const vcpkg_cmd_arguments& args) } triplet default_target_triplet; - const auto vcpkg_default_triplet_env = System::wdupenv_str(L"VCPKG_DEFAULT_TRIPLET"); - if(!vcpkg_default_triplet_env.empty()) + if(args.target_triplet != nullptr) { - default_target_triplet = {Strings::utf16_to_utf8(vcpkg_default_triplet_env)}; + default_target_triplet = {*args.target_triplet}; } else { - default_target_triplet = triplet::X86_WINDOWS; - } - - if (args.target_triplet != nullptr) - { - const std::string& target_triplet = *args.target_triplet; - - auto it = fs::directory_iterator(paths.triplets); - for (; it != fs::directory_iterator(); ++it) + const auto vcpkg_default_triplet_env = System::wdupenv_str(L"VCPKG_DEFAULT_TRIPLET"); + if(!vcpkg_default_triplet_env.empty()) { - std::string triplet_file_name = it->path().stem().generic_u8string(); - if (target_triplet == triplet_file_name) // TODO: fuzzy compare - { - default_target_triplet = {triplet_file_name}; - break; - } + default_target_triplet = {Strings::utf16_to_utf8(vcpkg_default_triplet_env)}; } - - if (it == fs::directory_iterator()) + else { - System::println(System::color::error, "Error: invalid triplet: %s", target_triplet); - TrackProperty("error", "invalid triplet: " + target_triplet); - help_topic_valid_triplet(paths); - exit(EXIT_FAILURE); + default_target_triplet = triplet::X86_WINDOWS; } } + if(!default_target_triplet.validate(paths)) + { + System::println(System::color::error, "Error: invalid triplet: %s", default_target_triplet.value); + TrackProperty("error", "invalid triplet: " + default_target_triplet.value); + help_topic_valid_triplet(paths); + exit(EXIT_FAILURE); + } + if (auto command_function = find_command(args.command, get_available_commands_type_a())) { return command_function(args, paths, default_target_triplet); diff --git a/toolsrc/src/triplet.cpp b/toolsrc/src/triplet.cpp index 9ad3d8847..14f19d5cd 100644 --- a/toolsrc/src/triplet.cpp +++ b/toolsrc/src/triplet.cpp @@ -1,4 +1,5 @@ #include "triplet.h" +#include "vcpkg.h" #include "vcpkg_System.h" #include "vcpkg_Checks.h" @@ -56,4 +57,19 @@ namespace vcpkg Checks::exit_with_message("Unknown system: %s", value); } + + bool triplet::validate(const vcpkg_paths & paths) + { + auto it = fs::directory_iterator(paths.triplets); + for(; it != fs::directory_iterator(); ++it) + { + std::string triplet_file_name = it->path().stem().generic_u8string(); + if(value == triplet_file_name) // TODO: fuzzy compare + { + //value = triplet_file_name; // NOTE: uncomment when implementing fuzzy compare + return true; + } + } + return false; + } } diff --git a/toolsrc/src/vcpkg_cmd_arguments.cpp b/toolsrc/src/vcpkg_cmd_arguments.cpp index 4cfc12716..d302ee42e 100644 --- a/toolsrc/src/vcpkg_cmd_arguments.cpp +++ b/toolsrc/src/vcpkg_cmd_arguments.cpp @@ -181,7 +181,7 @@ namespace vcpkg std::vector vcpkg_cmd_arguments::extract_package_specs_with_unmet_dependencies(const vcpkg_paths& paths, const triplet& default_target_triplet, const StatusParagraphs& status_db) const { - std::vector specs = parse_all_arguments_as_package_specs(default_target_triplet); + std::vector specs = parse_all_arguments_as_package_specs(paths, default_target_triplet); std::unordered_set had_its_immediate_dependencies_added; Graphs::Graph graph; graph.add_vertices(specs); @@ -220,7 +220,7 @@ namespace vcpkg return graph.find_topological_sort(); } - std::vector vcpkg_cmd_arguments::parse_all_arguments_as_package_specs(const triplet& default_target_triplet, const char* example_text) const + std::vector vcpkg_cmd_arguments::parse_all_arguments_as_package_specs(const vcpkg_paths& paths, const triplet& default_target_triplet, const char* example_text) const { size_t arg_count = command_arguments.size(); if (arg_count < 1) @@ -240,6 +240,13 @@ namespace vcpkg expected current_spec = vcpkg::parse(command_argument, default_target_triplet); if (auto spec = current_spec.get()) { + if(!spec->target_triplet.validate(paths)) + { + System::println(System::color::error, "Error: invalid triplet %s for package %s", spec->target_triplet.value, spec->name); + TrackProperty("error", "invalid triplet: " + spec->target_triplet.value); + help_topic_valid_triplet(paths); + exit(EXIT_FAILURE); + } specs.push_back(std::move(*spec)); } else -- cgit v1.2.3 From 3495f094bc77e5e493e6fba29e383eb2631746c0 Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Fri, 23 Sep 2016 10:06:45 +0200 Subject: Fixed errors introduced during merge --- toolsrc/src/commands_installation.cpp | 2 +- toolsrc/src/vcpkg_cmd_arguments.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/commands_installation.cpp b/toolsrc/src/commands_installation.cpp index 0977dcf37..7c4652f4d 100644 --- a/toolsrc/src/commands_installation.cpp +++ b/toolsrc/src/commands_installation.cpp @@ -60,7 +60,7 @@ namespace vcpkg { StatusParagraphs status_db = database_load_check(paths); - std::vector specs = args.parse_all_arguments_as_package_specs(default_target_triplet); + std::vector specs = args.parse_all_arguments_as_package_specs(paths, default_target_triplet); std::vector install_plan = Dependencies::create_dependency_ordered_install_plan(paths, specs, status_db); Checks::check_exit(!install_plan.empty(), "Install plan cannot be empty"); std::string specs_string = to_string(install_plan[0]); diff --git a/toolsrc/src/vcpkg_cmd_arguments.cpp b/toolsrc/src/vcpkg_cmd_arguments.cpp index e0f3f04ee..aea98dd10 100644 --- a/toolsrc/src/vcpkg_cmd_arguments.cpp +++ b/toolsrc/src/vcpkg_cmd_arguments.cpp @@ -179,7 +179,7 @@ namespace vcpkg } } - std::vector vcpkg_cmd_arguments::parse_all_arguments_as_package_specs(const vcpkg_paths& const triplet& default_target_triplet, const char* example_text) const + std::vector vcpkg_cmd_arguments::parse_all_arguments_as_package_specs(const vcpkg_paths& paths, const triplet& default_target_triplet, const char* example_text) const { size_t arg_count = command_arguments.size(); if (arg_count < 1) -- cgit v1.2.3 From 082eb3680e4a6ea0cd50001683c2e37c1693cc4b Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Fri, 23 Sep 2016 11:49:29 +0200 Subject: Disabled validation of per-package triplet --- toolsrc/src/vcpkg_cmd_arguments.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg_cmd_arguments.cpp b/toolsrc/src/vcpkg_cmd_arguments.cpp index aea98dd10..9181342d0 100644 --- a/toolsrc/src/vcpkg_cmd_arguments.cpp +++ b/toolsrc/src/vcpkg_cmd_arguments.cpp @@ -199,13 +199,6 @@ namespace vcpkg expected current_spec = vcpkg::parse(command_argument, default_target_triplet); if (auto spec = current_spec.get()) { - if(!spec->target_triplet.validate(paths)) - { - System::println(System::color::error, "Error: invalid triplet %s for package %s", spec->target_triplet.value, spec->name); - TrackProperty("error", "invalid triplet: " + spec->target_triplet.value); - help_topic_valid_triplet(paths); - exit(EXIT_FAILURE); - } specs.push_back(std::move(*spec)); } else -- cgit v1.2.3