Skip to content

Commit d89c8c7

Browse files
committed
Fixed libraries-set selection for discovery
Fix arduino#1740
1 parent f0245bc commit d89c8c7

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

arduino/libraries/librariesresolver/cpp.go

+44
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"path/filepath"
2121
"strings"
2222

23+
"github.com/arduino/arduino-cli/arduino/cores"
2324
"github.com/arduino/arduino-cli/arduino/libraries"
2425
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
2526
"github.com/arduino/arduino-cli/arduino/utils"
@@ -53,6 +54,49 @@ func (resolver *Cpp) ScanFromLibrariesManager(lm *librariesmanager.LibrariesMana
5354
return nil
5455
}
5556

57+
// ScanIDEBuiltinLibraries reads ide-builtin librariers loaded in the LibrariesManager to find
58+
// and cache all C++ headers for later retrieval.
59+
func (resolver *Cpp) ScanIDEBuiltinLibraries(lm *librariesmanager.LibrariesManager) error {
60+
for _, libAlternatives := range lm.Libraries {
61+
for _, lib := range libAlternatives.Alternatives {
62+
if lib.Location == libraries.IDEBuiltIn {
63+
resolver.ScanLibrary(lib)
64+
}
65+
}
66+
}
67+
return nil
68+
}
69+
70+
// ScanUserAndUnmanagedLibraries reads user/unmanaged librariers loaded in the LibrariesManager to find
71+
// and cache all C++ headers for later retrieval.
72+
func (resolver *Cpp) ScanUserAndUnmanagedLibraries(lm *librariesmanager.LibrariesManager) error {
73+
for _, libAlternatives := range lm.Libraries {
74+
for _, lib := range libAlternatives.Alternatives {
75+
if lib.Location == libraries.User || lib.Location == libraries.Unmanaged {
76+
resolver.ScanLibrary(lib)
77+
}
78+
}
79+
}
80+
return nil
81+
}
82+
83+
// ScanPlatformLibraries reads platform-bundled libraries for a specific platform loaded in the LibrariesManager
84+
// to find and cache all C++ headers for later retrieval.
85+
func (resolver *Cpp) ScanPlatformLibraries(lm *librariesmanager.LibrariesManager, platform *cores.PlatformRelease) error {
86+
for _, libAlternatives := range lm.Libraries {
87+
for _, lib := range libAlternatives.Alternatives {
88+
if lib.Location != libraries.PlatformBuiltIn && lib.Location != libraries.ReferencedPlatformBuiltIn {
89+
continue
90+
}
91+
if lib.ContainerPlatform != platform {
92+
continue
93+
}
94+
resolver.ScanLibrary(lib)
95+
}
96+
}
97+
return nil
98+
}
99+
56100
// ScanLibrary reads a library to find and cache C++ headers for later retrieval
57101
func (resolver *Cpp) ScanLibrary(lib *libraries.Library) error {
58102
cppHeaders, err := lib.SourceHeaders()

legacy/builder/libraries_loader.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,20 @@ func (s *LibrariesLoader) Run(ctx *types.Context) error {
7272
}
7373

7474
resolver := librariesresolver.NewCppResolver()
75-
if err := resolver.ScanFromLibrariesManager(ctx.LibrariesManager); err != nil {
75+
if err := resolver.ScanIDEBuiltinLibraries(ctx.LibrariesManager); err != nil {
7676
return errors.WithStack(err)
7777
}
78+
if err := resolver.ScanUserAndUnmanagedLibraries(ctx.LibrariesManager); err != nil {
79+
return errors.WithStack(err)
80+
}
81+
if err := resolver.ScanPlatformLibraries(ctx.LibrariesManager, ctx.TargetPlatform); err != nil {
82+
return errors.WithStack(err)
83+
}
84+
if ctx.ActualPlatform != ctx.TargetPlatform {
85+
if err := resolver.ScanPlatformLibraries(ctx.LibrariesManager, ctx.ActualPlatform); err != nil {
86+
return errors.WithStack(err)
87+
}
88+
}
7889
ctx.LibrariesResolver = resolver
7990

8091
return nil

0 commit comments

Comments
 (0)