This is an automated email from the ASF dual-hosted git repository.

fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit 4ff993eb671fdfb3d57841d7c2937582bacb1bac
Author: Martin Zink <[email protected]>
AuthorDate: Thu Jul 4 15:48:21 2024 +0200

    MINIFICPP-2374 Add python bootstrap support for fedora, debian and openSUSE
    
    Signed-off-by: Ferenc Gerlits <[email protected]>
    This closes #1841
---
 bootstrap/package_manager.py | 47 ++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 43 insertions(+), 4 deletions(-)

diff --git a/bootstrap/package_manager.py b/bootstrap/package_manager.py
index 96cb3a909..38ffe3637 100644
--- a/bootstrap/package_manager.py
+++ b/bootstrap/package_manager.py
@@ -139,12 +139,17 @@ class AptPackageManager(PackageManager):
 
 
 class DnfPackageManager(PackageManager):
-    def __init__(self, no_confirm):
+    def __init__(self, no_confirm, needs_epel):
         PackageManager.__init__(self, no_confirm)
+        self.needs_epel = needs_epel
 
     def install(self, dependencies: Dict[str, Set[str]]) -> bool:
+        if self.needs_epel:
+            install_cmd = "sudo dnf --enablerepo=crb install -y 
https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm";
+        else:
+            install_cmd = "sudo dnf install -y"
         return self._install(dependencies=dependencies,
-                             install_cmd="sudo dnf --enablerepo=crb install -y 
epel-release",
+                             install_cmd=install_cmd,
                              replace_dict={"gpsd": {"gpsd-devel"},
                                            "python": {"python3-devel"}})
 
@@ -177,6 +182,36 @@ class PacmanPackageManager(PackageManager):
         return ""
 
 
+class ZypperPackageManager(PackageManager):
+    def __init__(self, no_confirm):
+        PackageManager.__init__(self, no_confirm)
+
+    def install(self, dependencies: Dict[str, Set[str]]) -> bool:
+        return self._install(dependencies=dependencies,
+                             install_cmd="sudo zypper install -y",
+                             replace_dict={"libarchive": {"libarchive-devel"},
+                                           "python": {"python3-devel"}})
+
+    def _get_installed_packages(self) -> Set[str]:
+        result = subprocess.run(['zypper', 'se', '--installed-only'], 
text=True, capture_output=True, check=True)
+        lines = result.stdout.splitlines()
+        packages = set()
+        for line in lines:
+            if line.startswith('S |') or line.startswith('--') or 
line.startswith(' ') or not line:
+                continue
+
+            parts = line.split('|')
+            if len(parts) > 2:
+                package_name = parts[1].strip()
+                packages.add(package_name)
+
+        return packages
+
+    def install_compiler(self) -> str:
+        self.install({"compiler": {"gcc-c++"}})
+        return ""
+
+
 def _get_vs_dev_cmd_path(vs_where_location: VsWhereLocation):
     if vs_where_location == VsWhereLocation.CHOCO:
         vs_where_path = "vswhere"
@@ -293,12 +328,16 @@ def get_package_manager(no_confirm: bool) -> 
PackageManager:
         return BrewPackageManager(no_confirm)
     elif platform_system == "Linux":
         distro_id = distro.id()
-        if distro_id == "ubuntu":
+        if distro_id == "ubuntu" or "debian" in distro_id:
             return AptPackageManager(no_confirm)
         elif "arch" in distro_id or "manjaro" in distro_id:
             return PacmanPackageManager(no_confirm)
         elif "rocky" in distro_id:
-            return DnfPackageManager(no_confirm)
+            return DnfPackageManager(no_confirm, True)
+        elif "fedora" in distro_id:
+            return DnfPackageManager(no_confirm, False)
+        elif "opensuse" in distro_id:
+            return ZypperPackageManager(no_confirm)
         else:
             sys.exit(f"Unsupported platform {distro_id} exiting")
     elif platform_system == "Windows":

Reply via email to