cyrusimap / cyrus-imapd

Cyrus IMAP is an email, contacts and calendar server
http://cyrusimap.org
Other
534 stars 146 forks source link

Compiling 3.6 on debian 11 throws errors #4353

Closed lol-catz closed 1 year ago

lol-catz commented 1 year ago

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

elliefm commented 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.

lol-catz commented 1 year ago

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 fortime_t'... %ld checking strtol-like parse function for time_t'... strtol checking underlying integer type ofsize_t'... unsigned long int checking printf format string for size_t'... %lu checking strtol-like parse function forsize_t'... strtoul checking underlying integer type of off_t'... long int checking printf format string foroff_t'... %ld checking strtol-like parse function for off_t'... strtol checking underlying integer type ofrlim_t'... unsigned long int checking printf format string for rlim_t'... %lu checking strtol-like parse function forrlim_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:

External dependencies: ldap: yes openssl: yes zlib: yes jansson: yes pcre: yes clamav: yes

caringo: no openio: no

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

lol-catz commented 1 year ago

removing the object-store flag allowed me to compile. Thanks!

elliefm commented 1 year ago

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.