From c379f051d3b45e306f628f0764ab781f20e0f8f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=98yvind=20Karlsen?= Date: Mon, 30 May 2016 20:11:53 +0200 Subject: add support for optionally installing build depedencies by default --- MgaRepo/commands/buildrpm.py | 2 ++ MgaRepo/rpmutil.py | 30 +++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/MgaRepo/commands/buildrpm.py b/MgaRepo/commands/buildrpm.py index 76fa41e..421ece0 100644 --- a/MgaRepo/commands/buildrpm.py +++ b/MgaRepo/commands/buildrpm.py @@ -11,6 +11,7 @@ Builds the binary RPM(s) (.rpm) file(s) of a given package. Options: -bX Build stage option, where X is stage, default is -bb + -I Don't automatically try install missing build dependencies -l Disable rpmlint check of packages built -P USER Define the RPM packager information to USER -q Quiet build output @@ -21,6 +22,7 @@ Options: def parse_options(): parser = OptionParser(HELP) parser.add_option("-b", dest="build_cmd", default="a") + parser.add_option("-I", dest="installdeps", action="store_false", default=True) parser.add_option("-l", dest="rpmlint", action="store_false", default=True) parser.add_option("-P", dest="packager", default="") parser.add_option("-q", "--quiet", dest="verbose", action="store_false", default=True) diff --git a/MgaRepo/rpmutil.py b/MgaRepo/rpmutil.py index 05f453d..e9a2df9 100644 --- a/MgaRepo/rpmutil.py +++ b/MgaRepo/rpmutil.py @@ -378,7 +378,8 @@ def build_rpm(build_cmd="b", verbose=True, rpmlint=True, short_circuit=False, - packager = "", + packager = None, + installdeps = True, macros = []): top = os.getcwd() topdir = "_topdir %s" % top @@ -408,7 +409,7 @@ def build_rpm(build_cmd="b", rpmdefs.append(("--define", "_build_pkgcheck_set %{_bindir}/rpmlint")) rpmbuild = config.get("helper", "rpmbuild", "rpmbuild") - args = [rpmbuild, "-b"+build_cmd, spec] + args = [rpmbuild, spec] if short_circuit: args.append("--short-circuit") for pair in rpmdefs: @@ -416,7 +417,30 @@ def build_rpm(build_cmd="b", for pair in macros: args.extend(("--define", "%s %s" % pair)) os.environ["LC_ALL"] = "C" - execcmd(*args, show=verbose) + # First check whether dependencies are satisfied + status, output = execcmd(*args + ["--nobuild"], show=verbose, collecterr=True, noerror=True) + if status: + if "error: Failed build dependencies:" in output: + if not installdeps: + raise Error("Automatic installation of dependencies disabled," + "aborting...") + else: + if verbose: + print("Installing missing build dependencies") + if os.getuid() != 0: + print("Trying to obtain privileges for urpmi:") + sudocheck = ["sudo", "-l", "urpmi"] + status, output = execcmd(*sudocheck, collecter=True, noerror=True) + if status: + raise Error("%s\nFailed! Cannot proceed without, aborting..." + % output.splitlines()[-1]) + urpmi = ["sudo", "urpmi"] + else: + urpmi = ["urpmi"] + cmd = urpmi + ["--auto", "--buildrequires", "--no-recommends", spec] + status, output = execcmd(*cmd, show=verbose, collecter=True, noerror=True) + + status, output = execcmd(*args + ["-b"+build_cmd], show=verbose) def create_package(pkgdirurl, log="", verbose=0): svn = detectVCS(pkgdirurl) -- cgit v1.2.1