diff options
author | Vaxry <[email protected]> | 2024-04-16 16:58:57 +0100 |
---|---|---|
committer | Vaxry <[email protected]> | 2024-04-16 16:59:06 +0100 |
commit | eeca50e3dcf472d92431f0f06151a76c453c865e (patch) | |
tree | 919f22a92bf5cfedfef7d82b60f09b83f9ddf30e | |
parent | 9a66514e26319e41c8661f57097a73b1c8579ccf (diff) | |
download | Hyprland-eeca50e3dcf472d92431f0f06151a76c453c865e.tar.gz Hyprland-eeca50e3dcf472d92431f0f06151a76c453c865e.zip |
hyprpm: err out on missing runtime deps
-rw-r--r-- | hyprpm/src/core/PluginManager.cpp | 20 | ||||
-rw-r--r-- | hyprpm/src/core/PluginManager.hpp | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 459ee415..6ac5445e 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -95,6 +95,11 @@ SHyprlandVersion CPluginManager::getHyprlandVersion() { bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& rev) { const auto HLVER = getHyprlandVersion(); + if (!hasDeps()) { + std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not clone the plugin repository. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio\n"; + return false; + } + if (DataState::pluginRepoExists(url)) { std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not clone the plugin repository. Repository already installed.\n"; return false; @@ -378,6 +383,11 @@ bool CPluginManager::updateHeaders(bool force) { const auto HLVER = getHyprlandVersion(); + if (!hasDeps()) { + std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not update. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio\n"; + return false; + } + if (!std::filesystem::exists("/tmp/hyprpm")) { std::filesystem::create_directory("/tmp/hyprpm"); std::filesystem::permissions("/tmp/hyprpm", std::filesystem::perms::all, std::filesystem::perm_options::replace); @@ -833,3 +843,13 @@ std::string CPluginManager::headerError(const eHeadersErrors err) { return std::string{Colors::RED} + "✖" + Colors::RESET + " Unknown header error. Please run hyprpm update to fix those.\n"; } + +bool CPluginManager::hasDeps() { + std::vector<std::string> deps = {"meson", "cpio", "cmake"}; + for (auto& d : deps) { + if (!execAndGet("which " + d + " 2>&1").contains("/")) + return false; + } + + return true; +} diff --git a/hyprpm/src/core/PluginManager.hpp b/hyprpm/src/core/PluginManager.hpp index d0a592f1..f934d34a 100644 --- a/hyprpm/src/core/PluginManager.hpp +++ b/hyprpm/src/core/PluginManager.hpp @@ -56,6 +56,8 @@ class CPluginManager { void notify(const eNotifyIcons icon, uint32_t color, int durationMs, const std::string& message); + bool hasDeps(); + bool m_bVerbose = false; private: |