hostosinfo.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // Copyright (C) 2016 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
  3. #include "hostosinfo.h"
  4. // #include "filepath.h"
  5. #include <QDir>
  6. #if !defined(QT_NO_OPENGL) && defined(QT_GUI_LIB)
  7. #include <QOpenGLContext>
  8. #endif
  9. #ifdef Q_OS_LINUX
  10. #include <sys/sysinfo.h>
  11. #endif
  12. #ifdef Q_OS_WIN
  13. #include <qt_windows.h>
  14. #endif
  15. #ifdef Q_OS_MACOS
  16. #include <sys/sysctl.h>
  17. #endif
  18. namespace Utils {
  19. Qt::CaseSensitivity HostOsInfo::m_overrideFileNameCaseSensitivity = Qt::CaseSensitive;
  20. bool HostOsInfo::m_useOverrideFileNameCaseSensitivity = false;
  21. OsArch HostOsInfo::hostArchitecture()
  22. {
  23. static const OsArch arch
  24. = osArchFromString(QSysInfo::currentCpuArchitecture()).value_or(OsArchUnknown);
  25. return arch;
  26. }
  27. void HostOsInfo::setOverrideFileNameCaseSensitivity(Qt::CaseSensitivity sensitivity)
  28. {
  29. m_useOverrideFileNameCaseSensitivity = true;
  30. m_overrideFileNameCaseSensitivity = sensitivity;
  31. }
  32. void HostOsInfo::unsetOverrideFileNameCaseSensitivity()
  33. {
  34. m_useOverrideFileNameCaseSensitivity = false;
  35. }
  36. bool HostOsInfo::canCreateOpenGLContext(QString *errorMessage)
  37. {
  38. #if defined(QT_NO_OPENGL) || !defined(QT_GUI_LIB)
  39. Q_UNUSED(errorMessage)
  40. return false;
  41. #else
  42. static const bool canCreate = QOpenGLContext().create();
  43. if (!canCreate)
  44. *errorMessage = "Cannot create OpenGL context.";
  45. return canCreate;
  46. #endif
  47. }
  48. std::optional<quint64> HostOsInfo::totalMemoryInstalledInBytes()
  49. {
  50. #ifdef Q_OS_LINUX
  51. struct sysinfo info;
  52. if (sysinfo(&info) == -1)
  53. return {};
  54. return info.totalram;
  55. #elif defined(Q_OS_WIN)
  56. MEMORYSTATUSEX statex;
  57. statex.dwLength = sizeof statex;
  58. if (!GlobalMemoryStatusEx(&statex))
  59. return {};
  60. return statex.ullTotalPhys;
  61. #elif defined(Q_OS_MACOS)
  62. int mib[] = {CTL_HW, HW_MEMSIZE};
  63. int64_t ram;
  64. size_t length = sizeof(int64_t);
  65. if (sysctl(mib, 2, &ram, &length, nullptr, 0) == -1)
  66. return {};
  67. return ram;
  68. #endif
  69. return {};
  70. }
  71. // const FilePath &HostOsInfo::root()
  72. // {
  73. // static const FilePath rootDir = FilePath::fromUserInput(QDir::rootPath());
  74. // return rootDir;
  75. // }
  76. } // namespace Utils