doc, make, scripts: Add support for [pkg.conflicts.xxx]

Since the packaging machinery is pretty complicated, the information about
conflicting packages had to be passed through many APIs. The last commit
contained a patch which is left in the tree to have it in one file, it actually
is identical to this commit's diff, though. Git would save me that quirk.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2017-06-26 10:34:22 +00:00
commit c42e386c76
7 changed files with 100 additions and 54 deletions

View file

@ -68,7 +68,7 @@ def htdocs_dir(name):
return r
return None
def pkg_requires_os_cascade():
def os_cascade():
os = get_os()
name = re.sub('-.*', '', os)
# e.g. os, linux, suse, suse-tumbleweed
@ -202,6 +202,55 @@ def get_modules_from_project_txt(names, section, keys, add_self, scope,
r.append(m)
return r
def pkg_relations(rel_type, args_):
parser = argparse.ArgumentParser(description='pkg-' + rel_type)
# TODO: implement Vendor evaluation
parser.add_argument('--vendor', '-V', nargs='?', default='jw', help='Package Vendor')
parser.add_argument('flavour', help='Flavour')
parser.add_argument('module', nargs='*', help='Modules')
parser.add_argument('--dont-strip-revision', action='store_true',
default=False, help='Always treat VERSION macro as VERSION-REVISION')
parser.add_argument('--dont-expand-version-macros', action='store_true',
default=False, help='Don\'t expand VERSION and REVISION macros')
args=parser.parse_args(args_)
debug('flavour = ', args.flavour, ', vendor = ', args.vendor)
version_pattern=re.compile("[0-9-.]*")
subsecs = os_cascade()
subsecs.append('jw')
debug("subsecs = ", subsecs)
r = []
for s in subsecs:
for m in args.module:
value = get_value(m, 'pkg.' + rel_type + '.' + s, args.flavour)
if not value:
continue
deps = value.split(',')
for spec in deps:
dep = re.split('([=><]+)', spec)
for i, item in enumerate(dep):
dep[i] = item.strip()
if len(dep) == 3:
dep_project = re.sub(r'-devel$|-run$', '', dep[0])
if args.dont_expand_version_macros and dep_project in args.module:
version = dep[2]
else:
version = get_value(dep_project, 'version', '')
if dep[2] == 'VERSION':
if args.dont_strip_revision:
dep[2] = version
else:
dep[2] = version.split('-')[0]
elif dep[2] == 'VERSION-REVISION':
dep[2] = version
elif version_pattern.match(dep[2]):
# dep[2] = dep[2]
pass
else:
raise Exception("Unknown version specifier in " + spec)
r.append(' '.join(dep))
print(', '.join(r))
def get_libname(names):
vals = get_modules_from_project_txt(names, 'build', 'libname',
scope = 1, add_self=False, names_only=True)
@ -266,6 +315,7 @@ def cmd_test(args_):
args=parser.parse_args(args_)
print("blah = " + args.blah)
# TODO: seems at least partly redundant to cmd_pkg_requires / pkg_relations
def cmd_requires_pkg(args_):
parser = argparse.ArgumentParser(description='requires-pkg')
parser.add_argument('module', nargs='*', help='Modules')
@ -275,7 +325,7 @@ def cmd_requires_pkg(args_):
debug("flavours = " + args.flavours)
deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', flavours,
scope = 2, add_self=True, names_only=True)
subsecs = pkg_requires_os_cascade()
subsecs = os_cascade()
debug("subsecs = ", subsecs)
requires = []
for s in subsecs:
@ -290,7 +340,7 @@ def cmd_requires_pkg(args_):
print(r[1:])
def cmd_os_cascade(args_):
print(' '.join(pkg_requires_os_cascade()))
print(' '.join(os_cascade()))
def cmd_ldlibpath(args_):
parser = argparse.ArgumentParser(description='ldlibpath')
@ -349,6 +399,7 @@ def cmd_path(args_):
r = r + ':' + proj_dir(m) + '/bin'
print(r[1:])
# TODO: seems at least partly redundant to cmd_pkg_requires / pkg_relations
def cmd_prereq(args_):
parser = argparse.ArgumentParser(description='path')
parser.add_argument('flavour', help='Flavour')
@ -359,53 +410,10 @@ def cmd_prereq(args_):
print(' '.join(deps))
def cmd_pkg_requires(args_):
parser = argparse.ArgumentParser(description='pkg-requires')
# TODO: implement Vendor evaluation
return pkg_relations("requires", args_)
parser.add_argument('--vendor', '-V', nargs='?', default='jw', help='Package Vendor')
parser.add_argument('flavour', help='Flavour')
parser.add_argument('module', nargs='*', help='Modules')
parser.add_argument('--dont-strip-revision', action='store_true',
default=False, help='Always treat VERSION macro as VERSION-REVISION')
parser.add_argument('--dont-expand-version-macros', action='store_true',
default=False, help='Don\'t expand VERSION and REVISION macros')
args=parser.parse_args(args_)
debug('flavour = ', args.flavour, ', vendor = ', args.vendor)
version_pattern=re.compile("[0-9-.]*")
subsecs = pkg_requires_os_cascade()
subsecs.append('jw')
debug("subsecs = ", subsecs)
r = []
for s in subsecs:
for m in args.module:
value = get_value(m, 'pkg.requires.' + s, args.flavour)
if not value:
continue
deps = value.split(',')
for spec in deps:
dep = re.split('([=><]+)', spec)
for i, item in enumerate(dep):
dep[i] = item.strip()
if len(dep) == 3:
dep_project = re.sub(r'-devel$|-run$', '', dep[0])
if args.dont_expand_version_macros and dep_project in args.module:
version = dep[2]
else:
version = get_value(dep_project, 'version', '')
if dep[2] == 'VERSION':
if args.dont_strip_revision:
dep[2] = version
else:
dep[2] = version.split('-')[0]
elif dep[2] == 'VERSION-REVISION':
dep[2] = version
elif version_pattern.match(dep[2]):
# dep[2] = dep[2]
pass
else:
raise Exception("Unknown version specifier in " + spec)
r.append(' '.join(dep))
print(', '.join(r))
def cmd_pkg_conflicts(args_):
return pkg_relations("conflicts", args_)
def cmd_proj_dir(args_):
parser = argparse.ArgumentParser(description='proj-dir')