source: trunk/server/buildtools/wafsamba/stale_files.py

Last change on this file was 745, checked in by Silvan Scherrer, 13 years ago

Samba Server: updated trunk to 3.6.0

File size: 3.2 KB
Line 
1#! /usr/bin/env python
2# encoding: utf-8
3# Thomas Nagy, 2006-2010 (ita)
4
5"""
6Add a pre-build hook to remove all build files
7which do not have a corresponding target
8
9This can be used for example to remove the targets
10that have changed name without performing
11a full 'waf clean'
12
13Of course, it will only work if there are no dynamically generated
14nodes/tasks, in which case the method will have to be modified
15to exclude some folders for example.
16"""
17
18import Logs, Build, os, samba_utils, Options, Utils
19from Runner import Parallel
20
21old_refill_task_list = Parallel.refill_task_list
22def replace_refill_task_list(self):
23 '''replacement for refill_task_list() that deletes stale files'''
24
25 iit = old_refill_task_list(self)
26 bld = self.bld
27
28 if not getattr(bld, 'new_rules', False):
29 # we only need to check for stale files if the build rules changed
30 return iit
31
32 if Options.options.compile_targets:
33 # not safe when --target is used
34 return iit
35
36 # execute only once
37 if getattr(self, 'cleanup_done', False):
38 return iit
39 self.cleanup_done = True
40
41 def group_name(g):
42 tm = self.bld.task_manager
43 return [x for x in tm.groups_names if id(tm.groups_names[x]) == id(g)][0]
44
45 bin_base = bld.bldnode.abspath()
46 bin_base_len = len(bin_base)
47
48 # paranoia
49 if bin_base[-4:] != '/bin':
50 raise Utils.WafError("Invalid bin base: %s" % bin_base)
51
52 # obtain the expected list of files
53 expected = []
54 for i in range(len(bld.task_manager.groups)):
55 g = bld.task_manager.groups[i]
56 tasks = g.tasks_gen
57 for x in tasks:
58 try:
59 if getattr(x, 'target'):
60 tlist = samba_utils.TO_LIST(getattr(x, 'target'))
61 for t in tlist:
62 p = os.path.join(x.path.abspath(bld.env), t)
63 p = os.path.normpath(p)
64 expected.append(p)
65 for n in x.allnodes:
66 p = n.abspath(bld.env)
67 if p[0:bin_base_len] == bin_base:
68 expected.append(p)
69 except:
70 pass
71
72 for root, dirs, files in os.walk(bin_base):
73 for f in files:
74 p = root + '/' + f
75 if os.path.islink(p):
76 link = os.readlink(p)
77 if link[0:bin_base_len] == bin_base:
78 p = link
79 if f in ['config.h']:
80 continue
81 if f[-2:] not in [ '.c', '.h' ]:
82 continue
83 if f[-7:] == '.inst.h':
84 continue
85 if p.find("/.conf") != -1:
86 continue
87 if not p in expected:
88 Logs.warn("Removing stale file: %s" % p)
89 os.unlink(p)
90 return iit
91
92
93def AUTOCLEANUP_STALE_FILES(bld):
94 """automatically clean up any files in bin that shouldn't be there"""
95 old_refill_task_list = Parallel.refill_task_list
96 Parallel.refill_task_list = replace_refill_task_list
97 Parallel.bld = bld
98Build.BuildContext.AUTOCLEANUP_STALE_FILES = AUTOCLEANUP_STALE_FILES
Note: See TracBrowser for help on using the repository browser.