// Resolves all of a build package's dependencies and API requirements. func (bpkg *BuildPackage) resolveDeps( cfg syscfg.Cfg, apiMap map[string]*BuildPackage) error { features := cfg.FeaturesForLpkg(bpkg.LocalPackage) // Match each required API with the package which implements it. reqApis := newtutil.GetStringSliceFeatures(bpkg.PkgV, features, "pkg.req_apis") for _, reqApi := range reqApis { if err := bpkg.satisfyReqApi(reqApi, apiMap[reqApi]); err != nil { return err } } proj := project.GetProject() newDeps := newtutil.GetStringSliceFeatures(bpkg.PkgV, features, "pkg.deps") for _, newDepStr := range newDeps { newDep, err := pkg.NewDependency(bpkg.Repo(), newDepStr) if err != nil { return err } _, ok := proj.ResolveDependency(newDep).(*pkg.LocalPackage) if !ok { return util.NewNewtError("Could not resolve package dependency " + newDep.String()) } if !bpkg.HasDep(newDep) { bpkg.AddDep(newDep) } } return nil }