From 70f50a2d343c666ced3b31815aee70c216eac49d Mon Sep 17 00:00:00 2001 From: Curtis J Bezault Date: Tue, 23 Apr 2019 15:04:04 -0500 Subject: Add exit code (#6175) * Add exit_fail to vcpkg.cpp * Adding a comment as per @rastaban --- toolsrc/src/vcpkg.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp index f8b883e97..2c0f562b6 100644 --- a/toolsrc/src/vcpkg.cpp +++ b/toolsrc/src/vcpkg.cpp @@ -388,4 +388,7 @@ int main(const int argc, const char* const* const argv) #endif } fflush(stdout); + + //It is expected that one of the sub-commands will exit cleanly before we get here. + Checks::exit_fail(VCPKG_LINE_INFO); } -- cgit v1.2.3 From 48f22127e8d58b331fa1f9e65dc765d05f83f62c Mon Sep 17 00:00:00 2001 From: Hongxu Xu Date: Thu, 25 Apr 2019 07:05:53 +0800 Subject: Specify GIT only when VCPKG_FORCE_SYSTEM_BINARIES is set (#6143) --- toolsrc/src/vcpkg/build.cpp | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index 43f1a6288..53b782edc 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -362,24 +362,31 @@ namespace vcpkg::Build } const Toolset& toolset = paths.get_toolset(pre_build_info); + + std::vector variables { + {"CMD", "BUILD"}, + {"PORT", config.scf.core_paragraph->name}, + {"CURRENT_PORT_DIR", config.port_dir}, + {"TARGET_TRIPLET", spec.triplet().canonical_name()}, + {"VCPKG_PLATFORM_TOOLSET", toolset.version.c_str()}, + {"VCPKG_USE_HEAD_VERSION", + Util::Enum::to_bool(config.build_package_options.use_head_version) ? "1" : "0"}, + {"DOWNLOADS", paths.downloads}, + {"_VCPKG_NO_DOWNLOADS", !Util::Enum::to_bool(config.build_package_options.allow_downloads) ? "1" : "0"}, + {"_VCPKG_DOWNLOAD_TOOL", to_string(config.build_package_options.download_tool)}, + {"FEATURES", Strings::join(";", config.feature_list)}, + {"ALL_FEATURES", all_features}, + }; + + if (!System::get_environment_variable("VCPKG_FORCE_SYSTEM_BINARIES").has_value()) + { + variables.push_back({"GIT", git_exe_path}); + } + const std::string cmd_launch_cmake = System::make_cmake_cmd( cmake_exe_path, paths.ports_cmake, - { - {"CMD", "BUILD"}, - {"PORT", config.scf.core_paragraph->name}, - {"CURRENT_PORT_DIR", config.port_dir}, - {"TARGET_TRIPLET", spec.triplet().canonical_name()}, - {"VCPKG_PLATFORM_TOOLSET", toolset.version.c_str()}, - {"VCPKG_USE_HEAD_VERSION", - Util::Enum::to_bool(config.build_package_options.use_head_version) ? "1" : "0"}, - {"DOWNLOADS", paths.downloads}, - {"_VCPKG_NO_DOWNLOADS", !Util::Enum::to_bool(config.build_package_options.allow_downloads) ? "1" : "0"}, - {"_VCPKG_DOWNLOAD_TOOL", to_string(config.build_package_options.download_tool)}, - {"GIT", git_exe_path}, - {"FEATURES", Strings::join(";", config.feature_list)}, - {"ALL_FEATURES", all_features}, - }); + variables); auto command = make_build_env_cmd(pre_build_info, toolset); if (!command.empty()) -- cgit v1.2.3 From d3c18ed57e2ed58f922e556bbe1f50a88ea7c716 Mon Sep 17 00:00:00 2001 From: Phoebe <925731795@qq.com> Date: Thu, 2 May 2019 06:11:35 +0800 Subject: Remove Addtional checks since CMake support vs2019 now (#6265) Remove Addtional checks since CMake support vs2019 now --- toolsrc/src/vcpkg/vcpkgpaths.cpp | 20 -------------------- 1 file changed, 20 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index 0f99e01d3..512bcfc35 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -192,26 +192,6 @@ namespace vcpkg vs_root_path.generic_string()); } - if (prebuildinfo.cmake_system_name == "WindowsStore") - { - // For now, cmake does not support VS 2019 when using the MSBuild generator. - Util::erase_remove_if(candidates, [&](const Toolset* t) { return t->version == "v142"; }); - Checks::check_exit(VCPKG_LINE_INFO, - !candidates.empty(), - "With the current CMake version, UWP binaries can only be built with toolset version " - "v141 or below. Please install the v141 toolset in VS 2019."); - } - - if (System::get_host_processor() == System::CPUArchitecture::X86) - { - // For now, cmake does not support VS 2019 when using the MSBuild generator. - Util::erase_remove_if(candidates, [&](const Toolset* t) { return t->version == "v142"; }); - Checks::check_exit(VCPKG_LINE_INFO, - !candidates.empty(), - "With the current CMake version, 32-bit machines can build with toolset version " - "v141 or below. Please install the v141 toolset in VS 2019."); - } - Checks::check_exit(VCPKG_LINE_INFO, !candidates.empty(), "No suitable Visual Studio instances were found"); return *candidates.front(); -- cgit v1.2.3 From 77af264118522788e24e463309220f97dcff0a79 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Sat, 18 May 2019 18:15:31 -0700 Subject: [vcpkg] Fix regression in `--debug`. Remove old `features` featureflag. (#6507) --- toolsrc/src/vcpkg.cpp | 9 ++++----- toolsrc/src/vcpkg/build.cpp | 12 ++++-------- toolsrc/src/vcpkg/globalstate.cpp | 2 -- toolsrc/src/vcpkg/install.cpp | 22 +--------------------- toolsrc/src/vcpkg/paragraphs.cpp | 16 +++------------- 5 files changed, 12 insertions(+), 49 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp index 2c0f562b6..9102205d8 100644 --- a/toolsrc/src/vcpkg.cpp +++ b/toolsrc/src/vcpkg.cpp @@ -294,11 +294,11 @@ int main(const int argc, const char* const* const argv) Checks::register_global_shutdown_handler([]() { const auto elapsed_us_inner = GlobalState::timer.lock()->microseconds(); - bool debugging = GlobalState::debugging; + bool debugging = Debug::g_debugging; auto metrics = Metrics::g_metrics.lock(); metrics->track_metric("elapsed_us", elapsed_us_inner); - GlobalState::debugging = false; + Debug::g_debugging = false; metrics->flush(); #if defined(_WIN32) @@ -337,14 +337,13 @@ int main(const int argc, const char* const* const argv) const VcpkgCmdArguments args = VcpkgCmdArguments::create_from_command_line(argc, argv); - if (const auto p = args.featurepackages.get()) GlobalState::feature_packages = *p; if (const auto p = args.binarycaching.get()) GlobalState::g_binary_caching = *p; if (const auto p = args.printmetrics.get()) Metrics::g_metrics.lock()->set_print_metrics(*p); if (const auto p = args.sendmetrics.get()) Metrics::g_metrics.lock()->set_send_metrics(*p); - if (const auto p = args.debug.get()) GlobalState::debugging = *p; + if (const auto p = args.debug.get()) Debug::g_debugging = *p; - if (GlobalState::debugging) + if (Debug::g_debugging) { inner(args); Checks::exit_fail(VCPKG_LINE_INFO); diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index 53b782edc..c5f145052 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -129,11 +130,6 @@ namespace vcpkg::Build::Command const FullPackageSpec spec = Input::check_and_get_full_package_spec( std::move(first_arg), default_triplet, COMMAND_STRUCTURE.example_text); Input::check_triplet(spec.package_spec.triplet(), paths); - if (!spec.features.empty() && !GlobalState::feature_packages) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Feature packages are experimentally available under the --featurepackages flag."); - } perform_and_exit_ex(spec, paths.port_dir(spec.package_spec), options, paths); } } @@ -237,7 +233,7 @@ namespace vcpkg::Build if (!pre_build_info.cmake_system_name.empty() && pre_build_info.cmake_system_name != "WindowsStore") return ""; const char* tonull = " >nul"; - if (GlobalState::debugging) + if (Debug::g_debugging) { tonull = ""; } @@ -511,7 +507,7 @@ namespace vcpkg::Build // which will give a stable ordering and better names in the key entry. // this is not available in the filesystem TS so instead number the files for the key. std::string key = Strings::format("file_%03d", counter++); - if (GlobalState::debugging) + if (Debug::g_debugging) { System::print2("[DEBUG] mapping ", key, " from ", port_file.u8string(), "\n"); } @@ -536,7 +532,7 @@ namespace vcpkg::Build const std::string full_abi_info = Strings::join("", abi_tag_entries, [](const AbiEntry& p) { return p.key + " " + p.value + "\n"; }); - if (GlobalState::debugging) + if (Debug::g_debugging) { System::print2("[DEBUG] \n"); for (auto&& entry : abi_tag_entries) diff --git a/toolsrc/src/vcpkg/globalstate.cpp b/toolsrc/src/vcpkg/globalstate.cpp index 1a2c08474..aac5148fa 100644 --- a/toolsrc/src/vcpkg/globalstate.cpp +++ b/toolsrc/src/vcpkg/globalstate.cpp @@ -7,8 +7,6 @@ namespace vcpkg Util::LockGuarded GlobalState::timer; Util::LockGuarded GlobalState::g_surveydate; - std::atomic GlobalState::debugging(false); - std::atomic GlobalState::feature_packages(true); std::atomic GlobalState::g_binary_caching(false); std::atomic GlobalState::g_init_console_cp(0); diff --git a/toolsrc/src/vcpkg/install.cpp b/toolsrc/src/vcpkg/install.cpp index 14dfb6fa3..646e9bc2e 100644 --- a/toolsrc/src/vcpkg/install.cpp +++ b/toolsrc/src/vcpkg/install.cpp @@ -302,8 +302,7 @@ namespace vcpkg::Install { const InstallPlanType& plan_type = action.plan_type; const std::string display_name = action.spec.to_string(); - const std::string display_name_with_features = - GlobalState::feature_packages ? action.displayname() : display_name; + const std::string display_name_with_features = action.displayname(); const bool is_user_requested = action.request_type == RequestType::USER_REQUESTED; const bool use_head_version = Util::Enum::to_bool(action.build_options.use_head_version); @@ -615,11 +614,6 @@ namespace vcpkg::Install for (auto&& spec : specs) { Input::check_triplet(spec.package_spec.triplet(), paths); - if (!spec.features.empty() && !GlobalState::feature_packages) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Feature packages are experimentally available under the --featurepackages flag."); - } } const bool dry_run = Util::Sets::contains(options.switches, OPTION_DRY_RUN); @@ -655,20 +649,6 @@ namespace vcpkg::Install std::vector action_plan = create_feature_install_plan(provider, FullPackageSpec::to_feature_specs(specs), status_db); - if (!GlobalState::feature_packages) - { - for (auto&& action : action_plan) - { - if (action.remove_action.has_value()) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, - "The installation plan requires feature packages support. Please re-run the " - "command with --featurepackages."); - } - } - } - for (auto&& action : action_plan) { if (auto p_install = action.install_action.get()) diff --git a/toolsrc/src/vcpkg/paragraphs.cpp b/toolsrc/src/vcpkg/paragraphs.cpp index 45f939afd..431fad5ca 100644 --- a/toolsrc/src/vcpkg/paragraphs.cpp +++ b/toolsrc/src/vcpkg/paragraphs.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include @@ -211,17 +211,7 @@ namespace vcpkg::Paragraphs Expected>> pghs = get_paragraphs(fs, path / "CONTROL"); if (auto vector_pghs = pghs.get()) { - auto csf = SourceControlFile::parse_control_file(std::move(*vector_pghs)); - if (!GlobalState::feature_packages) - { - if (auto ptr = csf.get()) - { - Checks::check_exit(VCPKG_LINE_INFO, ptr->get() != nullptr); - ptr->get()->core_paragraph->default_features.clear(); - ptr->get()->feature_paragraphs.clear(); - } - } - return csf; + return SourceControlFile::parse_control_file(std::move(*vector_pghs)); } auto error_info = std::make_unique(); error_info->name = path.filename().generic_u8string(); @@ -279,7 +269,7 @@ namespace vcpkg::Paragraphs auto results = try_load_all_ports(fs, ports_dir); if (!results.errors.empty()) { - if (GlobalState::debugging) + if (Debug::g_debugging) { print_error_message(results.errors); } -- cgit v1.2.3 From 2bec973d3adaf778b5bd628f85335dc910ade61d Mon Sep 17 00:00:00 2001 From: Curtis J Bezault Date: Mon, 20 May 2019 09:29:13 -0700 Subject: Handle moving files across partitions on macOS (#6506) --- toolsrc/src/vcpkg/base/files.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg/base/files.cpp b/toolsrc/src/vcpkg/base/files.cpp index 164394100..431491314 100644 --- a/toolsrc/src/vcpkg/base/files.cpp +++ b/toolsrc/src/vcpkg/base/files.cpp @@ -7,12 +7,17 @@ #include #include -#if defined(__linux__) +#if defined(__linux__) || defined(__APPLE__) #include -#include #include #include #include +#include +#endif +#if defined(__linux__) +#include +#elif defined(__APPLE__) +#include #endif namespace vcpkg::Files @@ -166,7 +171,7 @@ namespace vcpkg::Files std::error_code& ec) override { this->rename(oldpath, newpath, ec); -#if defined(__linux__) +#if defined(__linux__) || defined(__APPLE__) if (ec) { auto dst = newpath; @@ -182,13 +187,25 @@ namespace vcpkg::Files return; } +#if defined(__linux__) off_t bytes = 0; struct stat info = {0}; fstat(i_fd, &info); auto written_bytes = sendfile(o_fd, i_fd, &bytes, info.st_size); +#elif defined(__APPLE__) + auto written_bytes = fcopyfile(i_fd, o_fd, 0, COPYFILE_ALL); +#endif + if (written_bytes == -1) + { + ec.assign(errno, std::generic_category()); + close(i_fd); + close(o_fd); + + return; + } + close(i_fd); close(o_fd); - if (written_bytes == -1) return; this->rename(dst, newpath, ec); if (ec) return; -- cgit v1.2.3 From ce2a6ed8352250f26b7d4c8de8114377a7389e66 Mon Sep 17 00:00:00 2001 From: myd7349 Date: Tue, 21 May 2019 01:18:24 +0800 Subject: [vcpkg] Avoid duplication of targets in the CMake message (#6536) --- toolsrc/src/vcpkg/install.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg/install.cpp b/toolsrc/src/vcpkg/install.cpp index 646e9bc2e..6e7ad274d 100644 --- a/toolsrc/src/vcpkg/install.cpp +++ b/toolsrc/src/vcpkg/install.cpp @@ -531,7 +531,9 @@ namespace vcpkg::Install while (next != last) { auto match = *next; - library_targets[find_package_name].push_back(match[1]); + auto& targets = library_targets[find_package_name]; + if (std::find(targets.cbegin(), targets.cend(), match[1]) == targets.cend()) + targets.push_back(match[1]); ++next; } } -- cgit v1.2.3 From 17623739df4796353d5eb4c9a2ec513c679022e0 Mon Sep 17 00:00:00 2001 From: Sean Warren Date: Thu, 23 May 2019 14:24:02 -0400 Subject: [toolsrc] Optionally allow vcpkg to clean after each build (#6522) * [toolsrc] Optionally allow vcpkg to clean packages, buildtrees and downloads after each build Adds switch --clean-after-build * [toolsrc] Clarify that --clean-after-build deletes downloads * [toolsrc] Revert changes to ci download caching behaviour --- toolsrc/src/vcpkg/build.cpp | 1 + toolsrc/src/vcpkg/commands.ci.cpp | 2 ++ toolsrc/src/vcpkg/commands.upgrade.cpp | 1 + toolsrc/src/vcpkg/export.cpp | 1 + toolsrc/src/vcpkg/install.cpp | 20 +++++++++++++++++--- 5 files changed, 22 insertions(+), 3 deletions(-) (limited to 'toolsrc/src') diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index c5f145052..1f28e9f30 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -70,6 +70,7 @@ namespace vcpkg::Build::Command Build::AllowDownloads::YES, Build::CleanBuildtrees::NO, Build::CleanPackages::NO, + Build::CleanDownloads::NO, Build::DownloadTool::BUILT_IN, GlobalState::g_binary_caching ? Build::BinaryCaching::YES : Build::BinaryCaching::NO, Build::FailOnTombstone::NO, diff --git a/toolsrc/src/vcpkg/commands.ci.cpp b/toolsrc/src/vcpkg/commands.ci.cpp index 10cb7d9fe..4d31c4fbe 100644 --- a/toolsrc/src/vcpkg/commands.ci.cpp +++ b/toolsrc/src/vcpkg/commands.ci.cpp @@ -229,6 +229,7 @@ namespace vcpkg::Commands::CI Build::AllowDownloads::YES, Build::CleanBuildtrees::YES, Build::CleanPackages::YES, + Build::CleanDownloads::NO, Build::DownloadTool::BUILT_IN, GlobalState::g_binary_caching ? Build::BinaryCaching::YES : Build::BinaryCaching::NO, Build::FailOnTombstone::YES, @@ -372,6 +373,7 @@ namespace vcpkg::Commands::CI Build::AllowDownloads::YES, Build::CleanBuildtrees::YES, Build::CleanPackages::YES, + Build::CleanDownloads::NO, Build::DownloadTool::BUILT_IN, GlobalState::g_binary_caching ? Build::BinaryCaching::YES : Build::BinaryCaching::NO, Build::FailOnTombstone::YES, diff --git a/toolsrc/src/vcpkg/commands.upgrade.cpp b/toolsrc/src/vcpkg/commands.upgrade.cpp index 29627db3d..29815ca94 100644 --- a/toolsrc/src/vcpkg/commands.upgrade.cpp +++ b/toolsrc/src/vcpkg/commands.upgrade.cpp @@ -155,6 +155,7 @@ namespace vcpkg::Commands::Upgrade Build::AllowDownloads::YES, Build::CleanBuildtrees::NO, Build::CleanPackages::NO, + Build::CleanDownloads::NO, Build::DownloadTool::BUILT_IN, GlobalState::g_binary_caching ? Build::BinaryCaching::YES : Build::BinaryCaching::NO, Build::FailOnTombstone::NO, diff --git a/toolsrc/src/vcpkg/export.cpp b/toolsrc/src/vcpkg/export.cpp index 870d2c49e..f6a95b61f 100644 --- a/toolsrc/src/vcpkg/export.cpp +++ b/toolsrc/src/vcpkg/export.cpp @@ -75,6 +75,7 @@ namespace vcpkg::Export Build::AllowDownloads::YES, Build::CleanBuildtrees::NO, Build::CleanPackages::NO, + Build::CleanDownloads::NO, Build::DownloadTool::BUILT_IN, Build::BinaryCaching::NO, Build::FailOnTombstone::NO, diff --git a/toolsrc/src/vcpkg/install.cpp b/toolsrc/src/vcpkg/install.cpp index 6e7ad274d..7fb304c17 100644 --- a/toolsrc/src/vcpkg/install.cpp +++ b/toolsrc/src/vcpkg/install.cpp @@ -367,6 +367,16 @@ namespace vcpkg::Install fs.remove_all(package_dir, ec); } + if (action.build_options.clean_downloads == Build::CleanDownloads::YES) + { + auto& fs = paths.get_filesystem(); + const fs::path download_dir = paths.downloads; + std::error_code ec; + for(auto& p: fs.get_files_non_recursive(download_dir)) + if (!fs.is_directory(p)) + fs.remove(p); + } + return {code, std::move(bcf)}; } @@ -463,14 +473,16 @@ namespace vcpkg::Install static constexpr StringLiteral OPTION_KEEP_GOING = "--keep-going"; static constexpr StringLiteral OPTION_XUNIT = "--x-xunit"; static constexpr StringLiteral OPTION_USE_ARIA2 = "--x-use-aria2"; + static constexpr StringLiteral OPTION_CLEAN_AFTER_BUILD = "--clean-after-build"; - static constexpr std::array INSTALL_SWITCHES = {{ + static constexpr std::array INSTALL_SWITCHES = {{ {OPTION_DRY_RUN, "Do not actually build or install"}, {OPTION_USE_HEAD_VERSION, "Install the libraries on the command line using the latest upstream sources"}, {OPTION_NO_DOWNLOADS, "Do not download new sources"}, {OPTION_RECURSE, "Allow removal of packages as part of installation"}, {OPTION_KEEP_GOING, "Continue installing packages on failure"}, {OPTION_USE_ARIA2, "Use aria2 to perform download tasks"}, + {OPTION_CLEAN_AFTER_BUILD, "Clean buildtrees, packages and downloads after building each package"}, }}; static constexpr std::array INSTALL_SETTINGS = {{ {OPTION_XUNIT, "File to output results in XUnit format (Internal use)"}, @@ -623,6 +635,7 @@ namespace vcpkg::Install const bool no_downloads = Util::Sets::contains(options.switches, (OPTION_NO_DOWNLOADS)); const bool is_recursive = Util::Sets::contains(options.switches, (OPTION_RECURSE)); const bool use_aria2 = Util::Sets::contains(options.switches, (OPTION_USE_ARIA2)); + const bool clean_after_build = Util::Sets::contains(options.switches, (OPTION_CLEAN_AFTER_BUILD)); const KeepGoing keep_going = to_keep_going(Util::Sets::contains(options.switches, OPTION_KEEP_GOING)); // create the plan @@ -634,8 +647,9 @@ namespace vcpkg::Install const Build::BuildPackageOptions install_plan_options = { Util::Enum::to_enum(use_head_version), Util::Enum::to_enum(!no_downloads), - Build::CleanBuildtrees::NO, - Build::CleanPackages::NO, + clean_after_build ? Build::CleanBuildtrees::YES : Build::CleanBuildtrees::NO, + clean_after_build ? Build::CleanPackages::YES : Build::CleanPackages::NO, + clean_after_build ? Build::CleanDownloads::YES : Build::CleanDownloads::NO, download_tool, GlobalState::g_binary_caching ? Build::BinaryCaching::YES : Build::BinaryCaching::NO, Build::FailOnTombstone::NO, -- cgit v1.2.3