@@ -90,7 +90,7 @@ func (pm *PackageManager) FindBoardsWithVidPid(vid, pid string) []*cores.Board {
9090 res := []* cores.Board {}
9191 for _ , targetPackage := range pm .packages .Packages {
9292 for _ , targetPlatform := range targetPackage .Platforms {
93- if platform := targetPlatform . GetInstalled ( ); platform != nil {
93+ if platform := pm . GetInstalledPlatformRelease ( targetPlatform ); platform != nil {
9494 for _ , board := range platform .Boards {
9595 if board .HasUsbID (vid , pid ) {
9696 res = append (res , board )
@@ -106,7 +106,7 @@ func (pm *PackageManager) FindBoardsWithID(id string) []*cores.Board {
106106 res := []* cores.Board {}
107107 for _ , targetPackage := range pm .packages .Packages {
108108 for _ , targetPlatform := range targetPackage .Platforms {
109- if platform := targetPlatform . GetInstalled ( ); platform != nil {
109+ if platform := pm . GetInstalledPlatformRelease ( targetPlatform ); platform != nil {
110110 for _ , board := range platform .Boards {
111111 if board .BoardID == id {
112112 res = append (res , board )
@@ -159,7 +159,7 @@ func (pm *PackageManager) ResolveFQBN(fqbn *cores.FQBN) (
159159 return targetPackage , nil , nil , nil , nil ,
160160 fmt .Errorf ("unknown platform %s:%s" , targetPackage , fqbn .PlatformArch )
161161 }
162- platformRelease := platform . GetInstalled ( )
162+ platformRelease := pm . GetInstalledPlatformRelease ( platform )
163163 if platformRelease == nil {
164164 return targetPackage , nil , nil , nil , nil ,
165165 fmt .Errorf ("platform %s is not installed" , platformRelease )
@@ -189,7 +189,8 @@ func (pm *PackageManager) ResolveFQBN(fqbn *cores.FQBN) (
189189 return targetPackage , platformRelease , board , buildProperties , nil ,
190190 fmt .Errorf ("missing package %s:%s required for build" , referredPackage , platform )
191191 }
192- buildPlatformRelease = buildPackage .Platforms [fqbn .PlatformArch ].GetInstalled ()
192+ buildPlatform := buildPackage .Platforms [fqbn .PlatformArch ]
193+ buildPlatformRelease = pm .GetInstalledPlatformRelease (buildPlatform )
193194 }
194195
195196 // No errors... phew!
@@ -316,6 +317,29 @@ func (tr *ToolReleaseActions) Get() (*cores.ToolRelease, error) {
316317 return tr .release , nil
317318}
318319
320+ // GetInstalledPlatformRelease returns the PlatformRelease installed (it is choosen)
321+ func (pm * PackageManager ) GetInstalledPlatformRelease (platform * cores.Platform ) * cores.PlatformRelease {
322+ releases := platform .GetAllInstalled ()
323+ if len (releases ) == 0 {
324+ return nil
325+ }
326+ best := releases [0 ]
327+ bestIsManaged := pm .IsManagedPlatformRelease (best )
328+ for _ , candidate := range releases [1 :] {
329+ candidateIsManaged := pm .IsManagedPlatformRelease (candidate )
330+ if bestIsManaged == candidateIsManaged {
331+ if candidate .Version .GreaterThan (best .Version ) {
332+ best = candidate
333+ }
334+ }
335+ if ! bestIsManaged && candidateIsManaged {
336+ best = candidate
337+ bestIsManaged = true
338+ }
339+ }
340+ return best
341+ }
342+
319343func (pm * PackageManager ) GetAllInstalledToolsReleases () []* cores.ToolRelease {
320344 tools := []* cores.ToolRelease {}
321345 for _ , targetPackage := range pm .packages .Packages {
0 commit comments