? rpm-record.patch Index: bdist_rpm.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/distutils/command/bdist_rpm.py,v retrieving revision 1.45 diff -u -3 -p -r1.45 bdist_rpm.py --- bdist_rpm.py 17 Sep 2004 08:34:12 -0000 1.45 +++ bdist_rpm.py 3 Oct 2004 13:25:57 -0000 @@ -470,7 +470,7 @@ class bdist_rpm (Command): ('install', 'install_script', ("%s setup.py install " "--root=$RPM_BUILD_ROOT " - "--record=INSTALLED_FILES") % self.python), + "--record-rpm=INSTALLED_OBJECTS") % self.python), ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"), ('verifyscript', 'verify_script', None), ('pre', 'pre_install', None), @@ -496,7 +496,7 @@ class bdist_rpm (Command): # files section spec_file.extend([ '', - '%files -f INSTALLED_FILES', + '%files -f INSTALLED_OBJECTS', '%defattr(-,root,root)', ]) Index: install.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/distutils/command/install.py,v retrieving revision 1.70 diff -u -3 -p -r1.70 install.py --- install.py 18 Jul 2004 06:14:43 -0000 1.70 +++ install.py 3 Oct 2004 13:25:57 -0000 @@ -137,6 +137,8 @@ class install (Command): ('record=', None, "filename in which to record list of installed files"), + ('record-rpm=', None, + "filename in which to record list of installed objects (RPM)"), ] boolean_options = ['compile', 'force', 'skip-build'] @@ -212,6 +214,7 @@ class install (Command): #self.install_info = None self.record = None + self.record_rpm = None # -- Option finalizing methods ------------------------------------- @@ -497,6 +500,64 @@ class install (Command): setattr(self, attr, change_root(self.root, getattr(self, attr))) + def write_record(self): + outputs = self.get_outputs() + if self.root: + outputs = [ f[len(self.root):] for f in outputs ] + self.execute(write_file, + (self.record, outputs), + "writing list of installed files to '%s'" % + self.record) + + def write_record_rpm(self): + outputs = self.get_outputs() + + files = [ f[len(self.root):] for f in outputs + if f.find('LC_MESSAGES') == -1 ] + langs = [ f[len(self.root):] for f in outputs + if f.find('LC_MESSAGES') != -1 ] + + def getlang(f): + i = f.find('LC_MESSAGES') + j = f.rindex('/', 0, i) + k = f.rindex('/', 0, j) + return "%%lang(%s) %s" % (f[k+1:j], f) + + outputs = [] + outputs.extend(files) + outputs.extend([ getlang(f) for f in langs ]) + + data_dirs = [] + + if self.distribution.data_files: + for f in self.distribution.data_files: + if type(f) is not StringType: + # it's a tuple with path to install to and a list of files + p = convert_path(f[0]) + if not os.path.isabs(p): + data_dirs.append(os.path.join(self.install_base, p)) + elif self.root: + data_dirs.append(change_root(self.root, p)) + + data_dirs = [ self.root + d for d in data_dirs + if not d.startswith(self.root) ] + tops = [ self.install_lib ] + # uniquify + tops.extend(dict.fromkeys(data_dirs).keys()) + + for top in tops: + dirs = [] + os.path.walk(top, lambda a, d, f: a.append(d), dirs) + dirs = [ "%%dir %s" % d[len(self.root):] + for d in dirs if os.path.basename(d[:-1]) != + 'site-packages' ] + outputs.extend(dirs) + + self.execute(write_file, + (self.record_rpm, outputs), + "writing list of installed objects to '%s'" % + self.record_rpm) + # -- Command execution methods ------------------------------------- def run (self): @@ -520,15 +581,11 @@ class install (Command): # write list of installed files, if requested. if self.record: - outputs = self.get_outputs() - if self.root: # strip any package prefix - root_len = len(self.root) - for counter in xrange(len(outputs)): - outputs[counter] = outputs[counter][root_len:] - self.execute(write_file, - (self.record, outputs), - "writing list of installed files to '%s'" % - self.record) + self.write_record() + + # for rpm's file list + if self.record_rpm: + self.write_record_rpm() sys_path = map(os.path.normpath, sys.path) sys_path = map(os.path.normcase, sys_path)