--- Lib/distutils/cmd.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/cmd.py 2003-06-17 13:42:47.000000000 +0200 @@ -470,8 +470,11 @@ self.copy_file(f, self.install_dir) self.outfiles.append(os.path.join(self.install_dir, f)) - def get_outputs (self): - return self.outfiles + def get_outputs (self, rpm_dir=0): + if rpm_dir: + return self.outfiles + else: + return self.outfiles.append("%dir " + self.install_dir) if __name__ == "__main__": --- Lib/distutils/command/build_ext.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/build_ext.py 2003-06-17 13:42:48.000000000 +0200 @@ -368,7 +368,7 @@ return filenames - def get_outputs (self): + def get_outputs (self, rpm_dirs=0): # Sanity check the 'extensions' list -- can't assume this is being # done in the same run as a 'build_extensions()' call (in fact, we --- Lib/distutils/command/build_py.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/build_py.py 2003-06-17 15:06:40.000000000 +0200 @@ -291,7 +291,7 @@ return apply(os.path.join, outfile_path) - def get_outputs (self, include_bytecode=1): + def get_outputs (self, include_bytecode=1, rpm_dirs=0): modules = self.find_all_modules() outputs = [] for (package, module, module_file) in modules: @@ -303,6 +303,11 @@ outputs.append(filename + "c") if self.optimize > 0: outputs.append(filename + "o") + if rpm_dirs: + for counter in xrange(len(package) + 1): + pathname = "%dir " + apply(os.path.join, [self.build_lib] + package[:counter]) + if pathname not in outputs: + outputs.append(pathname) return outputs --- Lib/distutils/command/install.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/install.py 2003-06-17 13:42:48.000000000 +0200 @@ -135,6 +135,8 @@ ('record=', None, "filename in which to record list of installed files"), + ('record-rpm=', None, + "filename in which to record list of installed files and directories"), ] boolean_options = ['compile', 'force', 'skip-build'] @@ -207,6 +209,7 @@ #self.install_info = None self.record = None + self.record_rpm = None # -- Option finalizing methods ------------------------------------- @@ -519,6 +522,25 @@ "writing list of installed files to '%s'" % self.record) + # write list of installed files, if requested. + if self.record_rpm: + try: + outputs = self.get_outputs(rpm_dirs=1) + except: + outputs = self.get_outputs() + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in xrange(len(outputs)): + if outputs[counter][:5] == "%dir ": + if outputs[counter][5:] != self.install_lib or self.install_libbase != self.install_lib: + outputs[counter] = "%dir " + outputs[counter][5+root_len:] + else: + outputs[counter] = outputs[counter][root_len:] + self.execute(write_file, + (self.record_rpm, outputs), + "writing list of installed files and directories to '%s'" % + self.record_rpm) + sys_path = map(os.path.normpath, sys.path) sys_path = map(os.path.normcase, sys_path) install_lib = os.path.normcase(os.path.normpath(self.install_lib)) @@ -545,14 +567,18 @@ # -- Reporting methods --------------------------------------------- - def get_outputs (self): + def get_outputs (self, rpm_dirs=0): # Assemble the outputs of all the sub-commands. outputs = [] for cmd_name in self.get_sub_commands(): cmd = self.get_finalized_command(cmd_name) # Add the contents of cmd.get_outputs(), ensuring # that outputs doesn't contain duplicate entries - for filename in cmd.get_outputs(): + try: + flist = cmd.get_outputs(rpm_dirs=rpm_dirs) + except: + flist = cmd.get_outputs() + for filename in flist: if filename not in outputs: outputs.append(filename) --- Lib/distutils/command/install_data.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/install_data.py 2003-06-17 15:05:25.000000000 +0200 @@ -32,6 +32,7 @@ def initialize_options (self): self.install_dir = None self.outfiles = [] + self.outdirs = [] self.root = None self.force = 0 @@ -61,9 +62,14 @@ # it's a tuple with path to install to and a list of files dir = convert_path(f[0]) if not os.path.isabs(dir): + curdir = dir.rstrip(os.sep) + while curdir != "" and curdir[len(curdir)-5:] != "share" and curdir[len(curdir)-13:] != "site-packages": + self.outdirs.append("%dir " + os.path.join(self.install_dir, curdir)) + curdir = os.path.dirname(curdir) dir = os.path.join(self.install_dir, dir) elif self.root: dir = change_root(self.root, dir) + self.outdirs.append("%dir " + dir) self.mkpath(dir) if f[1] == []: @@ -81,5 +87,8 @@ def get_inputs (self): return self.data_files or [] - def get_outputs (self): - return self.outfiles + def get_outputs (self, rpm_dirs=0): + if rpm_dirs: + return self.outfiles + self.outdirs + else: + return self.outfiles --- Lib/distutils/command/install_headers.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/install_headers.py 2003-06-17 13:42:48.000000000 +0200 @@ -27,6 +27,7 @@ self.install_dir = None self.force = 0 self.outfiles = [] + self.outdirs = [] def finalize_options (self): self.set_undefined_options('install', @@ -40,6 +41,7 @@ return self.mkpath(self.install_dir) + self.outdirs.append("%dir " + self.install_dir) for header in headers: (out, _) = self.copy_file(header, self.install_dir) self.outfiles.append(out) @@ -47,7 +49,10 @@ def get_inputs (self): return self.distribution.headers or [] - def get_outputs (self): - return self.outfiles + def get_outputs (self, rpm_dirs=0): + if rpm_dirs: + return self.outfiles + self.outdirs + else: + return self.outfiles # class install_headers --- Lib/distutils/command/install_lib.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/install_lib.py 2003-06-17 15:08:17.000000000 +0200 @@ -134,19 +134,28 @@ # -- Utility methods ----------------------------------------------- - def _mutate_outputs (self, has_any, build_cmd, cmd_option, output_dir): + def _mutate_outputs (self, has_any, build_cmd, cmd_option, output_dir, rpm_dirs): if not has_any: return [] build_cmd = self.get_finalized_command(build_cmd) - build_files = build_cmd.get_outputs() + try: + build_files = build_cmd.get_outputs(rpm_dirs=rpm_dirs) + except: + build_files = build_cmd.get_outputs() build_dir = getattr(build_cmd, cmd_option) prefix_len = len(build_dir) + len(os.sep) outputs = [] for file in build_files: - outputs.append(os.path.join(output_dir, file[prefix_len:])) + if file[:5] == "%dir ": + curdir = "%dir " + os.path.join(output_dir, file[5+prefix_len:]) + curdir = curdir.rstrip(os.sep) + if curdir[len(curdir)-5:] != "share" and curdir[len(curdir)-13:] != "site-packages": + outputs.append(curdir) + else: + outputs.append(os.path.join(output_dir, file[prefix_len:])) return outputs @@ -155,10 +164,11 @@ def _bytecode_filenames (self, py_filenames): bytecode_files = [] for py_file in py_filenames: - if self.compile: - bytecode_files.append(py_file + "c") - if self.optimize > 0: - bytecode_files.append(py_file + "o") + if py_file[:5] != "%dir ": + if self.compile: + bytecode_files.append(py_file + "c") + if self.optimize > 0: + bytecode_files.append(py_file + "o") return bytecode_files @@ -166,7 +176,7 @@ # -- External interface -------------------------------------------- # (called by outsiders) - def get_outputs (self): + def get_outputs (self, rpm_dirs=0): """Return the list of files that would be installed if this command were actually run. Not affected by the "dry-run" flag or whether modules have actually been built yet. @@ -174,7 +184,7 @@ pure_outputs = \ self._mutate_outputs(self.distribution.has_pure_modules(), 'build_py', 'build_lib', - self.install_dir) + self.install_dir, rpm_dirs) if self.compile: bytecode_outputs = self._bytecode_filenames(pure_outputs) else: @@ -183,7 +193,7 @@ ext_outputs = \ self._mutate_outputs(self.distribution.has_ext_modules(), 'build_ext', 'build_lib', - self.install_dir) + self.install_dir, rpm_dirs) return pure_outputs + bytecode_outputs + ext_outputs --- Lib/distutils/command/install_scripts.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/command/install_scripts.py 2003-06-17 13:42:48.000000000 +0200 @@ -60,7 +60,7 @@ def get_inputs (self): return self.distribution.scripts or [] - def get_outputs(self): + def get_outputs(self, rpm_dirs=0): return self.outfiles or [] # class install_scripts --- Lib/distutils/dir_util.py 2003-05-06 12:53:48.000000000 +0200 +++ Lib/distutils/dir_util.py 2003-06-17 13:42:48.000000000 +0200 @@ -115,7 +115,8 @@ preserve_symlinks=0, update=0, verbose=0, - dry_run=0): + dry_run=0, + rpm_dirs=0): """Copy an entire directory tree 'src' to a new location 'dst'. Both 'src' and 'dst' must be directory names. If 'src' is not a @@ -149,10 +150,11 @@ raise DistutilsFileError, \ "error listing files in '%s': %s" % (src, errstr) + outputs = [] if not dry_run: mkpath(dst) - - outputs = [] + if rpm_dirs: + outputs.append("%dir " + dst) for n in names: src_name = os.path.join(src, n) @@ -169,7 +171,7 @@ outputs.extend( copy_tree(src_name, dst_name, preserve_mode, preserve_times, preserve_symlinks, update, - dry_run=dry_run)) + dry_run=dry_run, rpm_dirs=rpm_dirs)) else: copy_file(src_name, dst_name, preserve_mode, preserve_times, update, dry_run=dry_run)