#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0-or-later # Copyright 2018 sysmocom - s.f.m.c. GmbH import argparse import os import shutil import sys # Same folder import config import dependencies import buildstack def parse_arguments(): # Create argparser description = ("This script verifies that Osmocom programs really build" " with the dependency versions they claim to support in" " configure.ac. In order to do that, it clones the" " dependency repositories if they don't exist in workdir" " already, and checks out the minimum version tag. This" " happens recursively for their dependencies as well.") parser = argparse.ArgumentParser(description=description) # Git sources folder workdir_default = os.path.expanduser("~") + "/osmo-depcheck-work" parser.add_argument("-w", "--workdir", default=workdir_default, help="folder to which the sources will be cloned" " (default: " + workdir_default + ")") # Build switch parser.add_argument("-b", "--build", action="store_true", help="don't only parse the dependencies, but also try" " to build the program") # Build switch parser.add_argument("-o", "--old", action="store_true", help="report dependencies on old releases") # Job count parser.add_argument("-j", "--jobs", type=int, help="parallel build jobs (for make)") # Git URL prefix parser.add_argument("-u", "--git-url-prefix", dest="prefix", default=config.git_url_prefix, help="where to clone the sources from (default: " + config.git_url_prefix + ")") # Projects parser.add_argument("projects_revs", nargs="*", default=config.projects, help="which Osmocom projects to look at" " (e.g. 'osmo-hlr:0.2.1', 'osmo-bts', defaults to" " all projects defined in config.py, default" " revision is 'master')", metavar="project[:revision]") # Workdir must exist ret = parser.parse_args() if not os.path.exists(ret.workdir): print("ERROR: workdir does not exist: " + ret.workdir) sys.exit(1) return ret def workdir_prepare(workdir): """ Delete old binaries and create the subfolders in workdir :param workdir: path to where all data is stored """ # Delete folders with binaries from previous runs for subfolder in ("build", "install"): full = workdir + "/" + subfolder if os.path.exists(full): shutil.rmtree(full) # Create all subfolders for subfolder in ("build", "install", "git"): os.makedirs(workdir + "/" + subfolder, exist_ok=True) def main(): args = parse_arguments() # Iterate over projects cache_git_fetch = [] for project_rev in args.projects_revs: # Split the git revision from the project name project = project_rev rev = "master" if ":" in project_rev: project, rev = project_rev.split(":", 1) # Clone and parse the repositories workdir_prepare(args.workdir) depends = dependencies.generate(args.workdir, args.prefix, cache_git_fetch, project, rev) print("---") dependencies.print_dict(depends) stack = buildstack.generate(depends) print("---") buildstack.print_dict(stack) # Old versions if args.old: print("---") dependencies.print_old(args.workdir, depends) # Build if args.build: print("---") buildstack.build(args.workdir, args.jobs, stack) # Success print("---") print("Success for " + project + ":" + rev + "!") print("---") if __name__ == '__main__': main()