Libtool and Support for Shared Libraries (3)

Bron Gondwana brong at fastmail.fm
Thu Jun 7 09:24:40 EDT 2012


On Tue, Jun 5, 2012, at 12:49 PM, Дилян Палаузов wrote:
> Hello,
> 
> now libcyrus and libcyrus_min are compiled once as shared libraries, 
> once under perl/ as non-static convenience libraries,
>    perl/imap/IMAP.so and perl/sieve/managesieve/managesieve.so link 
> statically with the non-static convenience libraries,
>    so that IMAP.so and managesieve.so do need neither libcyrus and 
> libcyrus_min at run time nor the RPATH with those libraries at tun time.

Talking about dependencies across random shit - I've just started trying
to backport the autocreate and autosieve libraries - and it's a right
pain.  They need sieve/libsieve.a linked in to EVERYWHERE that has
mboxlist linked it by the looks of things, which is painful:

https://github.com/brong/cyrus-imapd/tree/autofoo

gcc -fPIC  -g -W -Wall -Wextra   -o imap/arbitron imap/arbitron.o imap/cli_fatal.o imap/mutex_fake.o sieve/libsieve.a imap/libimap.a lib/libcyrus.a lib/libcyrus_min.a  -lsasl2 -lssl -lcrypto  -ldl     -ldb-4.8 -lpcre -lpcreposix -lz -lcom_err  -luuid -ldl     -ldb-4.8 -lpcre -lpcreposix -lz
imap/libimap.a(autosieve.o): In function `autoadd_sieve':
/home/brong/src/cyrus-imapd/imap/autosieve.c:233: undefined reference to `sieve_generate_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:237: undefined reference to `sieve_script_free'
/home/brong/src/cyrus-imapd/imap/autosieve.c:243: undefined reference to `sieve_emit_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:247: undefined reference to `sieve_free_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:248: undefined reference to `sieve_script_free'
/home/brong/src/cyrus-imapd/imap/autosieve.c:255: undefined reference to `sieve_free_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:256: undefined reference to `sieve_script_free'
imap/libimap.a(autosieve.o): In function `is_script_parsable':
/home/brong/src/cyrus-imapd/imap/autosieve.c:437: undefined reference to `sieve_interp_alloc'
/home/brong/src/cyrus-imapd/imap/autosieve.c:443: undefined reference to `sieve_register_redirect'
/home/brong/src/cyrus-imapd/imap/autosieve.c:448: undefined reference to `sieve_register_discard'
/home/brong/src/cyrus-imapd/imap/autosieve.c:453: undefined reference to `sieve_register_reject'
/home/brong/src/cyrus-imapd/imap/autosieve.c:458: undefined reference to `sieve_register_fileinto'
/home/brong/src/cyrus-imapd/imap/autosieve.c:463: undefined reference to `sieve_register_keep'
/home/brong/src/cyrus-imapd/imap/autosieve.c:469: undefined reference to `sieve_register_imapflags'
/home/brong/src/cyrus-imapd/imap/autosieve.c:475: undefined reference to `sieve_register_size'
/home/brong/src/cyrus-imapd/imap/autosieve.c:481: undefined reference to `sieve_register_header'
/home/brong/src/cyrus-imapd/imap/autosieve.c:487: undefined reference to `sieve_register_envelope'
/home/brong/src/cyrus-imapd/imap/autosieve.c:493: undefined reference to `sieve_register_vacation'
/home/brong/src/cyrus-imapd/imap/autosieve.c:499: undefined reference to `sieve_register_notify'
/home/brong/src/cyrus-imapd/imap/autosieve.c:505: undefined reference to `sieve_register_parse_error'
/home/brong/src/cyrus-imapd/imap/autosieve.c:516: undefined reference to `sieve_script_parse'
/home/brong/src/cyrus-imapd/imap/autosieve.c:522: undefined reference to `sieve_script_free'
/home/brong/src/cyrus-imapd/imap/autosieve.c:529: undefined reference to `sieve_interp_free'
collect2: ld returned 1 exit status
make[2]: *** [imap/arbitron] Error 1


I'm thinking maybe what's actually needed here is moving all the
automagic out into a separate library which only gets included by the
three daemons which actually need it (lmtp which already has sieve,
imapd and pop3d)

Any other ideas?

Bron.
-- 
  Bron Gondwana
  brong at fastmail.fm



More information about the Cyrus-devel mailing list