From 987529d7e120e80d9da82dccd56f44c2a723baa0 Mon Sep 17 00:00:00 2001 From: Ville Heikkinen Date: Tue, 24 Sep 2019 23:03:34 +0300 Subject: [PATCH] fix building of forked upstream packages - Removed randomization of the build list - If the build dependency resolution fails, building is tried again after something else is built first - It's possible to disable upstream package checking by adding "%global only_builddep_resolve 1" to the spec file. This is needed when building packages with circular dependencies. Change-Id: I78f78fa8897fd9a7b14ff062929fe26873364d5f Signed-off-by: Ville Heikkinen --- makebuild.py | 16 +++++++++------- rpmbuilder/rpmtools.py | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/makebuild.py b/makebuild.py index 108f4c4..5b684b9 100755 --- a/makebuild.py +++ b/makebuild.py @@ -21,7 +21,6 @@ import argparse import logging import os import platform -import random import re import shutil import sys @@ -193,7 +192,7 @@ class Build(object): projects_to_rebuild.extend(need_rebuild) buildlist.extend(projects_to_rebuild) buildlist = list(set(buildlist)) - random.shuffle(buildlist) + buildlist.sort() return buildlist def mock_projects(self, build_list): @@ -240,11 +239,14 @@ class Build(object): self.logger.debug("Trying to build: {}".format(project)) self.logger.debug("Build list: {}".format(build_list)) if not self.upstream_packages_in_buildlist(project, build_list): - self.projects[project].resolve_dependencies(mockroot) - self.logger.debug("OK to build {}".format(project)) - self.projects[project].build_project(mockroot) - something_was_built = True - self.packagebuilder.update_local_repository(self.builder.get_configdir(), mockroot) + if not self.projects[project].resolve_dependencies(mockroot): + self.logger.info("still unresolved dependencies: {}".format(project)) + not_built.append(project) + else: + self.logger.debug("OK to build {}".format(project)) + self.projects[project].build_project(mockroot) + something_was_built = True + self.packagebuilder.update_local_repository(self.builder.get_configdir(), mockroot) else: self.logger.debug("Skipping {} because upstream is not built yet".format(project)) not_built.append(project) diff --git a/rpmbuilder/rpmtools.py b/rpmbuilder/rpmtools.py index a9ab625..ef1c9c7 100644 --- a/rpmbuilder/rpmtools.py +++ b/rpmbuilder/rpmtools.py @@ -128,10 +128,10 @@ class Specworker(object): 'Failed to parse %global macro "{}" (error: {})'.format(linestripped, str(err))) - elif linestripped.lower().startswith("buildrequires:"): + elif linestripped.lower().startswith("buildrequires:") and "only_builddep_resolve" not in self.spec_globals: self.buildrequires.extend(self.__get_value_from_line(linestripped)) - elif linestripped.lower().startswith("requires:"): + elif linestripped.lower().startswith("requires:") and "only_builddep_resolve" not in self.spec_globals: self.requires.extend(self.__get_value_from_line(linestripped)) elif linestripped.lower().startswith("release:"): -- 2.16.6