From bd1d18a890909b954c0da3e7d15b3a64a97794bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= Date: Thu, 18 Mar 2021 13:56:53 +0000 Subject: [PATCH] Probe from travis config. --- ognibuild/buildsystem.py | 54 ++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/ognibuild/buildsystem.py b/ognibuild/buildsystem.py index f25cee5..597dbf4 100644 --- a/ognibuild/buildsystem.py +++ b/ognibuild/buildsystem.py @@ -79,6 +79,14 @@ class BuildSystem(object): def get_declared_outputs(self): raise NotImplementedError(self.get_declared_outputs) + @classmethod + def probe(cls, path): + return None + + @classmethod + def probe_from_travis(cls, path, data): + return None + class Pear(BuildSystem): @@ -766,22 +774,19 @@ class Golang(BuildSystem): @classmethod def probe(cls, path): - if os.path.exists(os.path.join(path, ".travis.yml")): - import ruamel.yaml.reader - - with open(os.path.join(path, ".travis.yml"), "rb") as f: - try: - data = ruamel.yaml.load(f, ruamel.yaml.SafeLoader) - except ruamel.yaml.reader.ReaderError as e: - warnings.warn("Unable to parse .travis.yml: %s" % (e,)) - else: - language = data.get("language") - if language == "go": - return Golang(path) - for entry in os.scandir(path): if entry.name.endswith(".go"): return Golang(path) + if entry.is_dir(): + for entry in os.scandir(entry.path): + if entry.name.endswith(".go"): + return Golang(path) + + @classmethod + def probe_from_travis(cls, path, data): + language = data.get("language") + if language == "go": + return cls(path) class Maven(BuildSystem): @@ -871,15 +876,32 @@ class PerlBuildTiny(BuildSystem): return cls(path) +BUILDSYSTEM_CLSES = [ + Pear, SetupPy, Npm, Waf, Cargo, Meson, Cabal, Gradle, Maven, + DistInkt, Gem, Make, PerlBuildTiny, Golang] + + def detect_buildsystems(path, trust_package=False): """Detect build systems.""" - for bs_cls in [ - Pear, SetupPy, Npm, Waf, Cargo, Meson, Cabal, Gradle, Maven, - DistInkt, Gem, Make, PerlBuildTiny, Golang]: + for bs_cls in BUILDSYSTEM_CLSES: bs = bs_cls.probe(path) if bs is not None: yield bs + if os.path.exists(os.path.join(path, ".travis.yml")): + import ruamel.yaml.reader + + with open(os.path.join(path, ".travis.yml"), "rb") as f: + try: + data = ruamel.yaml.load(f, ruamel.yaml.SafeLoader) + except ruamel.yaml.reader.ReaderError as e: + warnings.warn("Unable to parse .travis.yml: %s" % (e,)) + else: + for bs_cls in BUILDSYSTEM_CLSES: + bs = bs_cls.probe_from_travis(path, data) + if bs is not None: + yield bs + def get_buildsystem(path, trust_package=False): for buildsystem in detect_buildsystems(path, trust_package=trust_package):