#!/usr/bin/env python3 # Copyright 2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import os import sys import optparse import subprocess from portage.util.movefile import _copyxattr from portage.exception import OperationNotSupported def parse_args(args): parser = optparse.OptionParser(add_help_option=False) parser.add_option( "-b", action="store_true", dest="shortopt_b" ) parser.add_option( "--backup", action="store", dest="backup" ) parser.add_option( "-c", action="store_true", dest="shortopt_c" ) parser.add_option( "--compare", "-C", action="store_true", dest="compare" ) parser.add_option( "--directory", "-d", action="store_true", dest="directory" ) parser.add_option( "-D", action="store_true", dest="shortopt_D" ) parser.add_option( "--owner", "-o", action="store", dest="owner" ) parser.add_option( "--group", "-g", action="store", dest="group" ) parser.add_option( "--mode", "-m", action="store", dest="mode" ) parser.add_option( "--preserve-timestamps", "-p", action="store_true", dest="preserve_timestamps" ) parser.add_option( "--strip", "-s", action="store_true", dest="strip" ) parser.add_option( "--strip-program", action="store", dest="strip_program" ) parser.add_option( "--suffix", "-S", action="store", dest="suffix" ) parser.add_option( "--target-directory", "-t", action="store", dest="target_directory" ) parser.add_option( "--no-target-directory", "-T", action="store_true", dest="no_target_directory" ) parser.add_option( "--context", "-Z", action="store", dest="context" ) parser.add_option( "--verbose", "-v", action="store_true", dest="verbose" ) parser.add_option( "--help", action="store_true", dest="help" ) parser.add_option( "--version", action="store_true", dest="version" ) return parser.parse_args(args) def copy_xattrs(opts, args): if opts.directory: return os.EX_OK if opts.target_directory is None: target = args.pop() target_is_directory = os.path.isdir(target) else: target = opts.target_directory target_is_directory = True try: if target_is_directory: for source in args: abs_path = target + '/' + os.path.basename(source) _copyxattr(source, abs_path) else: _copyxattr(args[0], target) return os.EX_OK except OperationNotSupported: return os.EX_OSERR def install_main(args): opts, pargs = parse_args(args) cmdline = [ '/usr/bin/install' ] cmdline.extend(args) returncode = subprocess.call(cmdline) if returncode == os.EX_OK: returncode = copy_xattrs(opts, pargs) return returncode if __name__ == "__main__": sys.exit(install_main(sys.argv[1:]))