[PATCH 2 of 6] setup: expand configuration variables in data paths

Dan Villiom Podlaski Christiansen danchr at gmail.com
Thu Nov 26 13:48:03 CST 2009


# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1259263877 -3600
# Node ID aaed59f0dc70635e9d7ac6328a1ca11f76d724ba
# Parent  10bbfffbd3370a586fd62cc1d989e47598e1a271
setup: expand configuration variables in data paths.

Subclass the `install_data' in order to allow paths to installed data
to refer to configuration variables such as $dist_name or
$dist_version. This is primarily useful for distributors.

Please note that this changeset doesn't actually *use* the new
functionality; it merely introduces the infrastructure.

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -29,8 +29,10 @@ except:
 import os, subprocess, time
 import shutil
 import tempfile
+
 from distutils.core import setup, Extension
 from distutils.dist import Distribution
+from distutils.command.install import install
 from distutils.command.install_data import install_data
 from distutils.command.build import build
 from distutils.command.build_py import build_py
@@ -165,6 +167,40 @@ try:
 except ImportError:
     version = 'unknown'
 
+class install_extra_data(install_data):
+
+    user_options = [
+        ('install-doc=', None, 'installation directory for HTML documentation'),
+        ('install-man=', None, 'installation directory for manual pages'),
+    ]
+
+    def initialize_options(self):
+        install_data.initialize_options(self)
+
+        self.install_doc = '$install_data/doc/$dist_name'
+        self.install_man = '$install_data/man'
+        self.install_lib = self.config_vars = None
+
+    def finalize_options(self):
+        install_data.finalize_options(self)
+        self.set_undefined_options('install',
+                                   ('config_vars', 'config_vars'),
+                                   ('install_lib', 'install_lib'))
+
+        from distutils.util import subst_vars
+
+        self.config_vars['install_lib'] = self.install_lib
+        self.config_vars['install_data'] = self.install_dir
+        self.config_vars['install_doc'] = subst_vars(self.install_doc,
+                                                     self.config_vars)
+        self.config_vars['install_man'] = subst_vars(self.install_man,
+                                                     self.config_vars)
+
+        self.data_files = [(subst_vars(d, self.config_vars), f)
+                           for d, f in self.data_files]
+
+install.user_options.extend(install_extra_data.user_options)
+
 class build_mo(build):
 
     description = "build translations (.mo files)"
@@ -241,7 +277,8 @@ class hg_build_py(build_py):
             else:
                 yield module
 
-cmdclass = {'build_mo': build_mo,
+cmdclass = {'install_data': install_extra_data,
+            'build_mo': build_mo,
             'build_py': hg_build_py}
 
 ext_modules=[


More information about the Mercurial-devel mailing list