[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