Skip to content

Commit 7241f25

Browse files
committed
fix: libraries are recompiled if the list of include paths changes
1 parent b717a2a commit 7241f25

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

internal/arduino/builder/builder.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,14 @@ func (b *Builder) preprocess() error {
327327
if err != nil {
328328
return err
329329
}
330+
if b.libsDetector.IncludeFoldersChanged() && b.librariesBuildPath.Exist() {
331+
if b.logger.VerbosityLevel() == logger.VerbosityVerbose {
332+
b.logger.Info(i18n.Tr("The list of included libraries has been changed... rebuilding all libraries."))
333+
}
334+
if err := b.librariesBuildPath.RemoveAll(); err != nil {
335+
return err
336+
}
337+
}
330338
b.Progress.CompleteStep()
331339

332340
b.warnAboutArchIncompatibleLibraries(b.libsDetector.ImportedLibraries())

internal/arduino/builder/internal/detector/detector.go

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"fmt"
2424
"os/exec"
2525
"regexp"
26+
"slices"
2627
"strings"
2728
"time"
2829

@@ -60,6 +61,7 @@ type SketchLibrariesDetector struct {
6061
logger *logger.BuilderLogger
6162
diagnosticStore *diagnostics.Store
6263
preRunner *runner.Runner
64+
detectedChangeInLibraries bool
6365
}
6466

6567
// NewSketchLibrariesDetector todo
@@ -192,6 +194,12 @@ func (l *SketchLibrariesDetector) IncludeFolders() paths.PathList {
192194
return l.includeFolders
193195
}
194196

197+
// IncludeFoldersChanged returns true if the include folders list changed
198+
// from the previous compile.
199+
func (l *SketchLibrariesDetector) IncludeFoldersChanged() bool {
200+
return l.detectedChangeInLibraries
201+
}
202+
195203
// addIncludeFolder add the given folder to the include path.
196204
func (l *SketchLibrariesDetector) addIncludeFolder(folder *paths.Path) {
197205
l.includeFolders = append(l.includeFolders, folder)
@@ -237,17 +245,21 @@ func (l *SketchLibrariesDetector) findIncludes(
237245
platformArch string,
238246
jobs int,
239247
) error {
240-
librariesResolutionCache := buildPath.Join("libraries.cache")
241-
if l.useCachedLibrariesResolution && librariesResolutionCache.Exist() {
242-
d, err := librariesResolutionCache.ReadFile()
248+
librariesResolutionCachePath := buildPath.Join("libraries.cache")
249+
var cachedIncludeFolders paths.PathList
250+
if librariesResolutionCachePath.Exist() {
251+
d, err := librariesResolutionCachePath.ReadFile()
243252
if err != nil {
244253
return err
245254
}
246-
if err := json.Unmarshal(d, &l.includeFolders); err != nil {
255+
if err := json.Unmarshal(d, &cachedIncludeFolders); err != nil {
247256
return err
248257
}
258+
}
259+
if l.useCachedLibrariesResolution && librariesResolutionCachePath.Exist() {
260+
l.includeFolders = cachedIncludeFolders
249261
if l.logger.VerbosityLevel() == logger.VerbosityVerbose {
250-
l.logger.Info("Using cached library discovery: " + librariesResolutionCache.String())
262+
l.logger.Info("Using cached library discovery: " + librariesResolutionCachePath.String())
251263
}
252264
return nil
253265
}
@@ -329,10 +341,12 @@ func (l *SketchLibrariesDetector) findIncludes(
329341

330342
if d, err := json.Marshal(l.includeFolders); err != nil {
331343
return err
332-
} else if err := librariesResolutionCache.WriteFile(d); err != nil {
344+
} else if err := librariesResolutionCachePath.WriteFile(d); err != nil {
333345
return err
334346
}
335-
347+
l.detectedChangeInLibraries = !slices.Equal(
348+
cachedIncludeFolders.AsStrings(),
349+
l.includeFolders.AsStrings())
336350
return nil
337351
}
338352

0 commit comments

Comments
 (0)