[PATCH 1 of 3] setup: don't override install_data for package data

Dan Villiom Podlaski Christiansen danchr at gmail.com
Sat Aug 22 07:52:18 CDT 2009


# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1250709391 -7200
# Node ID 1c05b1bbf7588f9805d5b0c931cdb698309ae840
# Parent  867d05ce56a176afe5e4ae9a568c8229fcee545f
setup: don't override install_data for package data.

Currently, the 'install_data' option is overridden and set from the
'install_lib' option. This prevents installing anything other than
package data; use a separate 'package_data_files' field on the
distribution instead.

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -157,10 +157,23 @@ except ImportError:
 
 class install_package_data(install_data):
     def finalize_options(self):
+        self.install_lib = None
         self.set_undefined_options('install',
-                                   ('install_lib', 'install_dir'))
+                                   ('install_lib', 'install_lib'))
         install_data.finalize_options(self)
 
+        datafiles = getattr(self.distribution, 'package_data_files', [])
+
+        for root in ('templates', 'i18n'):
+            for dir, dirs, files in os.walk(root):
+                dirs[:] = [x for x in dirs if not x.startswith('.')]
+                files = [x for x in files if not x.startswith('.')]
+                datafiles.append((os.path.join('mercurial', dir),
+                                  [os.path.join(dir, f) for f in files]))
+
+        for dir, files in datafiles:
+            self.data_files.append((os.path.join(self.install_lib, dir), files))
+
 class build_mo(build):
 
     description = "build translations (.mo files)"
@@ -176,6 +189,10 @@ class build_mo(build):
             self.warn("could not find %s/ directory" % podir)
             return
 
+        if not hasattr(self.distribution, 'package_data_files'):
+            self.distribution.package_data_files = []
+        datafiles = self.distribution.package_data_files
+
         join = os.path.join
         for po in os.listdir(podir):
             if not po.endswith('.po'):
@@ -189,8 +206,7 @@ class build_mo(build):
                 cmd.append('-c')
             self.mkpath(modir)
             self.make_file([pofile], mofile, spawn, (cmd,))
-            self.distribution.data_files.append((join('mercurial', modir),
-                                                 [mofile]))
+            datafiles.append((join('mercurial', modir), [mofile]))
 
 build.sub_commands.append(('build_mo', None))
 
@@ -245,14 +261,6 @@ if sys.platform == 'linux2' and os.uname
                                      ['hgext/inotify/linux/_inotify.c']))
         packages.extend(['hgext.inotify', 'hgext.inotify.linux'])
 
-datafiles = []
-for root in ('templates', 'i18n'):
-    for dir, dirs, files in os.walk(root):
-        dirs[:] = [x for x in dirs if not x.startswith('.')]
-        files = [x for x in files if not x.startswith('.')]
-        datafiles.append((os.path.join('mercurial', dir),
-                          [os.path.join(dir, file_) for file_ in files]))
-
 setup(name='mercurial',
       version=version,
       author='Matt Mackall',


More information about the Mercurial-devel mailing list