From 9028d0a52529a8bc76868ade697511f29614b207 Mon Sep 17 00:00:00 2001
From: Fred Drake <fdrake@acm.org>
Date: Thu, 6 Dec 2001 22:59:54 +0000
Subject: Visious hackery to solve a build-control problem related to our use
 of distutils for the library modules built as shared objects.  A better
 solution appears possible, but with the threat that the distutils becomes
 more magical ("complex"). This closes SF bug #458343.

---
 Lib/distutils/command/build_ext.py | 11 +++++++++++
 setup.py                           |  7 +++++++
 2 files changed, 18 insertions(+)

diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index c9e3062..7a39314 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -456,6 +456,17 @@ class build_ext (Command):
                                         debug=self.debug,
                                         extra_postargs=extra_args)
 
+        # XXX -- this is a Vile HACK!
+        #
+        # The setup.py script for Python on Unix needs to be able to
+        # get this list so it can perform all the clean up needed to
+        # avoid keeping object files around when cleaning out a failed
+        # build of an extension module.  Since Distutils does not
+        # track dependencies, we have to get rid of intermediates to
+        # ensure all the intermediates will be properly re-built.
+        #
+        self._built_objects = objects[:]
+
         # Now link the object files together into a "shared object" --
         # of course, first we have to figure out all the other things
         # that go into the mix.
diff --git a/setup.py b/setup.py
index 183c45e..693d64c 100644
--- a/setup.py
+++ b/setup.py
@@ -172,6 +172,13 @@ class PyBuildExt(build_ext):
                                         self.get_ext_filename(fullname))
             os.remove(ext_filename)
 
+            # XXX -- This relies on a Vile HACK in
+            # distutils.command.build_ext.build_extension().  The
+            # _built_objects attribute is stored there strictly for
+            # use here.
+            for filename in self._built_objects:
+                os.remove(filename)
+
     def get_platform (self):
         # Get value of sys.platform
         platform = sys.platform
-- 
cgit v0.12

