tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

binary pkg "variants" ? [was: Re: Package split or package options?]



On Thursday, at 10:48, Anthony Mallet wrote:
| On Wednesday, at 20:56, Fredrik Pettai wrote:
| | I noticed the way MacPorts done it and it looks reasonable ok. They name the
| | package "variants" as: pkgname @version+option(s). Perhaps pkgsrc could name
| | those alternative bin pkgs as: pkgname+option(s)-version ?
| 
| I also did that in robotpkg (http://robotpkg.openrobots.org), which is a fork
| of pkgsrc (targetting more specific goals and users and packages, hence the
| fork).
| 
| Binary packages are named according to the following scheme:
|  ${PKGBASE}-${PKGVERSION}~${PKG_OPTIONS}.tgz
| 
| $PKG_OPTIONS are joined with the "+" char.

Hi,

So.. back on this topic!

Here are the 3 patches for pkgtools/pkg_install implementing the aforementioned
naming scheme in robotpkg. As such, the patches are supposed to be harmless,
i.e. pkgsrc/pkg_install will work exactly as before (but of course implement
the necessary bits for the new naming scheme, mostly affecting pkg_admin 
pmatch).

Patches 1 & 2 are just code refactoring, patch 3 implements the real stuff.
There is my git commit message in the patch, hopefully explaining what is
implemented.

http://www.netbsd.org/~tho/0001-pkgtools-pkg_install-Factorize-code-adding-a-version.patch
http://www.netbsd.org/~tho/0002-pkgtools-pkg_install-Do-not-reinvent-pkg_match-for-m.patch
http://www.netbsd.org/~tho/0003-pkgtools-pkg_install-Introduce-the-tags-package-suff.patch

Examples:
pkg_admin pmatch 'x>=1.0~a' x-1.0 ->false
pkg_admin pmatch 'x>=1.0~a' x-1.0~a ->true
pkg_admin pmatch 'x>=1.0~a' x-0.0~a ->false

pkg_admin pmatch 'x~!a' x-1.0~a ->false
pkg_admin pmatch 'x~!a' x-1.0 ->true

pkg_admin pmatch 'x~a+b' x-1.0 ->false
pkg_admin pmatch 'x~a+b' x-1.0~a ->false

pkg_admin pmatch 'x~*' x-1.0 ->true
pkg_admin pmatch 'x~*' x-1.0~a ->true

pkg_admin pmatch 'x~!*' x-1.0 ->true
pkg_admin pmatch 'x~!*' x-1.0~a ->false

etc.

Some remarks:
- The matching algorithm with patterns on boolean variables is in general a
  complex problem (known as SAT, I think), and the one implemented tries to
  keep things simple and intuitve. But it's not been formalized, so there must
  be some caveats ...

- As wiz@ already noted, the use of the not operator `!' might be replaced by a
  `^' to avoid quoting issues, and instead of using pkgname-version~options,
  one could also use pkgname~options-version¹.

I also provide an *untested* example patch for mk/bsd.pkg.mk that changes the
naming of the packages so that the ~options 'tag' is appended to PKGNAME. This
might possibly break pkgsrc in some places, but the patch is mostly here to
give you a concrete idea of the (almost only) change I did in robotpkg.

http://www.netbsd.org/~tho/PKGNAME.diff

Next step would be to review the places where this will break, but a
technical/philosophical discussion about all this must probably take place
beforehand. IIRC there was almost no issue when I did that in robotpkg, but the
code has diverged quite a lot from pkgsrc in some places, so I cannot tell
precisely right now.

So ... what do you think :)

--
Footnotes
¹ In robotpkg I have a shell script converting .tgz bsd binary package into
.deb ones (dpkg), and I had to name the .deb packages according to the second
alternative (i.e. pkgname~otpions-version), because dpkg is much more
restrictive about the name of the packages.


Home | Main Index | Thread Index | Old Index