aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg.cpp')
-rw-r--r--toolsrc/src/vcpkg.cpp83
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);