@@ -52,7 +52,7 @@ type SketchLibrariesDetector struct {
5252 librariesManager * librariesmanager.LibrariesManager
5353 librariesResolver * librariesresolver.Cpp
5454 useCachedLibrariesResolution bool
55- cache * includeCache
55+ cache * detectorCache
5656 onlyUpdateCompilationDatabase bool
5757 importedLibraries libraries.List
5858 librariesResolutionResults map [string ]libraryResolutionResult
@@ -74,6 +74,7 @@ func NewSketchLibrariesDetector(
7474 librariesManager : lm ,
7575 librariesResolver : libsResolver ,
7676 useCachedLibrariesResolution : useCachedLibrariesResolution ,
77+ cache : newDetectorCache (),
7778 librariesResolutionResults : map [string ]libraryResolutionResult {},
7879 importedLibraries : libraries.List {},
7980 includeFolders : paths.PathList {},
@@ -175,21 +176,10 @@ func (l *SketchLibrariesDetector) IncludeFolders() paths.PathList {
175176 return l .includeFolders
176177}
177178
178- // appendIncludeFolder todo should rename this, probably after refactoring the
179- // container_find_includes command.
180- // Original comment:
181- // Append the given folder to the include path and match or append it to
182- // the cache. sourceFilePath and include indicate the source of this
183- // include (e.g. what #include line in what file it was resolved from)
184- // and should be the empty string for the default include folders, like
185- // the core or variant.
186- func (l * SketchLibrariesDetector ) appendIncludeFolder (
187- sourceFilePath * paths.Path ,
188- include string ,
189- folder * paths.Path ,
190- ) {
179+ // addIncludeFolder add the given folder to the include path.
180+ func (l * SketchLibrariesDetector ) addIncludeFolder (folder * paths.Path ) {
191181 l .includeFolders = append (l .includeFolders , folder )
192- l .cache .ExpectEntry ( sourceFilePath , include , folder )
182+ l .cache .Expect ( & detectorCacheEntry { AddedIncludePath : folder } )
193183}
194184
195185// FindIncludes todo
@@ -245,11 +235,13 @@ func (l *SketchLibrariesDetector) findIncludes(
245235 }
246236
247237 cachePath := buildPath .Join ("includes.cache" )
248- l .cache = readCache (cachePath )
238+ if err := l .cache .Load (cachePath ); err != nil {
239+ l .logger .Warn (i18n .Tr ("Failed to load library discovery cache: %[1]s" , err ))
240+ }
249241
250- l .appendIncludeFolder ( nil , "" , buildCorePath )
242+ l .addIncludeFolder ( buildCorePath )
251243 if buildVariantPath != nil {
252- l .appendIncludeFolder ( nil , "" , buildVariantPath )
244+ l .addIncludeFolder ( buildVariantPath )
253245 }
254246
255247 sourceFileQueue := & uniqueSourceFileQueue {}
@@ -269,16 +261,15 @@ func (l *SketchLibrariesDetector) findIncludes(
269261 }
270262
271263 for ! sourceFileQueue .Empty () {
272- err := l .findIncludesUntilDone (ctx , sourceFileQueue , buildProperties , librariesBuildPath , platformArch )
264+ err := l .findMissingIncludesInCompilationUnit (ctx , sourceFileQueue , buildProperties , librariesBuildPath , platformArch )
273265 if err != nil {
274266 cachePath .Remove ()
275267 return err
276268 }
277269 }
278270
279271 // Finalize the cache
280- l .cache .ExpectEnd ()
281- if err := l .cache .write (cachePath ); err != nil {
272+ if err := l .cache .Save (cachePath ); err != nil {
282273 return err
283274 }
284275 }
@@ -296,7 +287,7 @@ func (l *SketchLibrariesDetector) findIncludes(
296287 return nil
297288}
298289
299- func (l * SketchLibrariesDetector ) findIncludesUntilDone (
290+ func (l * SketchLibrariesDetector ) findMissingIncludesInCompilationUnit (
300291 ctx context.Context ,
301292 sourceFileQueue * uniqueSourceFileQueue ,
302293 buildProperties * properties.Map ,
@@ -328,7 +319,7 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone(
328319
329320 first := true
330321 for {
331- l .cache .ExpectFile ( sourcePath )
322+ l .cache .Expect ( & detectorCacheEntry { CompilingSourcePath : sourcePath } )
332323
333324 // Libraries may require the "utility" directory to be added to the include
334325 // search path, but only for the source code of the library, so we temporary
@@ -343,8 +334,8 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone(
343334 var preprocFirstResult * runner.Result
344335
345336 var missingIncludeH string
346- if unchanged && l .cache .valid {
347- missingIncludeH = l . cache . Next (). Include
337+ if entry := l .cache .Peek (); unchanged && entry != nil && entry . MissingIncludeH != nil {
338+ missingIncludeH = * entry . MissingIncludeH
348339 if first && l .logger .VerbosityLevel () == logger .VerbosityVerbose {
349340 l .logger .Info (i18n .Tr ("Using cached library dependencies for file: %[1]s" , sourcePath ))
350341 }
@@ -370,9 +361,10 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone(
370361 }
371362 }
372363
364+ l .cache .Expect (& detectorCacheEntry {MissingIncludeH : & missingIncludeH })
365+
373366 if missingIncludeH == "" {
374367 // No missing includes found, we're done
375- l .cache .ExpectEntry (sourcePath , "" , nil )
376368 return nil
377369 }
378370
@@ -405,7 +397,7 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone(
405397 // include path and queue its source files for further
406398 // include scanning
407399 l .AppendImportedLibraries (library )
408- l .appendIncludeFolder ( sourcePath , missingIncludeH , library .SourceDir )
400+ l .addIncludeFolder ( library .SourceDir )
409401
410402 if library .Precompiled && library .PrecompiledWithSources {
411403 // Fully precompiled libraries should have no dependencies to avoid ABI breakage
0 commit comments