Belle II Software  release-05-02-19
autoclean_dir.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 import os
5 from SCons import Node
6 
7 
8 def autoclean_dir(env, dirname):
9  """
10  Autoclean directory, deleting all files which are not known to the build
11  system, like obsolete header files
12  """
13 
14  # First make a set of targets which are found inside the directory and all its subdirs
15  directory = env.Dir(dirname)
16  targets = set()
17  stack = [directory]
18  while stack:
19  dirnode = stack.pop()
20  for node in dirnode.all_children():
21  if isinstance(node, Node.FS.Dir):
22  stack.append(node)
23  elif node.is_derived():
24  targets.add(str(node))
25 
26  # Now delete all files found in the directory which are not in the target set
27  for (dirname, dirs, files) in os.walk(str(directory)):
28  if "__pycache__" in dirs:
29  dirs.remove("__pycache__")
30  for filename in files:
31  fullname = os.path.join(dirname, filename)
32  if fullname not in targets and not filename.startswith('.') and not \
33  (fullname.endswith('.pyc') and fullname[:-1] in targets):
34  print(env['CLEANUPCOMSTR'] % fullname)
35  os.remove(fullname)
36 
37 
38 def generate(env):
39  env.AddMethod(autoclean_dir, 'RemoveNonTargets')
40 
41 
42 def exists(env):
43  return True
autoclean_dir
Definition: autoclean_dir.py:1