Improved dependency resolution to account for provided packages

This commit is contained in:
EnumDev 2024-08-27 15:29:42 +03:00
parent 7d2caa542c
commit 743918702a

View File

@ -1242,13 +1242,13 @@ func GetSourceScript(filename string) (string, error) {
func CheckDependencies(pkgInfo *PackageInfo, checkMake, checkConditional bool, rootDir string) []string { func CheckDependencies(pkgInfo *PackageInfo, checkMake, checkConditional bool, rootDir string) []string {
var ret []string var ret []string
for _, dependency := range pkgInfo.Depends { for _, dependency := range pkgInfo.Depends {
if !IsPackageInstalled(dependency, rootDir) { if !IsPackageProvided(dependency, rootDir) {
ret = append(ret, dependency) ret = append(ret, dependency)
} }
} }
if checkMake { if checkMake {
for _, dependency := range pkgInfo.MakeDepends { for _, dependency := range pkgInfo.MakeDepends {
if !IsPackageInstalled(dependency, rootDir) { if !IsPackageProvided(dependency, rootDir) {
ret = append(ret, dependency) ret = append(ret, dependency)
} }
} }
@ -1259,7 +1259,7 @@ func CheckDependencies(pkgInfo *PackageInfo, checkMake, checkConditional bool, r
continue continue
} }
for _, dependency := range dependencies { for _, dependency := range dependencies {
if !IsPackageInstalled(dependency, rootDir) { if !IsPackageProvided(dependency, rootDir) {
ret = append(ret, dependency) ret = append(ret, dependency)
} }
} }
@ -1311,6 +1311,22 @@ func IsPackageInstalled(pkg, rootDir string) bool {
return true return true
} }
func IsPackageProvided(pkg, rootDir string) bool {
pkgs, err := GetInstalledPackages(rootDir)
if err != nil {
return false
}
for _, p := range pkgs {
if p == pkg {
return true
}
if slices.Contains(GetPackageInfo(p, rootDir, true).Provides, pkg) {
return true
}
}
return false
}
func GetInstalledPackages(rootDir string) ([]string, error) { func GetInstalledPackages(rootDir string) ([]string, error) {
installedDir := path.Join(rootDir, "var/lib/bpm/installed/") installedDir := path.Join(rootDir, "var/lib/bpm/installed/")
items, err := os.ReadDir(installedDir) items, err := os.ReadDir(installedDir)