cmds.projects.BaseCmdPkgRelations: --syntax debian

Add support for --syntax to BaseCmdPkgRelations.pkg_relations(), and
default to 'semver', i.e. the current state of affairs. If that's
changed to 'debian', relations declared in project.conf as

  pkg.requires.os.devel = jw-pkg-devel > 1.2.3

will be output as

  jw-pkg-devel >> 1.2.3

which is what Debian expects.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-03-15 10:13:26 +01:00
commit 7046983d7c
2 changed files with 19 additions and 3 deletions

View file

@ -48,7 +48,7 @@ PCKG_TAR ?= $(RPM_PROJECT)-$(RPM_VERSION).tar.gz
ifeq ($(PKG_FORMAT),debian) ifeq ($(PKG_FORMAT),debian)
# too bad: debian Requires: somepkg = 1.2.3 isn't satisfied by somepkg-1.2.3-5 # too bad: debian Requires: somepkg = 1.2.3 isn't satisfied by somepkg-1.2.3-5
PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS = --dont-strip-revision PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS = --syntax debian
PCKG_RPM_RUN_I386 ?= $(RPM_PROJECT)-run_$(RPM_VERSION)_$(RPM_ARCH).deb PCKG_RPM_RUN_I386 ?= $(RPM_PROJECT)-run_$(RPM_VERSION)_$(RPM_ARCH).deb
ifeq ($(CREATE_DEVEL),true) ifeq ($(CREATE_DEVEL),true)
PCKG_RPM_DEVEL_I386 ?= $(RPM_PROJECT)-devel_$(RPM_VERSION)_$(RPM_ARCH).deb PCKG_RPM_DEVEL_I386 ?= $(RPM_PROJECT)-devel_$(RPM_VERSION)_$(RPM_ARCH).deb

View file

@ -19,6 +19,9 @@ class BaseCmdPkgRelations(Cmd):
ignore = args.ignore.split(',') ignore = args.ignore.split(',')
flavours = args.flavour.split(',') flavours = args.flavour.split(',')
expand_semver_revision_range = args.expand_semver_revision_range
if args.syntax == 'debian':
expand_semver_revision_range = True
log(DEBUG, f'flavour="{args.flavour}", subsecs="{", ".join(subsecs)}", "ignore="{args.ignore}"') log(DEBUG, f'flavour="{args.flavour}", subsecs="{", ".join(subsecs)}", "ignore="{args.ignore}"')
version_pattern = re.compile("[0-9-.]*") version_pattern = re.compile("[0-9-.]*")
@ -69,11 +72,11 @@ class BaseCmdPkgRelations(Cmd):
pass pass
else: else:
raise Exception("Unknown version specifier in " + spec) raise Exception("Unknown version specifier in " + spec)
if not args.expand_semver_revision_range: if not expand_semver_revision_range:
expanded_deps = [dep] expanded_deps = [dep]
else: else:
expanded_deps = [] expanded_deps = []
if args.expand_semver_revision_range and len(dep) == 3: if expand_semver_revision_range and len(dep) == 3:
semver = re.split(r'[.-]', version) semver = re.split(r'[.-]', version)
if len(semver) != 4: if len(semver) != 4:
expanded_deps = [dep] expanded_deps = [dep]
@ -92,6 +95,17 @@ class BaseCmdPkgRelations(Cmd):
case _: case _:
raise NotImplementedError(f'Expanding SemVer range "{dep[0]} {dep[1]} {dep[3]}" is not yet implemented') raise NotImplementedError(f'Expanding SemVer range "{dep[0]} {dep[1]} {dep[3]}" is not yet implemented')
for expanded_dep in expanded_deps: for expanded_dep in expanded_deps:
match args.syntax:
case 'semver':
pass
case 'debian':
match expanded_dep[1]:
case '<':
expanded_dep[1] = '<<'
case '>':
expanded_dep[1] = '>>'
case '_':
raise NotImplementedError(f'Unknown dependency syntax "{args.syntax}" for dependency "{dep[0]} {dep[1]} {dep[3]}"')
dep_str = ' '.join(expanded_dep) dep_str = ' '.join(expanded_dep)
if not dep_str in r: if not dep_str in r:
log(DEBUG, f'Appending dependency "{dep_str}"') log(DEBUG, f'Appending dependency "{dep_str}"')
@ -119,6 +133,8 @@ class BaseCmdPkgRelations(Cmd):
default=False, help='Always treat VERSION macro as VERSION-REVISION') default=False, help='Always treat VERSION macro as VERSION-REVISION')
parser.add_argument('--expand-semver-revision-range', action='store_true', parser.add_argument('--expand-semver-revision-range', action='store_true',
default=False, help='Always treat =VERSION macro as >= VERSION-0 and < (VERSION+1)-0') default=False, help='Always treat =VERSION macro as >= VERSION-0 and < (VERSION+1)-0')
parser.add_argument('--syntax', choices=['semver', 'debian'],
default='semver', help='Output syntax')
parser.add_argument('--recursive', action='store_true', parser.add_argument('--recursive', action='store_true',
default=False, help='Find dependencies recursively') default=False, help='Find dependencies recursively')
parser.add_argument('--dont-expand-version-macros', action='store_true', parser.add_argument('--dont-expand-version-macros', action='store_true',