[HEADS UP] PostgreSQL ports split into -server & -client
Palle Girgensohn
girgen at FreeBSD.org
Mon Jan 31 18:40:00 PST 2005
--On måndag, januari 31, 2005 17.01.26 +0200 Ion-Mihai Tetcu
<itetcu at people.tecnik93.com> wrote:
> On Mon, 31 Jan 2005 15:51:27 +0100
> Palle Girgensohn <girgen at FreeBSD.org> wrote:
>
>>
>>
>> --On måndag, januari 31, 2005 15.38.16 +0200 Ion-Mihai Tetcu
>> <itetcu at people.tecnik93.com> wrote:
>>
>> > On Mon, 31 Jan 2005 07:49:34 +0100
>> > dirk.meyer at dinoex.sub.org (Dirk Meyer) wrote:
>> >
>> >> Craig Boston schrieb:,
>> >>
>> >> > With 8.0 out and and 7.x likely continuing to be used in production
>> >> > environments for quite some time, it would be nice to have a
>> >> > standard way to select which combination of version and
>> >> > server/client to be used (if there isn't one already; I'm about to
>> >> > go look at the new ports).
>> >>
>> >> I used this macro in bind9-dlz/Makefile:
>> >> POSTGRESQL_PORT?= databases/postgresql7
>> >> LIB_DEPENDS= pq.3:${PORTSDIR}/${POSTGRESQL_PORT}
>> >
>> > What about a user settable WITH_PGSQL_VER equivalent of
>> > DEFAULT_PGSQL_VER like in MySQL case ?
>> >
>> >
>> > And: I've set in my mail/dspam's Makefile:
>> > ......
>> > .if defined(WITH_POSTGRESQL)
>> > USE_PGSQL= yes
>> > + WANT_PGSQL_VER= 99
>> > + DEFAULT_PGSQL_VER= 99
>> > + BROKEN_WITH_PGSQL= 74
>> > .......
>> >
>> > and it doesn't complain, just goes on and compiles with the install
>> > headers; having this installed:
>> > # pkg_info -I postg\*
>> > postgresql-7.4.6 The most advanced open-source database available
>> > anywhere postgresql-docs-7.4.6 The PostgreSQL documentation set
>> >
>> > And I don't understand it, it should bark on this else:
>> ># And now we are checking if we can use it
>> > .if exists(${PORTSDIR}/databases/postgresql${PGSQL_VER}-client)
>> > ......
>> > .else
>> > BROKEN= "unknown PostgreSQL version: ${PGSQL_VER}"
>>
>> Well, in this case it is because pre.mk is loaded *before* the variables
>> are set. Hmm, this seems like a bug, but it works, kind of... I would
>> have believed that USE_PGSQL would not work either in this case, but it
>> does. This surprises me a bit.
>>
>> Standard procedure is to set stuff like USE_PGSQL, WITH_PGSQL_VER and
>> BROKEN_WITH_PGSQL etc *before* including <bsd.port(.pre)?.mk>.
>
> Maybe portlint should yes a warning if not ?
>
> From what I can tell, it should work when set in ENV or command line,
> right ? And that would count as " before bsd.* " ? But it doesn't.
>
>> There is a catch-22 when using OPTIONS, though...the OPTIONS stuff is
>> not competent enought, really. You need to include <bsd.port.pre.mk> in
>> order to read stuff from OPTIONS, but then it is too late for setting
>> USE_XXX knobs... :(
>
> I was thinking about splitting the port in 3 slaves - one for each DB
> and a master and this would serve also as a kind of workaround in this
> case.
>
>> But you're right that it does not do exactly what I would expect in this
>> case. I'll look into it tonight,
>
> Thanks.
>
Hi,
I've looked at this a bit more. Here's how it works, more or less:
Setting USE_PGSQL=yes is equivalent to setting
LIB_DEPENDS=pq:${PORTSDIR}/databases/postgresql${PGSQL_VER}-client
where PGSQL_VER is
WANT_PGSQL_VER if set
else
existing installed version of postgresql client (if it is installed)
else
DEFAULT_PGSQL_VER (defaults to conservative 74)
So, if postgresql-7.4.6 is installed, and you set WANT_PGSQL_VER=80, what
will happen?
Well, you will have
LIB_DEPENDS=pq:${PORTSDIR}/databases/postgresql80-client
Anyone just a little more than remotely familiar with the ports system
knows that this will not install a new postgresql version 8.0, since
LIB_DEPENDS will find the libpq.so (from the existing pg-7.4.6
installation), build and link against that lib, and then register a (false)
port dependency to the not installed postgresql80-client port instead.
Maybe this is not optimal, but this is how the ports collection works. I've
designed this so that the USE_PGSQL=yes normally is all you need in a port.
Unless you specify WANT_PGSQL_VER or BROKEN_WITH_PGSQL, it will pick up the
installed version of postgresql and add dependencies for that version, or
install the default version if none is installed. It will not work
perfectly when you have one version installed and the port wants another.
It will keep your version, which is the most important part. It might fail
to warn that about the problem, and this is an issue I have to look into, I
guess.
I have shamelessly snatched much of mysql's entry in bsd.ports.mk for the
USE_PGSQL knob. Using a WITH_PGSQL_VER is something I did not adopt,
though, partly because it is rarely needed with postgresql (most stuff
works on all versions) but mostly because WITH_ knobs should not go inte
bsd.ports.mk, IMO, they should be reserved to use in ports. There a big
difference between the versioniitis of mysql, a database engine has lacked
so many important features in very recent versions, and postgresql, where
most important features have been there for a long time. With mysql, the
need to track versions and pin down which versions work with a certain port
is so much greater.
In short: If you want a certain version of postgresql, just install it and
you're set, everything should work fine from that point. ports only need a
USE_PGSQL=yes.
/Palle
More information about the freebsd-ports
mailing list