Improve make handling.

This commit is contained in:
Jelmer Vernooij 2021-04-09 19:51:04 +01:00
parent 90d6120e81
commit 3658f6e0ec
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8

View file

@ -1079,45 +1079,58 @@ class Make(BuildSystem):
def build(self, session, resolver, fixers):
self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "all"], fixers)
self._run_make(session, ["all"], fixers)
def clean(self, session, resolver, fixers):
self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "clean"], fixers)
self._run_make(session, ["clean"], fixers)
def test(self, session, resolver, fixers):
self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "check"], fixers)
def install(self, session, resolver, fixers, install_target):
self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "install"], fixers)
def dist(self, session, resolver, fixers, target_directory, quiet=False):
self.setup(session, resolver, fixers)
with DistCatcher.default(session.external_path(".")) as dc:
def _run_make(self, session, args, fixers):
try:
run_with_build_fixers(session, ["make", "dist"], fixers)
run_with_build_fixers(session, ["make"] + args, fixers)
except UnidentifiedError as e:
if "make: *** No rule to make target 'dist'. Stop." in e.lines:
raise NotImplementedError
elif "make[1]: *** No rule to make target 'dist'. Stop." in e.lines:
raise NotImplementedError
if len(e.lines) < 5 and any([line.startswith("Run ./configure") for line in e.lines]):
run_with_build_fixers(session, ["./configure"], fixers)
run_with_build_fixers(session, ["make"] + args, fixers)
elif (
"Reconfigure the source tree "
"(via './config' or 'perl Configure'), please."
) in e.lines:
run_with_build_fixers(session, ["./config"], fixers)
run_with_build_fixers(session, ["make", "dist"], fixers)
run_with_build_fixers(session, ["make"] + args, fixers)
elif "Please run ./configure first" in e.lines:
run_with_build_fixers(session, ["./configure"], fixers)
run_with_build_fixers(session, ["make"] + args, fixers)
else:
raise
def test(self, session, resolver, fixers):
self.setup(session, resolver, fixers)
self._run_make(session, ["check"], fixers)
def install(self, session, resolver, fixers, install_target):
self.setup(session, resolver, fixers)
self._run_make(session, ["install"], fixers)
def dist(self, session, resolver, fixers, target_directory, quiet=False):
self.setup(session, resolver, fixers)
with DistCatcher.default(session.external_path(".")) as dc:
try:
self._run_make(session, ["dist"], fixers)
except UnidentifiedError as e:
if "make: *** No rule to make target 'dist'. Stop." in e.lines:
raise NotImplementedError
elif "make[1]: *** No rule to make target 'dist'. Stop." in e.lines:
raise NotImplementedError
elif "ninja: error: unknown target 'dist', did you mean 'dino'?" in e.lines:
raise NotImplementedError
elif (
"Please try running 'make manifest' and then run "
"'make dist' again." in e.lines
):
run_with_build_fixers(session, ["make", "manifest"], fixers)
run_with_build_fixers(session, ["make", "dist"], fixers)
elif "Please run ./configure first" in e.lines:
run_with_build_fixers(session, ["./configure"], fixers)
run_with_build_fixers(session, ["make", "dist"], fixers)
elif any(
[
re.match(