Subject: Dependency pattern syntax
To: None <tech-pkg@netbsd.org>
From: None <joerg@britannica.bec.de>
List: tech-pkg
Date: 05/24/2006 23:47:47
Hi all,
I got a bit bored the last few days and started to write some code for a
better^Wdifferent bulk build framework. During that I stumpled across
the need to implement the pattern matches used by pkg_add and felt a
sudden pain running down my spine.
We currently have:
(a) fnmatch syntax (php-4.4.*, zip-[0-9]*)
(b) csh like patterns (foo-1.2{,nb*} being popular, but also e.g.
{ghostscript,ghostscript-afpl}>=6.01)
(c) Dewey patterns (pkg>=1.4, pkg>=1.4<2)
Frankly, this is a total mess to implement and esp. the former too
provide too much flexibility for this purpose. I propse the follow
grammar instead, which is a slight extension of the current Dewey
pattern:
PATTERN := EXPR |
EXPR '|' PATTERN ;
EXPR := pkgname |
pkgname COMPARISION ;
COMPARISION := op version |
op version COMPARISION ;
version having the same form as before.
would be treated as infinite nb version (e.g. larger than all others).
op is one of ">", ">=", "<", "<=", "==", "!=" and "~". The "~" means:
begins with the same version number.
pkgname is ${PKGNAME} stripped before the last "-" (aka without the
version number).
When multiple packages match an alternative pattern, the left EXPR wins.
To illustrate this a translation of the patterns above:
php-4.4.* => php~4.4
zip-[0-9]* => zip
foo-1.2{,nb*} => foo~1.2nb
(note: missing nb part treated as 0, foo-1.2.1 would *not* match)
{ghostscript,ghostscript-afpl}>=6.01
=> ghostscript>=6.01|ghostscript-afpl>=6.01
pkg>=1.4
pkg>=1.4<2
I think all uses of (a) and (b) in the tree can be converted, but I
haven't checked the list yet. What do you think?
Joerg