You can customize the behavior of derived-file caching to add your own features, for example to support compressed and/or encrypted cache files, modify cache file permissions to better support shared caches, gather additional statistics and data, etc.
To define custom cache behavior, subclass the
SCons.CacheDir.CacheDir class,
specializing those methods you want to change.
You can pass this custom class as the custom_class
parameter when calling CacheDir for global reach,
or when calling env.CacheDir for a specific environment.
You can also set the construction variable
$CACHEDIR_CLASS to the custom class - this needs to happen
before configuring the cache in that environment.
SCons will internally invoke and use your custom class when performing
cache operations.
The below example shows a simple use case of overriding the
copy_from_cache
method to record the total number of bytes pulled from the cache.
import os
import SCons.CacheDir
class CustomCacheDir(SCons.CacheDir.CacheDir):
total_retrieved = 0
@classmethod
def copy_from_cache(cls, env, src, dst):
# record total bytes pulled from cache
cls.total_retrieved += os.stat(src).st_size
return super().copy_from_cache(env, src, dst)
env = Environment()
env.CacheDir('scons-cache', custom_class=CustomCacheDir)
# ...