From ba0d288e454294581275db7622b34fad28571151 Mon Sep 17 00:00:00 2001 From: EnumDev Date: Wed, 28 Jan 2026 18:50:25 +0200 Subject: [PATCH] Add check dependencies --- src/bpm/main.go | 2 +- src/bpmlib/databases.go | 1 + src/bpmlib/dependencies.go | 34 +++++++++++++++++++++++----------- src/bpmlib/operations.go | 4 ++-- src/bpmlib/packages.go | 13 +++++++++---- 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/bpm/main.go b/src/bpm/main.go index 6bbd0fa..c38fba4 100644 --- a/src/bpm/main.go +++ b/src/bpm/main.go @@ -1183,7 +1183,7 @@ func compilePackage() { // Get direct common and make dependencies totalDepends := make([]string, 0) - for _, depend := range bpmpkg.PkgInfo.GetDependencies(true, false, false) { + for _, depend := range bpmpkg.PkgInfo.GetDependencies(true, !skipChecks, false, false) { if !slices.Contains(totalDepends, depend.PkgName) { totalDepends = append(totalDepends, depend.PkgName) } diff --git a/src/bpmlib/databases.go b/src/bpmlib/databases.go index 2444833..a6b97eb 100644 --- a/src/bpmlib/databases.go +++ b/src/bpmlib/databases.go @@ -365,6 +365,7 @@ func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableS builderWriteArray("Dependencies", entry.Info.Depends, true) if entry.Info.Type == "source" { builderWriteArray("Make dependencies", entry.Info.MakeDepends, true) + builderWriteArray("Check dependencies", entry.Info.CheckDepends, true) } builderWriteArray("Runtime dependencies", entry.Info.RuntimeDepends, true) if len(entry.Info.OptionalDepends) > 0 { diff --git a/src/bpmlib/dependencies.go b/src/bpmlib/dependencies.go index 728fca7..c57f3fe 100644 --- a/src/bpmlib/dependencies.go +++ b/src/bpmlib/dependencies.go @@ -11,7 +11,7 @@ type pkgInstallationReason struct { InstallationReason InstallationReason } -func (pkgInfo *PackageInfo) GetDependencies(includeMakeDepends, includeRuntimeDepends, includeOptionalDepends bool) []pkgInstallationReason { +func (pkgInfo *PackageInfo) GetDependencies(includeMakeDepends, includeCheckDepends, includeRuntimeDepends, includeOptionalDepends bool) []pkgInstallationReason { allDepends := make([]pkgInstallationReason, 0) for _, depend := range pkgInfo.Depends { @@ -61,6 +61,18 @@ func (pkgInfo *PackageInfo) GetDependencies(includeMakeDepends, includeRuntimeDe } } } + if includeCheckDepends { + for _, depend := range pkgInfo.CheckDepends { + if !slices.ContainsFunc(allDepends, func(p pkgInstallationReason) bool { + return p.PkgName == depend + }) { + allDepends = append(allDepends, pkgInstallationReason{ + PkgName: depend, + InstallationReason: InstallationReasonMakeDependency, + }) + } + } + } // Skip ignored packages allDepends = slices.DeleteFunc(allDepends, func(depend pkgInstallationReason) bool { @@ -70,23 +82,23 @@ func (pkgInfo *PackageInfo) GetDependencies(includeMakeDepends, includeRuntimeDe return allDepends } -func (pkgInfo *PackageInfo) GetDependenciesRecursive(includeRuntimeDepends, includeMakeDepends bool, rootDir string) (resolved []string) { +func (pkgInfo *PackageInfo) GetDependenciesRecursive(includeRuntimeDepends, includeCheckDepends, includeMakeDepends bool, rootDir string) (resolved []string) { // Initialize slices resolved = make([]string, 0) unresolved := make([]string, 0) // Call unexported function - pkgInfo.getDependenciesRecursive(&resolved, &unresolved, includeRuntimeDepends, includeMakeDepends, rootDir) + pkgInfo.getDependenciesRecursive(&resolved, &unresolved, includeRuntimeDepends, includeMakeDepends, includeCheckDepends, rootDir) return resolved } -func (pkgInfo *PackageInfo) getDependenciesRecursive(resolved *[]string, unresolved *[]string, includeRuntimeDepends, includeMakeDepends bool, rootDir string) { +func (pkgInfo *PackageInfo) getDependenciesRecursive(resolved *[]string, unresolved *[]string, includeRuntimeDepends, includeMakeDepends, includeCheckDepends bool, rootDir string) { // Add current package name to unresolved slice *unresolved = append(*unresolved, pkgInfo.Name) // Loop through all dependencies - for _, pkgIR := range pkgInfo.GetDependencies(includeMakeDepends, includeRuntimeDepends, false) { + for _, pkgIR := range pkgInfo.GetDependencies(includeMakeDepends, includeCheckDepends, includeRuntimeDepends, false) { depend := pkgIR.PkgName if isVirtual, p := IsVirtualPackage(depend, rootDir); isVirtual { @@ -105,7 +117,7 @@ func (pkgInfo *PackageInfo) getDependenciesRecursive(resolved *[]string, unresol dependInfo := GetPackageInfo(depend, rootDir) if dependInfo != nil { - dependInfo.getDependenciesRecursive(resolved, unresolved, includeRuntimeDepends, includeMakeDepends, rootDir) + dependInfo.getDependenciesRecursive(resolved, unresolved, includeRuntimeDepends, includeMakeDepends, includeCheckDepends, rootDir) } } } @@ -115,7 +127,7 @@ func (pkgInfo *PackageInfo) getDependenciesRecursive(resolved *[]string, unresol *unresolved = stringSliceRemove(*unresolved, pkgInfo.Name) } -func ResolveAllPackageDependenciesFromDatabases(pkgInfo *PackageInfo, resolvedVirtualPkgs map[string]string, checkMake, checkRuntime, checkOptional, ignoreInstalled, verbose bool, rootDir string) (resolved []pkgInstallationReason, unresolved []string) { +func ResolveAllPackageDependenciesFromDatabases(pkgInfo *PackageInfo, resolvedVirtualPkgs map[string]string, checkMake, checkCheck, checkRuntime, checkOptional, ignoreInstalled, verbose bool, rootDir string) (resolved []pkgInstallationReason, unresolved []string) { // Initialize slices and maps resolved = make([]pkgInstallationReason, 0) unresolved = make([]string, 0) @@ -124,7 +136,7 @@ func ResolveAllPackageDependenciesFromDatabases(pkgInfo *PackageInfo, resolvedVi } // Call unexported function - resolvePackageDependenciesFromDatabase(&resolved, &unresolved, resolvedVirtualPkgs, pkgInfo, checkMake, checkRuntime, checkOptional, ignoreInstalled, verbose, rootDir) + resolvePackageDependenciesFromDatabase(&resolved, &unresolved, resolvedVirtualPkgs, pkgInfo, checkMake, checkCheck, checkRuntime, checkOptional, ignoreInstalled, verbose, rootDir) // Remove main package from unresolved slice unresolved = stringSliceRemove(unresolved, pkgInfo.Name) @@ -132,7 +144,7 @@ func ResolveAllPackageDependenciesFromDatabases(pkgInfo *PackageInfo, resolvedVi return resolved, unresolved } -func resolvePackageDependenciesFromDatabase(resolved *[]pkgInstallationReason, unresolved *[]string, resolvedVirtualPkgs map[string]string, pkgInfo *PackageInfo, checkMake, checkRuntime, checkOptional, ignoreInstalled, verbose bool, rootDir string) { +func resolvePackageDependenciesFromDatabase(resolved *[]pkgInstallationReason, unresolved *[]string, resolvedVirtualPkgs map[string]string, pkgInfo *PackageInfo, checkMake, checkCheck, checkRuntime, checkOptional, ignoreInstalled, verbose bool, rootDir string) { // Add current package name to unresolved slice *unresolved = append(*unresolved, pkgInfo.Name) @@ -143,7 +155,7 @@ func resolvePackageDependenciesFromDatabase(resolved *[]pkgInstallationReason, u } // Loop through all dependencies - for _, pkgIR := range pkgInfo.GetDependencies(pkgInfo.Type == "source", checkRuntime, checkOptional) { + for _, pkgIR := range pkgInfo.GetDependencies(pkgInfo.Type == "source", pkgInfo.Type == "source" && checkCheck, checkRuntime, checkOptional) { // Skip dependency if it has already been resolved if slices.ContainsFunc(*resolved, func(p pkgInstallationReason) bool { return p.PkgName == pkgIR.PkgName @@ -201,7 +213,7 @@ func resolvePackageDependenciesFromDatabase(resolved *[]pkgInstallationReason, u } // Resolve the dependencies of this dependency - resolvePackageDependenciesFromDatabase(resolved, unresolved, resolvedVirtualPkgs, entry.Info, checkMake, checkRuntime, false, ignoreInstalled, verbose, rootDir) + resolvePackageDependenciesFromDatabase(resolved, unresolved, resolvedVirtualPkgs, entry.Info, checkMake, checkCheck, checkRuntime, false, ignoreInstalled, verbose, rootDir) // Move dependency from the unresolved slice to the resolved slice if !slices.ContainsFunc(*resolved, func(p pkgInstallationReason) bool { diff --git a/src/bpmlib/operations.go b/src/bpmlib/operations.go index 6e68ff6..a2d04a9 100644 --- a/src/bpmlib/operations.go +++ b/src/bpmlib/operations.go @@ -147,7 +147,7 @@ func (operation *BPMOperation) ResolveDependencies(reinstallDependencies, instal continue } - resolved, unresolved := ResolveAllPackageDependenciesFromDatabases(pkgInfo, resolvedVirtualPkgs, pkgInfo.Type == "source", installRuntimeDependencies, installOptionalDependencies, !reinstallDependencies, verbose, operation.RootDir) + resolved, unresolved := ResolveAllPackageDependenciesFromDatabases(pkgInfo, resolvedVirtualPkgs, pkgInfo.Type == "source", pkgInfo.Type == "source" && operation.RunChecks, installRuntimeDependencies, installOptionalDependencies, !reinstallDependencies, verbose, operation.RootDir) operation.UnresolvedDepends = append(operation.UnresolvedDepends, unresolved...) @@ -233,7 +233,7 @@ func (operation *BPMOperation) Cleanup(cleanupMakeDepends bool) error { } keepPackages = append(keepPackages, pkg.Name) - resolved := pkg.GetDependenciesRecursive(true, !cleanupMakeDepends, operation.RootDir) + resolved := pkg.GetDependenciesRecursive(true, !cleanupMakeDepends, !cleanupMakeDepends, operation.RootDir) for _, value := range resolved { if !slices.Contains(keepPackages, value) && !slices.Contains(MainBPMConfig.IgnorePackages, value) { keepPackages = append(keepPackages, value) diff --git a/src/bpmlib/packages.go b/src/bpmlib/packages.go index 2d9ae7e..5d0e5a4 100644 --- a/src/bpmlib/packages.go +++ b/src/bpmlib/packages.go @@ -41,6 +41,7 @@ type PackageInfo struct { RuntimeDepends []string `yaml:"runtime_depends,omitempty"` OptionalDepends []string `yaml:"optional_depends,omitempty"` MakeDepends []string `yaml:"make_depends,omitempty"` + CheckDepends []string `yaml:"check_depends,omitempty"` Conflicts []string `yaml:"conflicts,omitempty"` Replaces []string `yaml:"replaces,omitempty"` Provides []string `yaml:"provides,omitempty"` @@ -133,14 +134,17 @@ func GetInstallationReason(pkg, rootDir string) InstallationReason { return InstallationReasonUnknown } reason := strings.TrimSpace(string(b)) - if reason == "manual" { + + switch reason { + case "manual": return InstallationReasonManual - } else if reason == "dependency" { + case "dependency": return InstallationReasonDependency - } else if reason == "make_dependency" { + case "make_dependency": return InstallationReasonMakeDependency + default: + return InstallationReasonUnknown } - return InstallationReasonUnknown } func SetInstallationReason(pkg string, reason InstallationReason, rootDir string) error { @@ -579,6 +583,7 @@ func (pkgInfo *PackageInfo) CreateReadableInfo(rootDir string) string { builderWriteArray("Dependencies", pkgInfo.Depends, true) if pkgInfo.Type == "source" { builderWriteArray("Make dependencies", pkgInfo.MakeDepends, true) + builderWriteArray("Check dependencies", pkgInfo.CheckDepends, true) } builderWriteArray("Runtime dependencies", pkgInfo.RuntimeDepends, true) if len(pkgInfo.OptionalDepends) > 0 {