diff options
Diffstat (limited to 'toolsrc/src/vcpkg.cpp')
| -rw-r--r-- | toolsrc/src/vcpkg.cpp | 83 |
1 files changed, 60 insertions, 23 deletions
diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp index 97565bf41..f8b883e97 100644 --- a/toolsrc/src/vcpkg.cpp +++ b/toolsrc/src/vcpkg.cpp @@ -1,3 +1,13 @@ +#if defined(_MSC_VER) && _MSC_VER < 1911 +// [[nodiscard]] is not recognized before VS 2017 version 15.3 +#pragma warning(disable : 5030) +#endif + +#if defined(__GNUC__) && __GNUC__ < 7 +// [[nodiscard]] is not recognized before GCC version 7 +#pragma GCC diagnostic ignored "-Wattributes" +#endif + #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN #include <Windows.h> @@ -13,7 +23,9 @@ #include <vcpkg/base/chrono.h> #include <vcpkg/base/files.h> #include <vcpkg/base/strings.h> -#include <vcpkg/base/system.h> +#include <vcpkg/base/system.debug.h> +#include <vcpkg/base/system.print.h> +#include <vcpkg/base/system.process.h> #include <vcpkg/commands.h> #include <vcpkg/globalstate.h> #include <vcpkg/help.h> @@ -41,7 +53,7 @@ static constexpr int SURVEY_INITIAL_OFFSET_IN_HOURS = SURVEY_INTERVAL_IN_HOURS - void invalid_command(const std::string& cmd) { - System::println(System::Color::error, "invalid command: %s", cmd); + System::print2(System::Color::error, "invalid command: ", cmd, '\n'); Help::print_usage(); Checks::exit_fail(VCPKG_LINE_INFO); } @@ -100,7 +112,7 @@ static void inner(const VcpkgCmdArguments& args) Checks::check_exit(VCPKG_LINE_INFO, !vcpkg_root_dir.empty(), "Error: Could not detect vcpkg-root."); - Debug::println("Using vcpkg-root: %s", vcpkg_root_dir.u8string()); + Debug::print("Using vcpkg-root: ", vcpkg_root_dir.u8string(), '\n'); auto default_vs_path = System::get_environment_variable("VCPKG_VISUAL_STUDIO_PATH").value_or(""); @@ -137,10 +149,10 @@ static void inner(const VcpkgCmdArguments& args) if (distribution(generator) == 1) { Metrics::g_metrics.lock()->track_property("surveyprompt", "true"); - System::println( + System::print2( System::Color::success, "Your feedback is important to improve Vcpkg! Please take 3 minutes to complete our survey " - "by running: vcpkg contact --survey"); + "by running: vcpkg contact --survey\n"); } } } @@ -154,14 +166,14 @@ static void inner(const VcpkgCmdArguments& args) Triplet default_triplet; if (args.triplet != nullptr) { - default_triplet = Triplet::from_canonical_name(*args.triplet); + default_triplet = Triplet::from_canonical_name(std::string(*args.triplet)); } else { - const auto vcpkg_default_triplet_env = System::get_environment_variable("VCPKG_DEFAULT_TRIPLET"); - if (const auto v = vcpkg_default_triplet_env.get()) + auto vcpkg_default_triplet_env = System::get_environment_variable("VCPKG_DEFAULT_TRIPLET"); + if (auto v = vcpkg_default_triplet_env.get()) { - default_triplet = Triplet::from_canonical_name(*v); + default_triplet = Triplet::from_canonical_name(std::move(*v)); } else { @@ -279,6 +291,31 @@ int main(const int argc, const char* const* const argv) const std::string trimmed_command_line = trim_path_from_command_line(Strings::to_utf8(GetCommandLineW())); #endif + Checks::register_global_shutdown_handler([]() { + const auto elapsed_us_inner = GlobalState::timer.lock()->microseconds(); + + bool debugging = GlobalState::debugging; + + auto metrics = Metrics::g_metrics.lock(); + metrics->track_metric("elapsed_us", elapsed_us_inner); + GlobalState::debugging = false; + metrics->flush(); + +#if defined(_WIN32) + if (GlobalState::g_init_console_initialized) + { + SetConsoleCP(GlobalState::g_init_console_cp); + SetConsoleOutputCP(GlobalState::g_init_console_output_cp); + } +#endif + + auto elapsed_us = GlobalState::timer.lock()->microseconds(); + if (debugging) + System::printf("[DEBUG] Exiting after %d us (%d us)\n", + static_cast<int>(elapsed_us), + static_cast<int>(elapsed_us_inner)); + }); + { auto locked_metrics = Metrics::g_metrics.lock(); locked_metrics->track_property("version", Commands::Version::version()); @@ -287,7 +324,7 @@ int main(const int argc, const char* const* const argv) #endif } - Checks::register_console_ctrl_handler(); + System::register_console_ctrl_handler(); load_config(); @@ -330,24 +367,24 @@ int main(const int argc, const char* const* const argv) Metrics::g_metrics.lock()->track_property("error", exc_msg); fflush(stdout); - System::print("vcpkg.exe has crashed.\n" - "Please send an email to:\n" - " %s\n" - "containing a brief summary of what you were trying to do and the following data blob:\n" - "\n" - "Version=%s\n" - "EXCEPTION='%s'\n" - "CMD=\n", - Commands::Contact::email(), - Commands::Version::version(), - exc_msg); + System::printf("vcpkg.exe has crashed.\n" + "Please send an email to:\n" + " %s\n" + "containing a brief summary of what you were trying to do and the following data blob:\n" + "\n" + "Version=%s\n" + "EXCEPTION='%s'\n" + "CMD=\n", + Commands::Contact::email(), + Commands::Version::version(), + exc_msg); fflush(stdout); for (int x = 0; x < argc; ++x) { #if defined(_WIN32) - System::println("%s|", Strings::to_utf8(argv[x])); + System::print2(Strings::to_utf8(argv[x]), "|\n"); #else - System::println("%s|", argv[x]); + System::print2(argv[x], "|\n"); #endif } fflush(stdout); |
