fix building of forked upstream packages 31/1731/1 master
authorVille Heikkinen <ville.heikkinen@nokia.com>
Tue, 24 Sep 2019 20:03:34 +0000 (23:03 +0300)
committerVille Heikkinen <ville.heikkinen@nokia.com>
Fri, 4 Oct 2019 03:40:48 +0000 (06:40 +0300)
- 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 <ville.heikkinen@nokia.com>
makebuild.py
rpmbuilder/rpmtools.py

index 108f4c4..5b684b9 100755 (executable)
@@ -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)
index a9ab625..ef1c9c7 100644 (file)
@@ -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:"):