Closed lol-catz closed 1 year ago
Interesting. The offending lines are all in code sections gated behind #if defined ENABLE_OBJECTSTORE
, so I guess you've configured the build with --enable-objectstore
. You'll need to also have one of --with-caringo
or --with-openio
to choose a backend, which are you using?
configure spits out a lot of information at the end of its run, it would be useful if the report included that.
If you didn't intend to use object storage, you could just reconfigure without --enable-objectstore
, and that should resolve the issue.
If you do intend to use object storage, we'd appreciate pull requests with whatever fixes you need to get it working. None of the regular Cyrus contributors use this feature, so it's a bit neglected. You might also want to ask on the mailing list, in case the people who added the object storage integration are paying attention there.
Thank you for this info! You are correct in that i did enable object-store, and I also left out the caringo / openid backend, as my intention was to see if i could get it connected it to an erasure coded ceph cluster down the road. I must admit i was getting a little ambitious loading up all these compile time features, but i decided I'm going for a "batteries included" build so i can tinker around and get a feel for what state this whole project is in.
Regarding my configure, I pasted it below. btw I am also having a bit of trouble finding / placing the required libraries in the correct locations for these 3 features:
wslay: no
chardet: no
cld2: no
please let me know if you know any hints for getting these 3 features enabled on debian 11.
I also noticed "shapelib" and "comm_err" dont show anything in the yes/no column.
here is my configure and output:
root@dms1:~/build/cyrus-imapd-3.6.0# ./configure CFLAGS="-W -Wno-unused-parameter -g -O0 -Wall -Wextra -Werror -fPIC" --enable-http --enable-calalarmd --enable-jmap --enable-murder --enable-replication --with-openssl=yes --enable-nntp --enable-unit-tests --enable-coverage --enable-autocreate --enable-idled --prefix=/usr/cyrus --enable-xapian --enable-backup --enable-cyrusdb-benchmarks --enable-srs --enable-objectstore --enable-afs --with-mysql --with-ldap --with-krbimpl=mit
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether UID '0' is supported by ustar format... yes
checking whether GID '0' is supported by ustar format... yes
checking how to create a ustar tar archive... gnutar
checking whether to enable maintainer-specific portions of Makefiles... no
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking whether ln -s works... yes
checking whether make sets $(MAKE)... (cached) yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define EXTENSIONS... yes
checking for library containing strerror... none required
checking for gawk... (cached) gawk
checking for long file names... yes
checking for inline... inline
checking whether the -Werror option is usable... yes
checking for simple visibility declarations... yes
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking size of int... 4
checking size of long... 8
checking size of size_t... 8
checking size of off_t... 8
checking size of time_t... 8
checking size of long long int... 8
checking size of unsigned long long int... 8
checking whether byte ordering is bigendian... no
checking alignment of uint32_t... 4
checking for runpath switch... -Wl,-rpath,
checking for unistd.h... (cached) yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking stdarg.h usability... yes
checking stdarg.h presence... yes
checking for stdarg.h... yes
checking for memmove... no
checking for strcasecmp... no
checking for ftruncate... yes
checking for strerror... yes
checking for posix_fadvise... yes
checking for strsep... yes
checking for memmem... yes
checking for memrchr... yes
checking for strlcat... no
checking for strlcpy... no
checking for strnchr... no
checking for getgrouplist... yes
checking for fmemopen... yes
checking for pselect... yes
checking for futimens... yes
checking for futimes... yes
checking for getline... yes
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking for stdlib.h... (cached) yes
checking for getpassphrase... no
checking for connect... yes
checking for res_search... no
checking for dn_expand... no
checking for dns_lookup... no
checking for getaddrinfo... yes
checking for gai_strerror... yes
checking for getnameinfo... yes
checking whether you have ss_family in struct sockaddr_storage... no
checking whether you have sa_len in struct sockaddr... no
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking whether time.h and sys/time.h may both be included... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for struct tm.tm_zone... yes
checking for timegm... yes
checking for vprintf... no
checking underlying integer type of time_t'... long int checking printf format string for
time_t'... %ld
checking strtol-like parse function for time_t'... strtol checking underlying integer type of
size_t'... unsigned long int
checking printf format string for size_t'... %lu checking strtol-like parse function for
size_t'... strtoul
checking underlying integer type of off_t'... long int checking printf format string for
off_t'... %ld
checking strtol-like parse function for off_t'... strtol checking underlying integer type of
rlim_t'... unsigned long int
checking printf format string for rlim_t'... %lu checking strtol-like parse function for
rlim_t'... strtoul
checking whether to use MySQL... checking for mysql_config... /usr/bin/mysql_config
yes
checking sqlite3.h usability... yes
checking sqlite3.h presence... yes
checking for sqlite3.h... yes
checking whether to use Caringo... no
checking whether to use OpenIO... no
checking whether to enable object store... dummy
checking for rsync... /usr/bin/rsync
checking for xapian-config-1.5... no
checking for xapian-config... /usr/local/bin/xapian-config
checking /usr/local/bin/xapian-config works... yes
checking whether g++ supports C++11 features by default... yes
checking for Xapian cjk word tokenization... no
configure: Your Xapian does not support CJK word tokenization. CJK ngram tokenization will be used instead.
checking for getopt_long... yes
checking for bison... bison -y
checking for flex... flex
checking lex output file root... lex.yy
checking lex library... -lfl
checking whether yytext is a pointer... yes
checking pcreposix.h usability... yes
checking pcreposix.h presence... yes
checking for pcreposix.h... yes
checking for utf8 enabled pcre... yes
checking whether to use SRS... yes
checking srs2.h usability... yes
checking srs2.h presence... yes
checking for srs2.h... yes
checking for srs_forward in -lsrs2... yes
checking whether the C compiler supports -Wno-sign-compare... yes
checking for strerror... (cached) yes
checking sys/resource.h usability... yes
checking sys/resource.h presence... yes
checking for sys/resource.h... yes
checking for setrlimit... yes
checking for getrlimit... yes
checking for daemon... yes
checking for setsid... yes
checking for shutdown... yes
checking for setproctitle... no
checking for setproctitle in -lutil... no
checking sys/pstat.h usability... no
checking sys/pstat.h presence... no
checking for sys/pstat.h... no
checking sys/sysnews.h usability... no
checking sys/sysnews.h presence... no
checking for sys/sysnews.h... no
checking for PS_STRINGS... no
checking for SCO... no
checking for setproctitle usability... yes
checking nonblocking method... ioctl
checking timezone GMT offset method... gmtime
checking for shared mmap... yes
checking for fcntl... yes
checking for library containing fdatasync... none required
checking for library containing clock_gettime... none required
checking for uuid_generate in -luuid... yes
checking for sigvec... no
checking for sigvec in -lBSD... no
checking for sigvec in -lucb... no
checking if AFS libraries need sigvec... yes
configure: WARNING: Can not find a sigvec for AFS libraries which seem to need one.
checking for ldap_initialize in -lldap... yes
checking for libclamav... yes
checking for res_search in -lresolv... no
checking krb.h usability... no
checking krb.h presence... no
checking for krb.h... no
checking for openssl... yes
checking openssl/evp.h usability... yes
checking openssl/evp.h presence... yes
checking for openssl/evp.h... yes
checking for RSAPublicEncrypt in -lrsaref... no
checking for BIO_accept in -lcrypto... yes
checking for SSL_CTX_new in -lssl... yes
checking for ssl... yes
checking for SSL_CTX_set_alpn_select_cb in -lssl... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for deflate in -lz... yes
checking for deflatePending in -lz... yes
checking for zlib... yes
checking for ZInitialize in -lzephyr... no
checking for libcap... no
checking for jansson >= 2.10... yes
checking for icu-i18n >= 55 icu-uc >= 55... yes
checking for libzeroskip... no
checking for chardet >= 1.0.5... no
configure: JMAP will not have character set detection support. Consider installing chardet >= 1.0.5
checking for cld2... no
checking sys/sockio.h usability... no
checking sys/sockio.h presence... no
checking for sys/sockio.h... no
checking for libxml-2.0... yes
checking for xmlFirstElementChild in -lxml2... yes
checking for xmlBufferDetach in -lxml2... yes
checking for libical >= 3.0.0... yes
checking for icalproperty_new_color in -lical... yes
checking for icalrecurrencetype_rscale_is_supported in -lical... yes
checking for icalcomponent_clone in -lical... no
checking for ical_set_invalid_rrule_handling_setting in -lical... no
checking for icalcomponent_get_component_name in -lical... no
checking for libnghttp2 >= 1.34.0... yes
checking for libwslay >= 1.1.1... no
configure: httpd will not have support for WebSockets. Consider installing libwslay
checking for libbrotlienc... yes
checking for libzstd >= 1.4.0... yes
checking for shapelib >= 1.3.0... no
configure: tzdist will not have geolocation support. Consider installing shapelib
checking for com_err in -lcom_err... yes
checking et/com_err.h usability... yes
checking et/com_err.h presence... yes
checking for et/com_err.h... yes
checking for compile_et... /usr/bin/compile_et
checking for modern syslog... yes
checking which syslog facility to use... LOG_LOCAL6
checking for getdtablesize... yes
checking to use old sieve service name... no
checking for crypt... no
checking for crypt in -lcrypt... yes
checking gssapi.h usability... yes
checking gssapi.h presence... yes
checking for gssapi.h... yes
checking gssapi/gssapi_ext.h usability... yes
checking gssapi/gssapi_ext.h presence... yes
checking for gssapi/gssapi_ext.h... yes
checking for res_search in -lresolv... (cached) no
checking for gss_unwrap in -lgssapi... no
checking for krb5int_getspecific in -lkrb5support... yes
checking for gss_unwrap in -lgssapi_krb5... yes
checking GSSAPI... with implementation mit
checking for res_search in -lresolv... (cached) no
checking for gsskrb5_register_acceptor_identity... no
checking for gss_decapsulate_token... yes
checking for gss_encapsulate_token... yes
checking for gss_oid_equal... yes
checking for gss_get_name_attribute... yes
checking for SPNEGO support in GSSAPI libraries... yes
checking sasl/sasl.h usability... yes
checking sasl/sasl.h presence... yes
checking for sasl/sasl.h... yes
checking sasl/saslutil.h usability... yes
checking sasl/saslutil.h presence... yes
checking for sasl/saslutil.h... yes
checking for prop_get in -lsasl2... yes
checking for sasl_checkapop in -lsasl2... yes
checking for perl... perl
checking for perl cccdlflags needed on "linux-gnu"... -fPIC
checking size of long... (cached) 8
checking what directory libraries are found in... lib64
checking for request_init in -lwrap... no
checking libwrap support... no
checking for CU_initialize_registry in -lcunit... yes
checking CUnit/CUnit.h usability... yes
checking CUnit/CUnit.h presence... yes
checking for CUnit/CUnit.h... yes
checking CUnit/Basic.h usability... yes
checking CUnit/Basic.h presence... yes
checking for CUnit/Basic.h... yes
checking for CU_SetUpFunc... yes
checking valgrind/valgrind.h usability... no
checking valgrind/valgrind.h presence... no
checking for valgrind/valgrind.h... no
checking for function nesting... yes
checking for optimisation support... yes
checking for sphinx-build... /usr/bin/sphinx-build
checking for perl module Pod::POM::View::Restructured... ok
checking python2 module: git... no
checking python3 module: git... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating perl/sieve/managesieve/MANIFEST
config.status: creating perl/imap/MANIFEST
config.status: creating perl/annotator/MANIFEST
config.status: creating libcyrus_imap.pc
config.status: creating libcyrus_min.pc
config.status: creating libcyrus.pc
config.status: creating libcyrus_sieve.pc
config.status: creating Makefile
config.status: creating perl/annotator/Makefile.PL
config.status: creating perl/imap/Makefile.PL
config.status: creating perl/sieve/managesieve/Makefile.PL
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing perl/annotator/Makefile commands
Generating a Unix-style Makefile
Writing Makefile for Cyrus::Annotator::Daemon
Writing MYMETA.yml and MYMETA.json
config.status: executing perl/imap/Makefile commands
Warning (mostly harmless): No library found for -lgcov
Generating a Unix-style Makefile
Writing Makefile for Cyrus::IMAP
Writing MYMETA.yml and MYMETA.json
config.status: executing perl/sieve/managesieve/Makefile commands
Generating a Unix-style Makefile
Writing Makefile for Cyrus::SIEVE::managesieve
Writing MYMETA.yml and MYMETA.json
Cyrus Server configured components
gssapi: yes autocreate: yes idled: yes httpd: yes kerberos V4: no murder: yes nntpd: yes replication: yes sieve: yes srs: yes calalarmd: yes jmap: yes objectstore: dummy backup: yes com_err:
nghttp2: yes wslay: no brotli: yes zstd: yes xml2: yes ical: yes shapelib: icu4c: yes chardet: no cld2: no
Database support: mysql: yes postgresql: no sqlite: yes zeroskip: no
Search engine: squat: yes xapian: yes xapian_cjk_tokens: ngrams
Documentation dependencies: sphinx-build: /usr/bin/sphinx-build Pod::POM::View::Restructured: yes GitPython: yes
Installation directories: prefix: /usr/cyrus sysconfdir: /etc
Build info: shared: yes static: no cflags: -W -Wno-unused-parameter -g -O0 -Wall -Wextra -Werror -fPIC cxxflags: -g -O2 libs: -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lkrb5support -lsrs2 -L/usr/lib/x86_64-linux-gnu/ -lmariadb -lpcre -lpcreposix -lsrs2 -lz -lxml2 -lical -licalss -licalvcal -lsqlite3 ldflags: unit tests (cunit): yes
removing the object-store flag allowed me to compile. Thanks!
wslay: no chardet: no cld2: no
The Cyrus build uses pkg-config to find most of its dependencies, including these three. If you don't have pkg-config, you can get it from apt. If you do have pkg-config and these dependencies are still not being found, it means the packages you installed either a) didn't install "package-name.pc" files at all, or b) installed them in some location that pkg-config doesn't know to look in.
We usually recommend using the https://github.com/cyrusimap/cyruslibs/ wrapper to get Cyrus's dependencies when building Cyrus from source. Some of them are fine to get from apt instead, but sometimes the version in apt is older than what Cyrus needs.
If you use this wrapper, and have it build and install these packages to /usr/local/cyruslibs
, then you can tell pkg-config about it by setting PKG_CONFIG_PATH=/usr/local/cyruslibs/lib/pkgconfig
in your environment. And then configure will be able to find them.
make make all-recursive make[1]: Entering directory '/root/build/cyrus-imapd-3.6.0' Making all in . make[2]: Entering directory '/root/build/cyrus-imapd-3.6.0' /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./lib -I. -I./lib -DLIBEXEC_DIR=\"/usr/cyrus/libexec\" -DSBIN_DIR=\"/usr/cyrus/sbin\" -DSYSCONF_DIR=\"/etc\" -DHAVE_CONFIG_H -I/usr/include/libxml2 -I/usr/include/mariadb -I/usr/include/mariadb/mysql -fPIC --coverage -fvisibility=hidden -W -Wno-unused-parameter -g -O0 -Wall -Wextra -Werror -fPIC -MT imap/libcyrus_imap_la-mailbox.lo -MD -MP -MF imap/.deps/libcyrus_imap_la-mailbox.Tpo -c -o imap/libcyrus_imap_la-mailbox.lo
test -f 'imap/mailbox.c' || echo './'
imap/mailbox.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./lib -I. -I./lib -DLIBEXEC_DIR=\"/usr/cyrus/libexec\" -DSBIN_DIR=\"/usr/cyrus/sbin\" -DSYSCONF_DIR=\"/etc\" -DHAVE_CONFIG_H -I/usr/include/libxml2 -I/usr/include/mariadb -I/usr/include/mariadb/mysql -fPIC --coverage -fvisibility=hidden -W -Wno-unused-parameter -g -O0 -Wall -Wextra -Werror -fPIC -MT imap/libcyrus_imap_la-mailbox.lo -MD -MP -MF imap/.deps/libcyrus_imap_la-mailbox.Tpo -c imap/mailbox.c -fPIC -DPIC -o imap/.libs/libcyrus_imap_la-mailbox.o imap/mailbox.c: In function ‘mailbox_record_cleanup’: imap/mailbox.c:4634:20: error: ‘spoolfname’ undeclared (first use in this function) 4634 | unlink(spoolfname); | ^~~~~~ imap/mailbox.c:4634:20: note: each undeclared identifier is reported only once for each function it appears in imap/mailbox.c: In function ‘mailbox_copy_files’: imap/mailbox.c:6362:24: error: ‘struct mailbox’ has no member named ‘name’ 6362 | new_mailbox.name = (char) newname; | ^ imap/mailbox.c:6363:24: error: ‘struct mailbox’ has no member named ‘part’ 6363 | new_mailbox.part = (char) config_defpartition ; | ^ make[2]: [Makefile:5530: imap/libcyrus_imap_la-mailbox.lo] Error 1 make[2]: Leaving directory '/root/build/cyrus-imapd-3.6.0' make[1]: [Makefile:7118: all-recursive] Error 1 make[1]: Leaving directory '/root/build/cyrus-imapd-3.6.0' make: *** [Makefile:3288: all] Error 2