summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-12-06 22:59:54 (GMT)
committerFred Drake <fdrake@acm.org>2001-12-06 22:59:54 (GMT)
commit9028d0a52529a8bc76868ade697511f29614b207 (patch)
treeef66dec6dba83cec240139ccdafbe09372961e2c
parente3d7622fb3e595db29b690751a00406b0e3cf975 (diff)
downloadcpython-9028d0a52529a8bc76868ade697511f29614b207.zip
cpython-9028d0a52529a8bc76868ade697511f29614b207.tar.gz
cpython-9028d0a52529a8bc76868ade697511f29614b207.tar.bz2
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.
-rw-r--r--Lib/distutils/command/build_ext.py11
-rw-r--r--setup.py7
2 files changed, 18 insertions, 0 deletions
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