[PATCH 1 of 5] setup: don't override install_data for package data
Dan Villiom Podlaski Christiansen
danchr at gmail.com
Tue Nov 24 11:43:33 CST 2009
# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1259081618 -3600
# Node ID 19afd9d34457557fc49a96b7a577c363b340e00b
# Parent 3fd712025fda6e3f78736f3d42d9da2a8e83d7cb
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. As a replacement, a separate 'package_data_files' field
on the distribution --- specific to Mercurial --- is used instead.
diff --git a/setup.py b/setup.py
old mode 100644
new mode 100755
--- a/setup.py
+++ b/setup.py
@@ -167,10 +167,28 @@ except ImportError:
class install_package_data(install_data):
def finalize_options(self):
+ def isregularfilename(p):
+ return p and p[0] != '.' and p[-1] != '~'
+
+ # obtain the install_lib option for adding package data
+ self.install_lib = None
self.set_undefined_options('install',
- ('install_lib', 'install_dir'))
+ ('install_lib', 'install_lib'))
install_data.finalize_options(self)
+ # this is not a standard distutils attribute
+ datafiles = getattr(self.distribution, 'package_data_files', [])
+
+ for root in ('templates', 'i18n', 'help'):
+ for dir, dirs, files in os.walk(root):
+ dirs[:] = filter(isregularfilename, dirs)
+ files = filter(isregularfilename, files)
+ 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)"
@@ -186,6 +204,11 @@ class build_mo(build):
self.warn("could not find %s/ directory" % podir)
return
+ # this is not a standard distutils attribute
+ 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'):
@@ -199,8 +222,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))
@@ -256,12 +278,6 @@ if sys.platform == 'linux2' and os.uname
packages.extend(['hgext.inotify', 'hgext.inotify.linux'])
datafiles = []
-for root in ('templates', 'i18n', 'help'):
- 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,
More information about the Mercurial-devel
mailing list