Rerun autoconf if it didn't expand all macros.

This commit is contained in:
Jelmer Vernooij 2021-03-26 02:36:25 +00:00
parent f40a611ae2
commit 0220d5c524
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8
2 changed files with 36 additions and 2 deletions

View file

@ -71,7 +71,9 @@ def create_dist(
from .buildsystem import detect_buildsystems from .buildsystem import detect_buildsystems
from .buildlog import InstallFixer from .buildlog import InstallFixer
from .fix_build import BuildFixer from .fix_build import BuildFixer
from .fixers import GitIdentityFixer, SecretGpgKeyFixer from .fixers import (
GitIdentityFixer, SecretGpgKeyFixer,
UnexpandedAutoconfMacroFixer, )
if subdir is None: if subdir is None:
subdir = "package" subdir = "package"
@ -86,7 +88,9 @@ def create_dist(
# TODO(jelmer): use scan_buildsystems to also look in subdirectories # TODO(jelmer): use scan_buildsystems to also look in subdirectories
buildsystems = list(detect_buildsystems(export_directory)) buildsystems = list(detect_buildsystems(export_directory))
resolver = auto_resolver(session) resolver = auto_resolver(session)
fixers: List[BuildFixer] = [InstallFixer(resolver)] fixers: List[BuildFixer] = [UnexpandedAutoconfMacroFixer(session, resolver)]
fixers.append(InstallFixer(resolver))
if session.is_temporary: if session.is_temporary:
# Only muck about with temporary sessions # Only muck about with temporary sessions

View file

@ -22,7 +22,10 @@ from buildlog_consultant import Problem
from buildlog_consultant.common import ( from buildlog_consultant.common import (
MissingGitIdentity, MissingGitIdentity,
MissingSecretGpgKey, MissingSecretGpgKey,
MissingAutoconfMacro,
) )
from ognibuild.requirements import AutoconfMacroRequirement
from ognibuild.resolver import UnsatisfiedRequirements
from .fix_build import BuildFixer from .fix_build import BuildFixer
@ -70,3 +73,30 @@ Passphrase: ""
if p.returncode == 0: if p.returncode == 0:
return True return True
return False return False
class UnexpandedAutoconfMacroFixer(BuildFixer):
def __init__(self, session, resolver):
self.session = session
self.resolver = resolver
def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.resolver)
def __str__(self):
return "unexpanded m4 macro fixer (%s)" % self.resolver
def can_fix(self, error):
return isinstance(error, MissingAutoconfMacro)
def _fix(self, error, phase):
try:
self.resolver.install([AutoconfMacroRequirement(error.macro)])
except UnsatisfiedRequirements:
return False
from .fix_build import run_detecting_problems
run_detecting_problems(self.session, ['autoconf'])
return True