@@ -26,20 +26,22 @@ import (
26
26
"github.com/arduino/arduino-cli/commands/cmderrors"
27
27
f "github.com/arduino/arduino-cli/internal/algorithms"
28
28
"github.com/arduino/arduino-cli/internal/arduino/globals"
29
+ "github.com/arduino/arduino-cli/internal/arduino/libraries"
29
30
"github.com/arduino/arduino-cli/internal/i18n"
30
31
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
31
32
"github.com/arduino/go-paths-helper"
32
33
)
33
34
34
35
// Sketch holds all the files composing a sketch
35
36
type Sketch struct {
36
- Name string
37
- MainFile * paths.Path
38
- FullPath * paths.Path // FullPath is the path to the Sketch folder
39
- OtherSketchFiles paths.PathList // Sketch files that end in .ino other than main file
40
- AdditionalFiles paths.PathList
41
- RootFolderFiles paths.PathList // All files that are in the Sketch root
42
- Project * Project
37
+ Name string
38
+ MainFile * paths.Path
39
+ FullPath * paths.Path // FullPath is the path to the Sketch folder
40
+ OtherSketchFiles paths.PathList // Sketch files that end in .ino other than main file
41
+ AdditionalFiles paths.PathList
42
+ RootFolderFiles paths.PathList // All files that are in the Sketch root
43
+ vendoredLibraries []* libraries.Library // All libraries in the 'libraries' directory in the sketch
44
+ Project * Project
43
45
}
44
46
45
47
var tr = i18n .Tr
@@ -148,9 +150,41 @@ func New(path *paths.Path) (*Sketch, error) {
148
150
sort .Sort (& sketch .OtherSketchFiles )
149
151
sort .Sort (& sketch .RootFolderFiles )
150
152
153
+ // Collect vedndored libraries
154
+ if librariesPath , ok := sketch .GetVendoredLibrariesDir (); ok {
155
+ libDirs , err := librariesPath .ReadDir ()
156
+ if err != nil {
157
+ return nil , fmt .Errorf ("%s: %w" , tr ("reading sketch libraries" ), err )
158
+ }
159
+ libDirs .FilterDirs ()
160
+ for _ , libDir := range libDirs {
161
+ lib , err := libraries .Load (libDir , libraries .Unmanaged )
162
+ if err != nil {
163
+ return nil , fmt .Errorf ("%s: %w" , tr ("reading sketch libraries" ), err )
164
+ }
165
+ sketch .vendoredLibraries = append (sketch .vendoredLibraries , lib )
166
+ }
167
+ }
168
+
151
169
return sketch , nil
152
170
}
153
171
172
+ // GetVendoredLibrariesDir returns the 'libraries' directory path.
173
+ // The result is in the res,ok format ok is true if the 'libraries' directory
174
+ // is present in the sketch, false otherwise.
175
+ func (s * Sketch ) GetVendoredLibrariesDir () (res * paths.Path , ok bool ) {
176
+ libsDir := s .FullPath .Join ("libraries" )
177
+ if libsDir .IsDir () {
178
+ return libsDir , true
179
+ }
180
+ return nil , false
181
+ }
182
+
183
+ // VendoredLibraries returns the libraries bundled in the sketch' 'libraries' directory.
184
+ func (s * Sketch ) VendoredLibraries () []* libraries.Library {
185
+ return s .vendoredLibraries
186
+ }
187
+
154
188
// supportedFiles reads all files recursively contained in Sketch and
155
189
// filter out unneded or unsupported ones and returns them
156
190
func (s * Sketch ) supportedFiles () (paths.PathList , error ) {
0 commit comments