- packages[ name ].setInstalled( match.group(2) )
-
- # See which ones need to be installed
-- needed = []
-+ consider_installed = pld_config_get("INSTALLED", "").split()
-+ needed = set()
- for row in dependencies:
- if ( len(row) == 0 ):
- continue
--
- satisfied = False
- for dep in row:
- if ( dep.isAvailable() ):
- satisfied = True
- break
- if ( not satisfied ):
-- needed.append( row[0] )
-+ if row[0].name not in consider_installed:
-+ needed.add( row[0] )
-+ else:
-+ print("Considering {0} already installed".format(row[0].name))
-
- # If we have anything to install, do it!
- if ( len(needed) > 0 ):
-@@ -409,8 +520,12 @@
- print( "Package %s is installed with version '%s' but doesn't match requirements: %s" % (package.name, package.installed, package) )
- else:
- print( "Package %s needs to be installed" % package.name )
--
-- return updatePackages( needed )
-+ if pld_config_enabled("INSTALL_PACKAGES", True):
-+ print("Installing packages as configured through {0}...".format(PLD_CONFIG_FN))
-+ return updatePackages( needed )
-+ else:
-+ print("\nWARNING: Dependencies missing, but package install disabled through {0}\n".format(PLD_CONFIG_FN))
-+ return 1
- else:
- return 0
+ packages[package.name] = package
+ row.append(package)
+
+@@ -435,22 +526,28 @@
+ if "COLUMNS" in os.environ:
+ del os.environ["COLUMNS"]
+
+- process = subprocess.Popen(['dpkg', '-l'] + list(packages.keys()),
+- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+- installed_pattern = re.compile(r"^\Si\s+([^\s]+)\s+([^\s]+)")
++ pkg_names = [name.split(":", 1)[0] for name in packages.keys() if not name.startswith("@")]
++ process = subprocess.Popen( ['rpm', '-q'] + pkg_names, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
+ for line in process.stdout:
+ line = line.decode("utf-8").strip()
+- match = re.match(installed_pattern, line)
++ match = PLD_PKGNAME_RE.match(line)
+ if match is None:
+ continue
+
+ name = match.group(1)
+ if name not in packages:
+- name = get_full_package_name(name)
++ if match.group(4):
++ arch = PLD_ARCH_MAP[match.group(4)]
++ name = "{0}:{1}".format(name, arch)
++ else:
++ name = getFullPackageName( name )
++ if name not in packages:
++ continue
+ packages[name].set_installed(match.group(2))
+
+ # See which ones need to be installed
+- needed = []
++ consider_installed = pld_config_get("INSTALLED", "").split()
++ needed = set()
+ for row in dependencies:
+ if len(row) == 0:
+ continue
+@@ -461,7 +558,10 @@
+ satisfied = True
+ break
+ if not satisfied:
+- needed.append(row[0])
++ if row[0].name not in consider_installed:
++ needed.add( row[0] )
++ else:
++ print("Considering {0} already installed".format(row[0].name))
+
+ # If we have anything to install, do it!
+ if len(needed) > 0:
+@@ -475,7 +575,12 @@
+ print("Package %s needs to be installed" % package.name,
+ file=sys.stderr)
+
+- return update_packages(needed)
++ if pld_config_enabled("INSTALL_PACKAGES", True):
++ print("Installing packages as configured through {0}...".format(PLD_CONFIG_FN))
++ return updatePackages( needed )
++ else:
++ print("\nWARNING: Dependencies missing, but package install disabled through {0}\n".format(PLD_CONFIG_FN))
++ return 1
+ else:
+ return 0