READ PLEASE if your port uses BerkeleyDB (db3, db4, db41)

Matthias Andree matthias.andree at gmx.de
Tue Oct 14 04:21:37 PDT 2003


Hi,

as some of you know, I am currently maintaining the db4, db41,
db41-nocrypto and bogofilter ports, among others.

One thing that has bewildered me since I've first used FreeBSD is the
DB specific prodding that is taking place in the ports. We don't install
BerkeleyDB into /usr/local/BerkeleyDB.4.1/lib/libdb.so for instance, but
we're renaming the library (including the ELF SONAME trait) and tossing
it into /usr/local/lib.

One reason why this MIGHT (just guessing!) have happened is that
Sleepycat hasn't made use of the library major version - it's always
been 0, even across incompatible API/ABI changes.

While the current scheme makes sure that a program is always linked
against the right library at run time (libdb41.so.0, for instance), this
scheme effectively prohibits packages from using AC_LIB_LINKFLAGS,
since the canonical name is libdb rather than libdb4 or something.

OTOH, if we reverted to installing in the original SleepyCat directory
layout, this would require ALL FreeBSD ports using some libdb version to
hard code the path (ld -rpath), so the library is found.
/usr/local/BerkeleyDB.X.Y is not in the default library path, not should
it be: if it was, a system could only have one BerkeleyDB version
installed at a time. This is not an option at this time, since it causes
ports conflicts that can be avoided with the current schemes.

Just symlinking things into /usr/local/BerkeleyDB.X.Y might not work
since the library SONAME does not match then -- or can we have a file
/usr/local/BerkeleyDB.4.1/lib/libdb.so when its SONAME is in fact
libdb41.so.1?

Does anyone see a good way out? Suggestions, thoughts are solicited.


For reference, here are the libdb "consumers" and "providers":

* databases/db3:
aswiki-1.0.1_2                  openldap-server-2.0.27_2
cdonkey-0.8.9                   p5-BerkeleyDB-0.23
cfengine-1.6.3_4                p5-Lingua-ZH-TaBE-0.03
crawl-0.3_2                     poedit-1.2.2_1
cyrus-imapd-2.0.17              rbot-0.9.6
cyrus-imapd-2.1.15_1            rdfdb-0.46_1
cyrus-imapd-2.2.1.b_1           ruby-bdb-0.4.8
db3-3.3.11,1                    squidGuard-1.2.0_1
fastresolve-2.10_1              zh-emacs-20.7_2
hotkeys-0.5.7.1                 zh-libtabe-0.2.5_1
isync-0.9.1                     zh-xcin-2.5.3.p2_3
kiltdown-0.8.045_7              zh-xemacs-20.4_1
netatalk-1.6.3,1                zh-xsim-0.3.9.4
nvi-1.81.5_3

* databases/db4:
bogofilter-0.14.5.4     gnucash-1.8.5           pyslsk-1.2.4
cfengine2-2.0.3         gnucash-docs-1.8.1      spamprobe-0.8b
db4-4.0.14_1,1          kpsk-1.0                subversion-0.29.0
dctc-0.84.1             libetpan-0.28           zodb-1.0,1
dctc-gui-0.66_1         py23-bsddb-2.3
dctc-gui-qt-0.0.6       py23-bsddb3-4.1.6

* databases/db41:
db41-4.1.25_1                   kdesdk-3.1.4
db41-nocrypto-4.1.25_1          openldap-server-2.1.22_2
digikam-0.5.1                   openldap-server-2.2.0.a_2
dspam-2.6.3

I've used grep -w $PORTNAME /usr/ports/INDEX to find out, where PORTNAME
is in the set {db3, db4, db41}.

-- 
Matthias Andree

Encrypt your mail: my GnuPG key ID is 0x052E7D95


More information about the freebsd-ports mailing list