mirror of https://gerrit.osmocom.org/osmo-ci
121 lines
4.0 KiB
Python
Executable File
121 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright 2018 sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
|
|
|
|
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()
|