@@ -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
// New creates an Sketch instance by reading all the files composing a sketch and grouping them
@@ -142,9 +144,41 @@ func New(path *paths.Path) (*Sketch, error) {
142
144
sort .Sort (& sketch .OtherSketchFiles )
143
145
sort .Sort (& sketch .RootFolderFiles )
144
146
147
+ // Collect vedndored libraries
148
+ if librariesPath , ok := sketch .GetVendoredLibrariesDir (); ok {
149
+ libDirs , err := librariesPath .ReadDir ()
150
+ if err != nil {
151
+ return nil , fmt .Errorf ("%s: %w" , tr ("reading sketch libraries" ), err )
152
+ }
153
+ libDirs .FilterDirs ()
154
+ for _ , libDir := range libDirs {
155
+ lib , err := libraries .Load (libDir , libraries .Unmanaged )
156
+ if err != nil {
157
+ return nil , fmt .Errorf ("%s: %w" , tr ("reading sketch libraries" ), err )
158
+ }
159
+ sketch .vendoredLibraries = append (sketch .vendoredLibraries , lib )
160
+ }
161
+ }
162
+
145
163
return sketch , nil
146
164
}
147
165
166
+ // GetVendoredLibrariesDir returns the 'libraries' directory path.
167
+ // The result is in the res,ok format ok is true if the 'libraries' directory
168
+ // is present in the sketch, false otherwise.
169
+ func (s * Sketch ) GetVendoredLibrariesDir () (res * paths.Path , ok bool ) {
170
+ libsDir := s .FullPath .Join ("libraries" )
171
+ if libsDir .IsDir () {
172
+ return libsDir , true
173
+ }
174
+ return nil , false
175
+ }
176
+
177
+ // VendoredLibraries returns the libraries bundled in the sketch' 'libraries' directory.
178
+ func (s * Sketch ) VendoredLibraries () []* libraries.Library {
179
+ return s .vendoredLibraries
180
+ }
181
+
148
182
// supportedFiles reads all files recursively contained in Sketch and
149
183
// filter out unneded or unsupported ones and returns them
150
184
func (s * Sketch ) supportedFiles () (paths.PathList , error ) {
0 commit comments