From 33b63b35a22469b8b61c62be4479d2e5c1593fea Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik <bubnikv@gmail.com> Date: Thu, 11 Mar 2021 16:15:22 +0100 Subject: [PATCH] Added detection of Microsoft WSL/WSL2 Linux flavors. Added tracing of the platform detection. --- src/slic3r/Utils/Platform.cpp | 23 +++++++++++++++++++++-- src/slic3r/Utils/Platform.hpp | 4 ++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/slic3r/Utils/Platform.cpp b/src/slic3r/Utils/Platform.cpp index 86f4d7965..09ff2c48b 100644 --- a/src/slic3r/Utils/Platform.cpp +++ b/src/slic3r/Utils/Platform.cpp @@ -6,6 +6,8 @@ #include <wx/stdpaths.h> +#include <boost/log/trivial.hpp> + namespace Slic3r { namespace GUI { @@ -15,12 +17,15 @@ static auto s_platform_flavor = PlatformFlavor::Uninitialized; void detect_platform() { #if defined(_WIN32) + BOOST_LOG_TRIVIAL(info) << "Platform: Windows"; s_platform = Platform::Windows; s_platform_flavor = PlatformFlavor::Generic; #elif defined(__APPLE__) + BOOST_LOG_TRIVIAL(info) << "Platform: OSX"; s_platform = Platform::OSX; s_platform_flavor = PlatformFlavor::Generic; #elif defined(__linux__) + BOOST_LOG_TRIVIAL(info) << "Platform: Linux"; s_platform = Platform::Linux; s_platform_flavor = PlatformFlavor::GenericLinux; // Test for Chromium. @@ -29,16 +34,30 @@ void detect_platform() if (f) { char buf[4096]; // Read the 1st line. - if (::fgets(buf, 4096, f) && strstr(buf, "Chromium OS") != nullptr) - s_platform_flavor = PlatformFlavor::LinuxOnChromium; + if (::fgets(buf, 4096, f)) + if (strstr(buf, "Chromium OS") != nullptr) { + s_platform_flavor = PlatformFlavor::LinuxOnChromium; + BOOST_LOG_TRIVIAL(info) << "Platform flavor: LinuxOnChromium"; + } else if (strstr(buf, "microsoft") != nullptr || strstr(buf, "Microsoft") != nullptr) { + if (boost::filesystem::exists("/run/WSL") && getenv("WSL_INTEROP") != nullptr) { + BOOST_LOG_TRIVIAL(info) << "Platform flavor: WSL2"; + s_platform_flavor = PlatformFlavor::WSL2; + } else { + BOOST_LOG_TRIVIAL(info) << "Platform flavor: WSL"; + s_platform_flavor = PlatformFlavor::WSL; + } + } + } ::fclose(f); } } #elif defined(__OpenBSD__) + BOOST_LOG_TRIVIAL(info) << "Platform: OpenBSD"; s_platform = Platform::BSDUnix; s_platform_flavor = PlatformFlavor::OpenBSD; #else // This should not happen. + BOOST_LOG_TRIVIAL(info) << "Platform: Unknown"; static_assert(false, "Unknown platform detected"); s_platform = Platform::Unknown; s_platform_flavor = PlatformFlavor::Unknown; diff --git a/src/slic3r/Utils/Platform.hpp b/src/slic3r/Utils/Platform.hpp index 8298cf3f9..c0ee3541d 100644 --- a/src/slic3r/Utils/Platform.hpp +++ b/src/slic3r/Utils/Platform.hpp @@ -23,6 +23,10 @@ enum class PlatformFlavor // For Platform::Linux GenericLinux, LinuxOnChromium, + // Microsoft's Windows on Linux (Linux kernel simulated on NTFS kernel) + WSL, + // Microsoft's Windows on Linux, version 2 (virtual machine) + WSL2, // For Platform::BSDUnix OpenBSD, };