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. > > I hope this is the end with the shared libraries, before they can be > merged. >
Sigh...this still doesn't work. I built your latest dev/libtool branch, and got these errors during the config step config.status: executing perl/annotator/Makefile commands Writing Makefile for Cyrus::Annotator::Daemon config.status: executing perl/imap/Makefile commands Unrecognized argument in LIBS ignored: '../../perl/.libs/libcyrus.a' <--- Unrecognized argument in LIBS ignored: '../../perl/.libs/libcyrus_min.a' <--- Writing Makefile for Cyrus::IMAP config.status: executing perl/sieve/managesieve/Makefile commands Unrecognized argument in LIBS ignored: '../../../perl/.libs/libcyrus.a' <--- Unrecognized argument in LIBS ignored: '../../../perl/.libs/libcyrus_min.a' <--- Writing Makefile for Cyrus::SIEVE::managesieve Make then went on to build, link, and install an IMAP.so and a managesieve.so. However the link step was rm -f blib/arch/auto/Cyrus/IMAP/IMAP.so cc -shared -O2 -g -L/usr/local/lib -fstack-protector IMAP.o -o blib/arch/auto/Cyrus/IMAP/IMAP.so -ldb-4.8 -lsasl2 -lssl -lcrypto -luuid -lz \ note the complete lack of libcyrus.a. So of course the resulting .so's are missing all the symbols they need from libcyrus: gnb@gnb-desktop 2818 nm usr/cyrus/lib/perl/5.10.1/auto/Cyrus/IMAP/IMAP.so ... U imapurl_fromURL U imapurl_toURL U imclient_addcallback U imclient_authenticate U imclient_clearflags U imclient_close U imclient_connect U imclient_getselectinfo U imclient_processoneevent U imclient_send U imclient_servername U imclient_setflags U imclient_starttls ... gnb@gnb-desktop 2820 nm usr/cyrus/lib/perl/5.10.1/auto/Cyrus/SIEVE/managesieve/managesieve.so ... U prot_flush U prot_free U prot_getc U prot_new U prot_printf U prot_setsasl U prot_ungetc U prot_write ... U ucase ... U xmalloc U xstrdup U xstrdupnull This builds but will fail at Perl module load time. I tried using this syntax instead 'LIBS' => [ "-L@top_builddir@/perl/.libs -lcyrus -lcyrus_min ... which changes the warning at configure time to config.status: executing perl/annotator/Makefile commands Checking if your kit is complete... Looks good Writing Makefile for Cyrus::Annotator::Daemon config.status: executing perl/imap/Makefile commands Checking if your kit is complete... Looks good Note (probably harmless): No library found for -lcyrus Note (probably harmless): No library found for -lcyrus_min Writing Makefile for Cyrus::IMAP config.status: executing perl/sieve/managesieve/Makefile commands Checking if your kit is complete... Looks good Note (probably harmless): No library found for -lcyrus Note (probably harmless): No library found for -lcyrus_min but the same end effect. After some experimentation I found that using the LDFROM variable does the trick, like this 'LDFROM' => "\$(OBJECT) @top_builddir@/perl/.libs/libcyrus.a @top_builddir@/perl/.libs/libcyrus_min.a" and all is well. I've pushed this fix to the dev/libtool branch. If it works on your environment, I see no further obstacles to merging. -- Greg.