build: added deletion of stale .so and .o files
authorAndrew Tridgell <tridge@samba.org>
Wed, 19 Oct 2011 05:34:32 +0000 (16:34 +1100)
committerAndrew Tridgell <tridge@samba.org>
Wed, 19 Oct 2011 07:02:23 +0000 (09:02 +0200)
when we change our build rules to move a C file, we need to remove the
old ('stale') .so and .o files from the build directory, or they may
be used as part of the new build, which means that old code will be
linked in.

This expands the list of stale files that we remove on rule changes to
include .so and .o files

Pair-Programmed-With: Amitay Isaacs <amitay@gmail.com>

Autobuild-User: Andrew Tridgell <tridge@samba.org>
Autobuild-Date: Wed Oct 19 09:02:23 CEST 2011 on sn-devel-104

buildtools/wafsamba/stale_files.py

index 2b94f0823e69ea487f23b453f71ba28dbda258cd..1ee1ff9d4471197234d7950207b56fbd8dd3c517 100644 (file)
@@ -58,7 +58,20 @@ def replace_refill_task_list(self):
             try:
                 if getattr(x, 'target'):
                     tlist = samba_utils.TO_LIST(getattr(x, 'target'))
+                    ttype = getattr(x, 'samba_type', None)
+                    task_list = getattr(x, 'compiled_tasks', [])
+                    if task_list:
+                        # this gets all of the .o files, including the task
+                        # ids, so foo.c maps to foo_3.o for idx=3
+                        for tsk in task_list:
+                            for output in tsk.outputs:
+                                objpath = os.path.normpath(output.abspath(bld.env))
+                                expected.append(objpath)
                     for t in tlist:
+                        if ttype in ['LIBRARY','MODULE']:
+                            t = samba_utils.apply_pattern(t, bld.env.shlib_PATTERN)
+                        if ttype == 'PYTHON':
+                            t = samba_utils.apply_pattern(t, bld.env.pyext_PATTERN)
                         p = os.path.join(x.path.abspath(bld.env), t)
                         p = os.path.normpath(p)
                         expected.append(p)
@@ -78,13 +91,14 @@ def replace_refill_task_list(self):
                     p = link
             if f in ['config.h']:
                 continue
-            if f[-2:] not in [ '.c', '.h' ]:
+            (froot, fext) = os.path.splitext(f)
+            if fext not in [ '.c', '.h', '.so', '.o' ]:
                 continue
             if f[-7:] == '.inst.h':
                 continue
             if p.find("/.conf") != -1:
                 continue
-            if not p in expected:
+            if not p in expected and os.path.exists(p):
                 Logs.warn("Removing stale file: %s" % p)
                 os.unlink(p)
     return iit