[PATCH 8 of 9] add --pure flag to setup.py

Martin Geisler mg at daimi.au.dk
Fri Jan 23 19:06:56 CST 2009


# HG changeset patch
# User Martin Geisler <mg at daimi.au.dk>
# Date 1232757883 -3600
# Node ID fe9b54419d3eef355f07a7eda9aa2e5d60110b48
# Parent  da99fd499d8644ad8b0af5963ebdb3829d75bb56
add --pure flag to setup.py

This flag will make the build_py step install the pure Python modules
in mercurial/pure/ into mercurial/ and furthermore prevent building
the C extensions.

diff -r da99fd499d86 -r fe9b54419d3e setup.py
--- a/setup.py	Sat Jan 24 00:13:49 2009 +0100
+++ b/setup.py	Sat Jan 24 01:44:43 2009 +0100
@@ -30,8 +30,10 @@
 import shutil
 import tempfile
 from distutils.core import setup, Extension
+from distutils.dist import Distribution
 from distutils.command.install_data import install_data
 from distutils.command.build import build
+from distutils.command.build_py import build_py
 from distutils.spawn import spawn, find_executable
 from distutils.ccompiler import new_compiler
 
@@ -147,8 +149,36 @@
 
 build.sub_commands.append(('build_mo', None))
 
+Distribution.pure = 0
+Distribution.global_options.append(('pure', None, "use pure (slow) Python "
+                                    "code instead of C extensions"))
+
+
+class hg_build_py(build_py):
+
+    def finalize_options(self):
+        build_py.finalize_options(self)
+
+        if self.distribution.pure:
+            if self.py_modules is None:
+                self.py_modules = []
+            for ext in self.distribution.ext_modules:
+                if ext.name.startswith("mercurial."):
+                    self.py_modules.append("mercurial.pure.%s" % ext.name[10:])
+            self.distribution.ext_modules = []
+
+    def find_modules(self):
+        modules = build_py.find_modules(self)
+        for module in modules:
+            if module[0] == "mercurial.pure":
+                if module[1] != "__init__":
+                    yield ("mercurial", module[1], module[2])
+            else:
+                yield module
+
 cmdclass = {'install_data': install_package_data,
-            'build_mo': build_mo}
+            'build_mo': build_mo,
+            'build_py': hg_build_py}
 
 ext_modules=[
     Extension('mercurial.base85', ['mercurial/base85.c']),


More information about the Mercurial-devel mailing list