I've finally finished cleaning the DEPENDS lines to a state I like.

A new feature was introduced, but it's rather esoteric, and VERY special case,
so I'd advise against using it for very good reasons, it's a new ports variable
called PKGSPEC.


Here is what happened before PKGSPEC:
------------------------------------
When you write a dependency line such as:
BUILD_DEPENDS = devel/bison
there is just a directory name, no pkgspec part, so the pkgspec part is
automatically generated.

Up until a week ago, it was ALWAYS stem-*, e.g., the above was equivalent to
BUILD_DEPENDS = bison-*:devel/bison

This is almost always appropriate, and there is very little case for changing
it for almost any port.

HOWEVER, a few ports can coexist as various versions. For instance, you can
install autoconf-2.13 alongside autoconf-2.59.

So, what do you do when you need a given autoconf version ?
Turns out the following would be incorrect:
BUILD_DEPENDS = devel/autoconf/2.59
if no autoconf is installed, then this would install autoconf-2.59.
However, this is really
BUILD_DEPENDS = autoconf-*:devel/autoconf/2.59
any autoconf would do. So if autoconf-2.13 was already there, then the
port would happily continue building, and usually fail in atrocious ways.
-------------------------

PKGSPEC is something I can now put in the autoconf/2.59 port proper, 
I would write 
PKGSPEC = autoconf-2.59
and suddenly, my BUILD_DEPENDS becomes correct:
BUILD_DEPENDS = devel/autoconf/2.59
will be enough to only match autoconf-2.59.


This is very powerful: I can now tweak all default dependencies on a port
by just adding a line to that port.   This is also quite dangerous and
very sneaky: when you see a DEPEND like the following, you have no obvious
way of knowing whether it's autoconf-* or autoconf-2.59.

(okay, if you build it, you'll find out soon enough).


So it should be used very seldom. For the few cases that require it, though,
it simplifies things a great deal.

I did "fix things" for:
devel/autoconf/*
devel/automake/*
devel/libsigc++
databases/db/*
databases/db/*
security/gnupg
net/libdnet/*

besides simplifying things, this did catch at least ten dependency bugs,
where a port would not be specific enough in what it wanted.


I see java, tomcat, tcl, tk, python  as other potential candidates for
PKGSPEC, but I don't know that software well enough to decide, maintainers
will have to think about it.  (I know that jeremy already decided to use it
for ruby).

Maybe notification-daemon-* ? I don't know.


But most ports out there shouldn't need it.


How do the new dependency features interact with pkgnames bumps and revisions ?

Well, actually, they don't... everything that matters for register-plist is
the final product, where all dependencies are rewritten as @depends and
@wantlib lines.

So if you end up with a pkgspec that says db->=4,<5
it doesn't matter if it comes from a default or an explicit pkgspec in the
dependency.

HOWEVER, if you *do* change a PKGSPEC on an existing port, *every* depending
port may pull the new default spec, and thus require a bump. So you need
to check things very carefully.

Like I said, PKGSPEC is not a "simple" feature, nor a feature that should
be used in most cases.

Reply via email to