@@ -22,6 +22,7 @@ import (
22
22
"io"
23
23
"os"
24
24
"path/filepath"
25
+ "sort"
25
26
"strings"
26
27
27
28
"github.com/arduino/arduino-cli/internal/arduino/builder/internal/compilation"
@@ -331,7 +332,7 @@ func (b *Builder) preprocess() error {
331
332
if b .logger .VerbosityLevel () == logger .VerbosityVerbose {
332
333
b .logger .Info (i18n .Tr ("The list of included libraries has been changed... rebuilding all libraries." ))
333
334
}
334
- if err := b .librariesBuildPath . RemoveAll ( ); err != nil {
335
+ if err := b .removeBuildPathExecptLibsdiscoveryFiles ( b . librariesBuildPath ); err != nil {
335
336
return err
336
337
}
337
338
}
@@ -544,3 +545,28 @@ func (b *Builder) execCommand(command *paths.Process) error {
544
545
545
546
return command .Wait ()
546
547
}
548
+
549
+ func (b * Builder ) removeBuildPathExecptLibsdiscoveryFiles (pathToRemove * paths.Path ) error {
550
+ filesToRemove , err := pathToRemove .ReadDirRecursiveFiltered (nil ,
551
+ paths .FilterOutDirectories (),
552
+ paths .FilterOutSuffixes (".libsdetect.d" ))
553
+ if err != nil {
554
+ return err
555
+ }
556
+ for _ , f := range filesToRemove {
557
+ if err := f .Remove (); err != nil {
558
+ return err
559
+ }
560
+ }
561
+
562
+ dirsToRemove , err := pathToRemove .ReadDirRecursiveFiltered (nil , paths .FilterDirectories ())
563
+ if err != nil {
564
+ return err
565
+ }
566
+ // Remove directories in reverse order (deepest first)
567
+ sort .Slice (dirsToRemove , func (i , j int ) bool { return len (dirsToRemove [i ].String ()) > len (dirsToRemove [j ].String ()) })
568
+ for _ , d := range dirsToRemove {
569
+ _ = d .Remove ()
570
+ }
571
+ return nil
572
+ }
0 commit comments