commit ee29a24ff8954dcc9a9393f0a1b8db460b005887 Author: Jacob Welsh AuthorDate: Thu Nov 17 20:38:16 2022 +0000 Commit: Jacob Welsh CommitDate: Thu Nov 17 20:38:16 2022 +0000 Type: new structure add plain GNU Make build system, with minor required code changes. Eliminate the generated dovecot-version.h for VCS version string embedding. Remove dubiously helpful runtime referral to the example config dir. Fix duplicate global definition of doveadm_settings in test-doveadm-util.c by moving i_strccdascmp from doveadm-util to strfuncs.h and its own C file, reducing spurious link dependencies. Write out previously generated files lib-dict-backend/dict-drivers-register.c and lib-sql/sql-drivers-register.c, using ifdefs on config.h macros to switch the optional components. Define single TOP_SRC_DIR macro, replacing several used by test programs for finding data in the build tree: DICT_SRC_DIR, TEST_STOPWORDS_DIR, TEST_BIN_DIR, UDHRDIR. Corrections to the new static module loading code: - Include necessary headers in module-dir-load-*.c - Fix function pointer type syntax in module_load_static signature - Declare & document module_load_static and module_parse_names in module-dir.h Use explicit paths for unusual header includes to prevent excessive growth of -I flags (which are now global). Fix duplicate global definitions of stats_metrics and stats_startup_time by moving them to a stats-common.c to mirror their declaration in stats-common.h. http://fixpoint.welshcomputing.com/2022/jwrd-logs-for-Nov-2022/#5421 for further rationale and anecdotes. diff --git a/.gitignore b/.gitignore index 700f7c8e77..45507bdf09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -Makefile Makefile.in *.a *.o @@ -132,14 +131,9 @@ src/lib/event-filter-lexer.c src/lib/event-filter-parser.c src/lib/event-filter-parser.h src/lib/unicodemap.c -src/lib/UnicodeData.txt src/lib-compression/bench-compression -src/lib-fts/PropList.txt -src/lib-fts/WordBreakProperty.txt src/lib-fts/word-boundary-data.c src/lib-fts/word-break-data.c -src/lib-dict-backend/dict-drivers-register.c -src/lib-sql/sql-drivers-register.c src/log/log src/lmtp/lmtp src/master/dovecot diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..42057974d7 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +MAKE_SUBDIRS = $(MAKE) -C src $@ + +all: + $(MAKE_SUBDIRS) + +check: + $(MAKE_SUBDIRS) + +install: + $(MAKE_SUBDIRS) + +clean: + $(MAKE_SUBDIRS) diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000000..4af0c6827e --- /dev/null +++ b/src/Makefile @@ -0,0 +1,2026 @@ +# +# Build configuration +# + +# Optional components with external dependencies (see also config.h) +BUILD_FTS_EXTTEXTCAT = n +BUILD_LIBICU = n +BUILD_OPENSSL = n +BUILD_SOLR = n +DLUA_WITH_YIELDS = n +HAVE_APPARMOR = n +HAVE_LDAP = n +HAVE_LUA = n +TCPWRAPPERS = n +USE_FUZZER = n + +# Install paths +prefix = /usr/local +bindir = $(prefix)/bin +rundir = /var/run +pkgrundir = $(rundir)/dovecot +statedir = /var/lib +pkgstatedir = $(statedir)/dovecot +sysconfdir = $(prefix)/etc/dovecot +libexecdir = $(prefix)/libexec +pkglibexecdir = $(libexecdir)/dovecot +mandir = $(prefix)/man +datadir = $(prefix)/share +pkgdatadir = $(datadir)/dovecot + +# Build programs +PERL = perl +FLEX = flex +BISON = bison + +# +# Common flag & recipe definitions +# + +CFLAGS = -O1 -std=gnu99 -Wall -Wextra + +CPPFLAGS = -DHAVE_CONFIG_H -I.. -I. \ + -Iauth \ + -Idoveadm \ + -Iimap \ + -Ilib \ + -Ilib-auth \ + -Ilib-charset \ + -Ilib-compression \ + -Ilib-dict \ + -Ilib-dns \ + -Ilib-fs \ + -Ilib-fts \ + -Ilib-http \ + -Ilib-imap \ + -Ilib-imap-client \ + -Ilib-imap-storage \ + -Ilib-imap-urlauth \ + -Ilib-index \ + -Ilib-lda \ + -Ilib-ldap \ + -Ilib-lua \ + -Ilib-mail \ + -Ilib-master \ + -Ilib-old-stats \ + -Ilib-otp \ + -Ilib-program-client \ + -Ilib-sasl \ + -Ilib-settings \ + -Ilib-smtp \ + -Ilib-sql \ + -Ilib-ssl-iostream \ + -Ilib-storage \ + -Ilib-storage/index \ + -Ilib-storage/index/dbox-common \ + -Ilib-storage/index/imapc \ + -Ilib-storage/index/maildir \ + -Ilib-storage/index/raw \ + -Ilib-storage/list \ + -Ilib-test \ + -Ilogin-common \ + -Iplugins/fts \ + -Istats \ + -DTOP_SRC_DIR=\"$(CURDIR)\" \ + -DBINDIR=\"$(bindir)\" \ + -DPKG_LIBEXECDIR=\"$(pkglibexecdir)\" \ + -DPKG_RUNDIR=\"$(pkgrundir)\" \ + -DPKG_STATEDIR=\"$(pkgstatedir)\" \ + -DSYSCONFDIR=\"$(sysconfdir)\" \ + -DMANDIR=\"$(mandir)\" \ + -DDATADIR=\"$(pkgdatadir)\" \ + +LINK = $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@ + +# +# File list definitions +# + +BIN_PROGS = \ + config/doveconf \ + doveadm/doveadm \ + master/dovecot \ + +LIBEXEC_PROGS = \ + anvil/anvil \ + auth/auth \ + auth/checkpassword-reply \ + config/config \ + dict/dict \ + director/director \ + dns/dns-client \ + doveadm/doveadm-server \ + imap-hibernate/imap-hibernate \ + imap-login/imap-login \ + imap-urlauth/imap-urlauth \ + imap-urlauth/imap-urlauth-login \ + imap-urlauth/imap-urlauth-worker \ + imap/imap \ + indexer/indexer \ + indexer/indexer-worker \ + ipc/ipc \ + lda/dovecot-lda \ + lmtp/lmtp \ + log/log \ + old-stats/old-stats \ + plugins/fts/xml2text \ + plugins/quota/quota-status \ + pop3-login/pop3-login \ + pop3/pop3 \ + replication/aggregator/aggregator \ + replication/replicator/replicator \ + stats/stats \ + submission-login/submission-login \ + submission/submission \ + util/gdbhelper \ + util/maildirlock \ + util/rawlog \ + util/script \ + util/script-login \ + +TEST_PROGS = \ + anvil/test-penalty \ + auth/test-libpassword \ + auth/test-auth-cache \ + auth/test-auth \ + auth/test-mech \ + config/test-config-parser \ + director/test-user-directory \ + doveadm/dsync/test-dsync-mailbox-tree-sync \ + imap/test-imap-client-hibernate \ + lib-auth/test-auth-master \ + lib-charset/test-charset \ + lib-compression/test-compression \ + lib-dict-backend/test-dict-sql \ + lib-dict-extra/test-dict-fs \ + lib-dict/test-dict \ + lib-dns/test-dns-util \ + lib-fs/test-fs-metawrap \ + lib-fs/test-fs-posix \ + lib-fts/test-fts-filter \ + lib-fts/test-fts-tokenizer \ + lib-http/test-http-auth \ + lib-http/test-http-client-errors \ + lib-http/test-http-client-request \ + lib-http/test-http-date \ + lib-http/test-http-header-parser \ + lib-http/test-http-payload \ + lib-http/test-http-request-parser \ + lib-http/test-http-response-parser \ + lib-http/test-http-server-errors \ + lib-http/test-http-transfer \ + lib-http/test-http-url \ + lib-imap-client/test-imapc-client \ + lib-imap/test-imap-bodystructure \ + lib-imap/test-imap-envelope \ + lib-imap/test-imap-match \ + lib-imap/test-imap-parser \ + lib-imap/test-imap-quote \ + lib-imap/test-imap-url \ + lib-imap/test-imap-utf7 \ + lib-imap/test-imap-util \ + lib-index/test-mail-cache \ + lib-index/test-mail-cache-fields \ + lib-index/test-mail-cache-purge \ + lib-index/test-mail-index \ + lib-index/test-mail-index-map \ + lib-index/test-mail-index-modseq \ + lib-index/test-mail-index-sync-ext \ + lib-index/test-mail-index-transaction-finish \ + lib-index/test-mail-index-transaction-update \ + lib-index/test-mail-index-write \ + lib-index/test-mail-transaction-log-append \ + lib-index/test-mail-transaction-log-file \ + lib-index/test-mail-transaction-log-view \ + lib-mail/test-istream-attachment \ + lib-mail/test-istream-binary-converter \ + lib-mail/test-istream-dot \ + lib-mail/test-istream-header-filter \ + lib-mail/test-istream-qp-decoder \ + lib-mail/test-istream-qp-encoder \ + lib-mail/test-mail-html2text \ + lib-mail/test-mail-user-hash \ + lib-mail/test-mbox-from \ + lib-mail/test-message-address \ + lib-mail/test-message-date \ + lib-mail/test-message-decoder \ + lib-mail/test-message-header-decode \ + lib-mail/test-message-header-encode \ + lib-mail/test-message-header-hash \ + lib-mail/test-message-header-parser \ + lib-mail/test-message-id \ + lib-mail/test-message-parser \ + lib-mail/test-message-part-serialize \ + lib-mail/test-message-part \ + lib-mail/test-message-search \ + lib-mail/test-message-size \ + lib-mail/test-message-snippet \ + lib-mail/test-ostream-dot \ + lib-mail/test-qp-decoder \ + lib-mail/test-qp-encoder \ + lib-mail/test-quoted-printable \ + lib-mail/test-rfc2231-parser \ + lib-mail/test-rfc822-parser \ + lib-master/test-event-stats \ + lib-master/test-master-service-settings-cache \ + lib-program-client/test-program-client-net \ + lib-program-client/test-program-client-unix \ + lib-sasl/test-sasl-client \ + lib-settings/test-settings-parser \ + lib-settings/test-settings \ + lib-smtp/test-smtp-address \ + lib-smtp/test-smtp-client-errors \ + lib-smtp/test-smtp-command-parser \ + lib-smtp/test-smtp-params \ + lib-smtp/test-smtp-payload \ + lib-smtp/test-smtp-reply \ + lib-smtp/test-smtp-server-errors \ + lib-smtp/test-smtp-syntax \ + lib-storage/test-mail \ + lib-storage/test-mail-search-args-imap \ + lib-storage/test-mail-search-args-simplify \ + lib-storage/test-mail-storage \ + lib-storage/test-mailbox-get \ + lib-storage/test-mailbox-list \ + lib/test-lib \ + master/test-auth-client \ + master/test-auth-master \ + master/test-master-login-auth \ + plugins/acl/test-acl \ + plugins/pop3-migration/test-pop3-migration-plugin \ + plugins/quota/test-quota-util \ + stats/test-client-reader \ + stats/test-client-writer \ + stats/test-stats-metrics \ + +# not run in bulk by 'make check' (eg manual tests) +OTHER_PROGS = \ + director/director-test \ + lib-compression/bench-compression \ + lib-dict/test-dict-client \ + lib-http/test-http-server \ + lib-http/test-http-client \ + lib-program-client/test-program-client-local \ + lib-smtp/test-smtp-submit \ + plugins/fts-squat/squat-test \ + util/test-fs \ + +LIBDOVECOT_OBJS = \ + lib-auth/auth-client-connection.o \ + lib-auth/auth-client-request.o \ + lib-auth/auth-client.o \ + lib-auth/auth-master.o \ + lib-charset/charset-iconv.o \ + lib-charset/charset-utf8-only.o \ + lib-charset/charset-utf8.o \ + lib-dict-extra/dict-fs.o \ + lib-dict-extra/dict-register.o \ + lib-dict/dict-client.o \ + lib-dict/dict-fail.o \ + lib-dict/dict-file.o \ + lib-dict/dict-memcached-ascii.o \ + lib-dict/dict-memcached.o \ + lib-dict/dict-redis.o \ + lib-dict/dict-transaction-memory.o \ + lib-dict/dict.o \ + lib-dns/dns-lookup.o \ + lib-dns/dns-util.o \ + lib-fs/fs-api.o \ + lib-fs/fs-dict.o \ + lib-fs/fs-metawrap.o \ + lib-fs/fs-posix.o \ + lib-fs/fs-randomfail.o \ + lib-fs/fs-sis-common.o \ + lib-fs/fs-sis-queue.o \ + lib-fs/fs-sis.o \ + lib-fs/fs-test-async.o \ + lib-fs/fs-test.o \ + lib-fs/fs-wrapper.o \ + lib-fs/istream-fs-file.o \ + lib-fs/istream-fs-stats.o \ + lib-fs/istream-metawrap.o \ + lib-fs/ostream-cmp.o \ + lib-fs/ostream-metawrap.o \ + lib-http/http-auth.o \ + lib-http/http-client-connection.o \ + lib-http/http-client-host.o \ + lib-http/http-client-peer.o \ + lib-http/http-client-queue.o \ + lib-http/http-client-request.o \ + lib-http/http-client.o \ + lib-http/http-date.o \ + lib-http/http-header-parser.o \ + lib-http/http-header.o \ + lib-http/http-message-parser.o \ + lib-http/http-parser.o \ + lib-http/http-request-parser.o \ + lib-http/http-request.o \ + lib-http/http-response-parser.o \ + lib-http/http-response.o \ + lib-http/http-server-connection.o \ + lib-http/http-server-ostream.o \ + lib-http/http-server-request.o \ + lib-http/http-server-resource.o \ + lib-http/http-server-response.o \ + lib-http/http-server.o \ + lib-http/http-transfer-chunked.o \ + lib-http/http-url.o \ + lib-imap/imap-arg.o \ + lib-imap/imap-base-subject.o \ + lib-imap/imap-bodystructure.o \ + lib-imap/imap-date.o \ + lib-imap/imap-envelope.o \ + lib-imap/imap-id.o \ + lib-imap/imap-keepalive.o \ + lib-imap/imap-match.o \ + lib-imap/imap-parser.o \ + lib-imap/imap-quote.o \ + lib-imap/imap-seqset.o \ + lib-imap/imap-url.o \ + lib-imap/imap-utf7.o \ + lib-imap/imap-util.o \ + lib-mail/istream-attachment-connector.o \ + lib-mail/istream-attachment-extractor.o \ + lib-mail/istream-binary-converter.o \ + lib-mail/istream-dot.o \ + lib-mail/istream-header-filter.o \ + lib-mail/istream-nonuls.o \ + lib-mail/istream-qp-decoder.o \ + lib-mail/istream-qp-encoder.o \ + lib-mail/mail-html2text.o \ + lib-mail/mail-user-hash.o \ + lib-mail/mbox-from.o \ + lib-mail/message-address.o \ + lib-mail/message-binary-part.o \ + lib-mail/message-date.o \ + lib-mail/message-decoder.o \ + lib-mail/message-header-decode.o \ + lib-mail/message-header-encode.o \ + lib-mail/message-header-hash.o \ + lib-mail/message-header-parser.o \ + lib-mail/message-id.o \ + lib-mail/message-parser-from-parts.o \ + lib-mail/message-parser.o \ + lib-mail/message-part-data.o \ + lib-mail/message-part-serialize.o \ + lib-mail/message-part.o \ + lib-mail/message-search.o \ + lib-mail/message-size.o \ + lib-mail/message-snippet.o \ + lib-mail/ostream-dot.o \ + lib-mail/qp-decoder.o \ + lib-mail/qp-encoder.o \ + lib-mail/quoted-printable.o \ + lib-mail/rfc2231-parser.o \ + lib-mail/rfc822-parser.o \ + lib-master/anvil-client.o \ + lib-master/ipc-client.o \ + lib-master/ipc-server.o \ + lib-master/master-auth.o \ + lib-master/master-instance.o \ + lib-master/master-login-auth.o \ + lib-master/master-login.o \ + lib-master/master-service-haproxy.o \ + lib-master/master-service-settings-cache.o \ + lib-master/master-service-settings.o \ + lib-master/master-service-ssl-settings.o \ + lib-master/master-service-ssl.o \ + lib-master/master-service.o \ + lib-master/stats-client.o \ + lib-master/syslog-util.o \ + lib-old-stats/stats-connection.o \ + lib-old-stats/stats-parser.o \ + lib-old-stats/stats.o \ + lib-program-client/program-client-local.o \ + lib-program-client/program-client-remote.o \ + lib-program-client/program-client.o \ + lib-sasl/dsasl-client.o \ + lib-sasl/mech-external.o \ + lib-sasl/mech-login.o \ + lib-sasl/mech-plain.o \ + lib-settings/settings-parser.o \ + lib-settings/settings.o \ + lib-smtp/smtp-address.o \ + lib-smtp/smtp-client-command.o \ + lib-smtp/smtp-client-connection.o \ + lib-smtp/smtp-client-transaction.o \ + lib-smtp/smtp-client.o \ + lib-smtp/smtp-command-parser.o \ + lib-smtp/smtp-common.o \ + lib-smtp/smtp-params.o \ + lib-smtp/smtp-parser.o \ + lib-smtp/smtp-reply-parser.o \ + lib-smtp/smtp-reply.o \ + lib-smtp/smtp-server-cmd-auth.o \ + lib-smtp/smtp-server-cmd-data.o \ + lib-smtp/smtp-server-cmd-helo.o \ + lib-smtp/smtp-server-cmd-mail.o \ + lib-smtp/smtp-server-cmd-noop.o \ + lib-smtp/smtp-server-cmd-quit.o \ + lib-smtp/smtp-server-cmd-rcpt.o \ + lib-smtp/smtp-server-cmd-rset.o \ + lib-smtp/smtp-server-cmd-starttls.o \ + lib-smtp/smtp-server-cmd-vrfy.o \ + lib-smtp/smtp-server-cmd-xclient.o \ + lib-smtp/smtp-server-command.o \ + lib-smtp/smtp-server-connection.o \ + lib-smtp/smtp-server-recipient.o \ + lib-smtp/smtp-server-reply.o \ + lib-smtp/smtp-server-transaction.o \ + lib-smtp/smtp-server.o \ + lib-smtp/smtp-submit-settings.o \ + lib-smtp/smtp-submit.o \ + lib-smtp/smtp-syntax.o \ + lib-ssl-iostream/iostream-ssl-context-cache.o \ + lib-ssl-iostream/iostream-ssl-test.o \ + lib-ssl-iostream/iostream-ssl.o \ + lib-test/fuzzer.o \ + lib-test/test-common.o \ + lib-test/test-istream.o \ + lib-test/test-ostream.o \ + lib-test/test-subprocess.o \ + lib/aqueue.o \ + lib/array.o \ + lib/askpass.o \ + lib/backtrace-string.o \ + lib/base32.o \ + lib/base64.o \ + lib/bits.o \ + lib/bsearch-insert-pos.o \ + lib/buffer-istream.o \ + lib/buffer.o \ + lib/child-wait.o \ + lib/compat.o \ + lib/connection.o \ + lib/cpu-limit.o \ + lib/crc32.o \ + lib/data-stack.o \ + lib/eacces-error.o \ + lib/env-util.o \ + lib/event-filter-lexer.o \ + lib/event-filter-parser.o \ + lib/event-filter.o \ + lib/event-log.o \ + lib/execv-const.o \ + lib/failures.o \ + lib/fd-util.o \ + lib/fdatasync-path.o \ + lib/fdpass.o \ + lib/file-cache.o \ + lib/file-copy.o \ + lib/file-create-locked.o \ + lib/file-dotlock.o \ + lib/file-lock.o \ + lib/file-set-size.o \ + lib/guid.o \ + lib/hash-format.o \ + lib/hash-method.o \ + lib/hash.o \ + lib/hash2.o \ + lib/hex-binary.o \ + lib/hex-dec.o \ + lib/hmac-cram-md5.o \ + lib/hmac.o \ + lib/home-expand.o \ + lib/hook-build.o \ + lib/hostpid.o \ + lib/imem.o \ + lib/ioloop-epoll.o \ + lib/ioloop-iolist.o \ + lib/ioloop-kqueue.o \ + lib/ioloop-notify-fd.o \ + lib/ioloop-notify-inotify.o \ + lib/ioloop-notify-kqueue.o \ + lib/ioloop-notify-none.o \ + lib/ioloop-poll.o \ + lib/ioloop-select.o \ + lib/ioloop.o \ + lib/iostream-proxy.o \ + lib/iostream-pump.o \ + lib/iostream-rawlog.o \ + lib/iostream-temp.o \ + lib/iostream.o \ + lib/ipwd.o \ + lib/iso8601-date.o \ + lib/istream-base64-decoder.o \ + lib/istream-base64-encoder.o \ + lib/istream-callback.o \ + lib/istream-chain.o \ + lib/istream-concat.o \ + lib/istream-crlf.o \ + lib/istream-data.o \ + lib/istream-failure-at.o \ + lib/istream-file.o \ + lib/istream-hash.o \ + lib/istream-jsonstr.o \ + lib/istream-limit.o \ + lib/istream-multiplex.o \ + lib/istream-rawlog.o \ + lib/istream-seekable.o \ + lib/istream-sized.o \ + lib/istream-tee.o \ + lib/istream-timeout.o \ + lib/istream-try.o \ + lib/istream-unix.o \ + lib/istream.o \ + lib/json-parser.o \ + lib/json-tree.o \ + lib/lib-event.o \ + lib/lib-signals.o \ + lib/lib.o \ + lib/log-throttle.o \ + lib/md4.o \ + lib/md5.o \ + lib/memarea.o \ + lib/mempool-allocfree.o \ + lib/mempool-alloconly.o \ + lib/mempool-datastack.o \ + lib/mempool-system.o \ + lib/mempool-unsafe-datastack.o \ + lib/mempool.o \ + lib/mkdir-parents.o \ + lib/mmap-anon.o \ + lib/mmap-util.o \ + lib/module-dir-load-adm.o \ + lib/module-dir-load-auth.o \ + lib/module-dir-load-mail.o \ + lib/module-dir-load-old-stats.o \ + lib/module-dir-load-settings.o \ + lib/module-dir-load-ssl-iostream.o \ + lib/module-dir.o \ + lib/mountpoint.o \ + lib/net.o \ + lib/nfs-workarounds.o \ + lib/numpack.o \ + lib/ostream-buffer.o \ + lib/ostream-failure-at.o \ + lib/ostream-file.o \ + lib/ostream-hash.o \ + lib/ostream-multiplex.o \ + lib/ostream-null.o \ + lib/ostream-rawlog.o \ + lib/ostream-unix.o \ + lib/ostream-wrapper.o \ + lib/ostream.o \ + lib/path-util.o \ + lib/pkcs5.o \ + lib/primes.o \ + lib/printf-format-fix.o \ + lib/priorityq.o \ + lib/process-stat.o \ + lib/process-title.o \ + lib/rand.o \ + lib/randgen.o \ + lib/read-full.o \ + lib/restrict-access.o \ + lib/restrict-process-size.o \ + lib/safe-memset.o \ + lib/safe-mkdir.o \ + lib/safe-mkstemp.o \ + lib/sendfile-util.o \ + lib/seq-range-array.o \ + lib/seq-set-builder.o \ + lib/sha1.o \ + lib/sha2.o \ + lib/sha3.o \ + lib/sleep.o \ + lib/sort.o \ + lib/stats-dist.o \ + lib/str-find.o \ + lib/str-sanitize.o \ + lib/str-table.o \ + lib/str.o \ + lib/strccdascmp.o \ + lib/strescape.o \ + lib/strfuncs.o \ + lib/strnum.o \ + lib/time-util.o \ + lib/unichar.o \ + lib/unix-socket-create.o \ + lib/unlink-directory.o \ + lib/unlink-old-files.o \ + lib/uri-util.o \ + lib/utc-mktime.o \ + lib/utc-offset.o \ + lib/var-expand-if.o \ + lib/var-expand.o \ + lib/wildcard-match.o \ + lib/write-full.o \ + +# was libpassword +LIBDOVECOT_OBJS += \ + auth/crypt-blowfish.o \ + auth/mycrypt.o \ + auth/password-scheme-crypt.o \ + auth/password-scheme-md5crypt.o \ + auth/password-scheme-otp.o \ + auth/password-scheme-pbkdf2.o \ + auth/password-scheme-scram.o \ + auth/password-scheme-sodium.o \ + auth/password-scheme.o \ + +# was libauth +LIBDOVECOT_OBJS += \ + auth/auth-cache.o \ + auth/auth-client-connection.o \ + auth/auth-fields.o \ + auth/auth-master-connection.o \ + auth/auth-penalty.o \ + auth/auth-policy.o \ + auth/auth-request-fields.o \ + auth/auth-request-handler.o \ + auth/auth-request-stats.o \ + auth/auth-request-var-expand.o \ + auth/auth-request.o \ + auth/auth-settings.o \ + auth/auth-token.o \ + auth/auth-worker-client.o \ + auth/auth-worker-server.o \ + auth/auth.o \ + auth/db-checkpassword.o \ + auth/db-dict-cache-key.o \ + auth/db-dict.o \ + auth/db-ldap.o \ + auth/db-lua.o \ + auth/db-passwd-file.o \ + auth/db-sql.o \ + auth/mech-anonymous.o \ + auth/mech-apop.o \ + auth/mech-cram-md5.o \ + auth/mech-digest-md5.o \ + auth/mech-dovecot-token.o \ + auth/mech-external.o \ + auth/mech-gssapi.o \ + auth/mech-login.o \ + auth/mech-otp-common.o \ + auth/mech-otp.o \ + auth/mech-plain-common.o \ + auth/mech-plain.o \ + auth/mech-scram.o \ + auth/mech-winbind.o \ + auth/mech.o \ + auth/passdb-blocking.o \ + auth/passdb-bsdauth.o \ + auth/passdb-cache.o \ + auth/passdb-checkpassword.o \ + auth/passdb-dict.o \ + auth/passdb-ldap.o \ + auth/passdb-lua.o \ + auth/passdb-pam.o \ + auth/passdb-passwd-file.o \ + auth/passdb-passwd.o \ + auth/passdb-shadow.o \ + auth/passdb-sql.o \ + auth/passdb-static.o \ + auth/passdb-template.o \ + auth/passdb.o \ + auth/userdb-blocking.o \ + auth/userdb-checkpassword.o \ + auth/userdb-dict.o \ + auth/userdb-ldap.o \ + auth/userdb-lua.o \ + auth/userdb-passwd-file.o \ + auth/userdb-passwd.o \ + auth/userdb-prefetch.o \ + auth/userdb-sql.o \ + auth/userdb-static.o \ + auth/userdb-template.o \ + auth/userdb.o \ + +# was libauthdb-imap +LIBDOVECOT_OBJS += auth/passdb-imap.o + +# was libstats-auth +LIBDOVECOT_OBJS += auth/auth-stats.o + +# was libconfig +LIBDOVECOT_OBJS += \ + config/config-connection.o \ + config/config-filter.o \ + config/config-parser.o \ + config/config-request.o \ + config/old-set-parser.o \ + config/sysinfo-get.o \ + +# was $(doveadm_common_cmds) +LIBDOVECOT_OBJS += \ + doveadm/doveadm-auth.o \ + doveadm/doveadm-dict.o \ + doveadm/doveadm-director.o \ + doveadm/doveadm-fs.o \ + doveadm/doveadm-instance.o \ + doveadm/doveadm-kick.o \ + doveadm/doveadm-log.o \ + doveadm/doveadm-master.o \ + doveadm/doveadm-mutf7.o \ + doveadm/doveadm-oldstats.o \ + doveadm/doveadm-penalty.o \ + doveadm/doveadm-proxy.o \ + doveadm/doveadm-replicator.o \ + doveadm/doveadm-sis.o \ + doveadm/doveadm-stats.o \ + doveadm/doveadm-who.o \ + +# was $(doveadm_common_mail_cmds) +LIBDOVECOT_OBJS += \ + doveadm/doveadm-dsync.o \ + doveadm/doveadm-mail-altmove.o \ + doveadm/doveadm-mail-batch.o \ + doveadm/doveadm-mail-copymove.o \ + doveadm/doveadm-mail-deduplicate.o \ + doveadm/doveadm-mail-expunge.o \ + doveadm/doveadm-mail-fetch.o \ + doveadm/doveadm-mail-flags.o \ + doveadm/doveadm-mail-import.o \ + doveadm/doveadm-mail-index.o \ + doveadm/doveadm-mail-iter.o \ + doveadm/doveadm-mail-mailbox-cache.o \ + doveadm/doveadm-mail-mailbox-metadata.o \ + doveadm/doveadm-mail-mailbox-status.o \ + doveadm/doveadm-mail-mailbox.o \ + doveadm/doveadm-mail-rebuild.o \ + doveadm/doveadm-mail-save.o \ + doveadm/doveadm-mail-search.o \ + doveadm/doveadm-mail-server.o \ + doveadm/doveadm-mail.o \ + doveadm/doveadm-mailbox-list-iter.o \ + +# was $(doveadm_common_dump_cmds) +LIBDOVECOT_OBJS += \ + doveadm/doveadm-dump-dbox.o \ + doveadm/doveadm-dump-index.o \ + doveadm/doveadm-dump-log.o \ + doveadm/doveadm-dump-mailboxlog.o \ + doveadm/doveadm-dump-thread.o \ + doveadm/doveadm-dump.o \ + doveadm/doveadm-zlib.o \ + +# was $(common) or otherwise listed twice +LIBDOVECOT_OBJS += \ + doveadm/doveadm-cmd.o \ + doveadm/doveadm-print-formatted.o \ + doveadm/doveadm-print-json.o \ + doveadm/doveadm-print.o \ + doveadm/doveadm-settings.o \ + doveadm/doveadm-util.o \ + doveadm/server-connection.o \ + +# was libdsync +LIBDOVECOT_OBJS += \ + doveadm/dsync/dsync-brain-mailbox-tree-sync.o \ + doveadm/dsync/dsync-brain-mailbox-tree.o \ + doveadm/dsync/dsync-brain-mailbox.o \ + doveadm/dsync/dsync-brain-mails.o \ + doveadm/dsync/dsync-brain.o \ + doveadm/dsync/dsync-deserializer.o \ + doveadm/dsync/dsync-ibc-pipe.o \ + doveadm/dsync/dsync-ibc-stream.o \ + doveadm/dsync/dsync-ibc.o \ + doveadm/dsync/dsync-mail.o \ + doveadm/dsync/dsync-mailbox-export.o \ + doveadm/dsync/dsync-mailbox-import.o \ + doveadm/dsync/dsync-mailbox-state.o \ + doveadm/dsync/dsync-mailbox-tree-fill.o \ + doveadm/dsync/dsync-mailbox-tree-sync.o \ + doveadm/dsync/dsync-mailbox-tree.o \ + doveadm/dsync/dsync-mailbox.o \ + doveadm/dsync/dsync-serializer.o \ + doveadm/dsync/dsync-transaction-log-scan.o \ + +# was $(common_sources) (except imap/imap-client.o removed for conflicts with libdovecot) +LIBDOVECOT_OBJS += \ + imap/cmd-append.o \ + imap/cmd-cancelupdate.o \ + imap/cmd-capability.o \ + imap/cmd-check.o \ + imap/cmd-close.o \ + imap/cmd-copy.o \ + imap/cmd-create.o \ + imap/cmd-delete.o \ + imap/cmd-enable.o \ + imap/cmd-examine.o \ + imap/cmd-expunge.o \ + imap/cmd-fetch.o \ + imap/cmd-genurlauth.o \ + imap/cmd-getmetadata.o \ + imap/cmd-id.o \ + imap/cmd-idle.o \ + imap/cmd-list.o \ + imap/cmd-logout.o \ + imap/cmd-lsub.o \ + imap/cmd-namespace.o \ + imap/cmd-noop.o \ + imap/cmd-notify.o \ + imap/cmd-rename.o \ + imap/cmd-resetkey.o \ + imap/cmd-search.o \ + imap/cmd-select.o \ + imap/cmd-setmetadata.o \ + imap/cmd-sort.o \ + imap/cmd-status.o \ + imap/cmd-store.o \ + imap/cmd-subscribe.o \ + imap/cmd-thread.o \ + imap/cmd-unselect.o \ + imap/cmd-unsubscribe.o \ + imap/cmd-urlfetch.o \ + imap/cmd-x-cancel.o \ + imap/cmd-x-state.o \ + imap/imap-client-hibernate.o \ + imap/imap-commands-util.o \ + imap/imap-commands.o \ + imap/imap-expunge.o \ + imap/imap-feature.o \ + imap/imap-fetch-body.o \ + imap/imap-fetch.o \ + imap/imap-list.o \ + imap/imap-master-client.o \ + imap/imap-notify.o \ + imap/imap-search-args.o \ + imap/imap-search.o \ + imap/imap-settings.o \ + imap/imap-state.o \ + imap/imap-status.o \ + imap/imap-sync.o \ + imap/mail-storage-callbacks.o \ + +# was libcompression +LIBDOVECOT_OBJS += \ + lib-compression/compression.o \ + lib-compression/istream-bzlib.o \ + lib-compression/istream-decompress.o \ + lib-compression/istream-lz4.o \ + lib-compression/istream-lzma.o \ + lib-compression/istream-zlib.o \ + lib-compression/istream-zstd.o \ + lib-compression/ostream-bzlib.o \ + lib-compression/ostream-lz4.o \ + lib-compression/ostream-zlib.o \ + lib-compression/ostream-zstd.o \ + +# was libdict_backend +LIBDOVECOT_OBJS += \ + lib-dict-backend/dict-cdb.o \ + lib-dict-backend/dict-drivers-register.o \ + lib-dict-backend/dict-ldap-settings.o \ + lib-dict-backend/dict-ldap.o \ + lib-dict-backend/dict-sql-settings.o \ + lib-dict-backend/dict-sql.o \ + +# was libfts +LIBDOVECOT_OBJS += \ + lib-fts/fts-filter-common.o \ + lib-fts/fts-filter-contractions.o \ + lib-fts/fts-filter-english-possessive.o \ + lib-fts/fts-filter-lowercase.o \ + lib-fts/fts-filter-normalizer-icu.o \ + lib-fts/fts-filter-stemmer-snowball.o \ + lib-fts/fts-filter-stopwords.o \ + lib-fts/fts-filter.o \ + lib-fts/fts-language.o \ + lib-fts/fts-library.o \ + lib-fts/fts-tokenizer-address.o \ + lib-fts/fts-tokenizer-common.o \ + lib-fts/fts-tokenizer-generic.o \ + lib-fts/fts-tokenizer.o \ + +# was libimap_client +LIBDOVECOT_OBJS += \ + lib-imap-client/imapc-client.o \ + lib-imap-client/imapc-connection.o \ + lib-imap-client/imapc-msgmap.o \ + +# was libimap_storage +LIBDOVECOT_OBJS += \ + lib-imap-storage/imap-metadata.o \ + lib-imap-storage/imap-msgpart-url.o \ + lib-imap-storage/imap-msgpart.o \ + +# was libimap_urlauth +LIBDOVECOT_OBJS += \ + lib-imap-urlauth/imap-urlauth-backend.o \ + lib-imap-urlauth/imap-urlauth-connection.o \ + lib-imap-urlauth/imap-urlauth-fetch.o \ + lib-imap-urlauth/imap-urlauth.o \ + +# was libindex +LIBDOVECOT_OBJS += \ + lib-index/mail-cache-decisions.o \ + lib-index/mail-cache-fields.o \ + lib-index/mail-cache-lookup.o \ + lib-index/mail-cache-purge.o \ + lib-index/mail-cache-sync-update.o \ + lib-index/mail-cache-transaction.o \ + lib-index/mail-cache.o \ + lib-index/mail-index-alloc-cache.o \ + lib-index/mail-index-dummy-view.o \ + lib-index/mail-index-fsck.o \ + lib-index/mail-index-lock.o \ + lib-index/mail-index-map-hdr.o \ + lib-index/mail-index-map-read.o \ + lib-index/mail-index-map.o \ + lib-index/mail-index-modseq.o \ + lib-index/mail-index-strmap.o \ + lib-index/mail-index-sync-ext.o \ + lib-index/mail-index-sync-keywords.o \ + lib-index/mail-index-sync-update.o \ + lib-index/mail-index-sync.o \ + lib-index/mail-index-transaction-export.o \ + lib-index/mail-index-transaction-finish.o \ + lib-index/mail-index-transaction-sort-appends.o \ + lib-index/mail-index-transaction-update.o \ + lib-index/mail-index-transaction-view.o \ + lib-index/mail-index-transaction.o \ + lib-index/mail-index-util.o \ + lib-index/mail-index-view-sync.o \ + lib-index/mail-index-view.o \ + lib-index/mail-index-write.o \ + lib-index/mail-index.o \ + lib-index/mail-transaction-log-append.o \ + lib-index/mail-transaction-log-file.o \ + lib-index/mail-transaction-log-modseq.o \ + lib-index/mail-transaction-log-view.o \ + lib-index/mail-transaction-log.o \ + lib-index/mailbox-log.o \ + lib-index/test-mail-cache-common.o \ + +# was liblda +LIBDOVECOT_OBJS += \ + lib-lda/lda-settings.o \ + lib-lda/mail-deliver.o \ + lib-lda/mail-send.o \ + +# was libotp +LIBDOVECOT_OBJS += \ + lib-otp/otp-dictionary.o \ + lib-otp/otp-hash.o \ + lib-otp/otp-parity.o \ + lib-otp/otp-parse.o \ + +# was libsql + libdriver_test +LIBDOVECOT_OBJS += \ + lib-sql/driver-cassandra.o \ + lib-sql/driver-mysql.o \ + lib-sql/driver-pgsql.o \ + lib-sql/driver-sqlite.o \ + lib-sql/driver-sqlpool.o \ + lib-sql/driver-test.o \ + lib-sql/sql-api.o \ + lib-sql/sql-db-cache.o \ + lib-sql/sql-drivers-register.o \ + +# was libstorage +LIBDOVECOT_OBJS += \ + lib-storage/fail-mail-storage.o \ + lib-storage/fail-mail.o \ + lib-storage/fail-mailbox.o \ + lib-storage/mail-autoexpunge.o \ + lib-storage/mail-copy.o \ + lib-storage/mail-duplicate.o \ + lib-storage/mail-error.o \ + lib-storage/mail-namespace.o \ + lib-storage/mail-search-args-cmdline.o \ + lib-storage/mail-search-args-imap.o \ + lib-storage/mail-search-args-simplify.o \ + lib-storage/mail-search-build.o \ + lib-storage/mail-search-mime-build.o \ + lib-storage/mail-search-mime-register.o \ + lib-storage/mail-search-mime.o \ + lib-storage/mail-search-parser-cmdline.o \ + lib-storage/mail-search-parser-imap.o \ + lib-storage/mail-search-parser.o \ + lib-storage/mail-search-register-human.o \ + lib-storage/mail-search-register-imap.o \ + lib-storage/mail-search-register.o \ + lib-storage/mail-search.o \ + lib-storage/mail-storage-hooks.o \ + lib-storage/mail-storage-register.o \ + lib-storage/mail-storage-service.o \ + lib-storage/mail-storage-settings.o \ + lib-storage/mail-storage.o \ + lib-storage/mail-thread.o \ + lib-storage/mail-user.o \ + lib-storage/mail.o \ + lib-storage/mailbox-attribute-internal.o \ + lib-storage/mailbox-attribute.o \ + lib-storage/mailbox-get.o \ + lib-storage/mailbox-guid-cache.o \ + lib-storage/mailbox-header.o \ + lib-storage/mailbox-keywords.o \ + lib-storage/mailbox-list-notify.o \ + lib-storage/mailbox-list-register.o \ + lib-storage/mailbox-list.o \ + lib-storage/mailbox-match-plugin.o \ + lib-storage/mailbox-recent-flags.o \ + lib-storage/mailbox-search-result.o \ + lib-storage/mailbox-tree.o \ + lib-storage/mailbox-uidvalidity.o \ + lib-storage/mailbox-watch.o \ + lib-storage/test-mail-storage-common.o \ + +# was libstorage_index +LIBDOVECOT_OBJS += \ + lib-storage/index/index-attachment.o \ + lib-storage/index/index-attribute.o \ + lib-storage/index/index-mail-binary.o \ + lib-storage/index/index-mail-headers.o \ + lib-storage/index/index-mail.o \ + lib-storage/index/index-mailbox-size.o \ + lib-storage/index/index-pop3-uidl.o \ + lib-storage/index/index-rebuild.o \ + lib-storage/index/index-search-mime.o \ + lib-storage/index/index-search-result.o \ + lib-storage/index/index-search.o \ + lib-storage/index/index-sort-string.o \ + lib-storage/index/index-sort.o \ + lib-storage/index/index-status.o \ + lib-storage/index/index-storage.o \ + lib-storage/index/index-sync-changes.o \ + lib-storage/index/index-sync-pvt.o \ + lib-storage/index/index-sync-search.o \ + lib-storage/index/index-sync.o \ + lib-storage/index/index-thread-finish.o \ + lib-storage/index/index-thread-links.o \ + lib-storage/index/index-thread.o \ + lib-storage/index/index-transaction.o \ + lib-storage/index/istream-mail.o \ + +# was libstorage_dbox_common +LIBDOVECOT_OBJS += \ + lib-storage/index/dbox-common/dbox-attachment.o \ + lib-storage/index/dbox-common/dbox-file-fix.o \ + lib-storage/index/dbox-common/dbox-file.o \ + lib-storage/index/dbox-common/dbox-mail.o \ + lib-storage/index/dbox-common/dbox-save.o \ + lib-storage/index/dbox-common/dbox-storage.o \ + +# was libstorage_dbox_multi +LIBDOVECOT_OBJS += \ + lib-storage/index/dbox-multi/mdbox-deleted-storage.o \ + lib-storage/index/dbox-multi/mdbox-file.o \ + lib-storage/index/dbox-multi/mdbox-mail.o \ + lib-storage/index/dbox-multi/mdbox-map.o \ + lib-storage/index/dbox-multi/mdbox-purge.o \ + lib-storage/index/dbox-multi/mdbox-save.o \ + lib-storage/index/dbox-multi/mdbox-settings.o \ + lib-storage/index/dbox-multi/mdbox-storage-rebuild.o \ + lib-storage/index/dbox-multi/mdbox-storage.o \ + lib-storage/index/dbox-multi/mdbox-sync.o \ + +# was libstorage_dbox_single +LIBDOVECOT_OBJS += \ + lib-storage/index/dbox-single/sdbox-copy.o \ + lib-storage/index/dbox-single/sdbox-file.o \ + lib-storage/index/dbox-single/sdbox-mail.o \ + lib-storage/index/dbox-single/sdbox-save.o \ + lib-storage/index/dbox-single/sdbox-storage.o \ + lib-storage/index/dbox-single/sdbox-sync-rebuild.o \ + lib-storage/index/dbox-single/sdbox-sync.o \ + +# was libstorage_imapc +LIBDOVECOT_OBJS += \ + lib-storage/index/imapc/imapc-list.o \ + lib-storage/index/imapc/imapc-mail-fetch.o \ + lib-storage/index/imapc/imapc-mail.o \ + lib-storage/index/imapc/imapc-mailbox.o \ + lib-storage/index/imapc/imapc-save.o \ + lib-storage/index/imapc/imapc-search.o \ + lib-storage/index/imapc/imapc-settings.o \ + lib-storage/index/imapc/imapc-storage.o \ + lib-storage/index/imapc/imapc-sync.o \ + +# was libstorage_maildir +LIBDOVECOT_OBJS += \ + lib-storage/index/maildir/maildir-copy.o \ + lib-storage/index/maildir/maildir-filename-flags.o \ + lib-storage/index/maildir/maildir-filename.o \ + lib-storage/index/maildir/maildir-keywords.o \ + lib-storage/index/maildir/maildir-mail.o \ + lib-storage/index/maildir/maildir-save.o \ + lib-storage/index/maildir/maildir-settings.o \ + lib-storage/index/maildir/maildir-storage.o \ + lib-storage/index/maildir/maildir-sync-index.o \ + lib-storage/index/maildir/maildir-sync.o \ + lib-storage/index/maildir/maildir-uidlist.o \ + lib-storage/index/maildir/maildir-util.o \ + +# was libstorage_mbox +LIBDOVECOT_OBJS += \ + lib-storage/index/mbox/istream-raw-mbox.o \ + lib-storage/index/mbox/mbox-file.o \ + lib-storage/index/mbox/mbox-lock.o \ + lib-storage/index/mbox/mbox-mail.o \ + lib-storage/index/mbox/mbox-md5-all.o \ + lib-storage/index/mbox/mbox-md5-apop3d.o \ + lib-storage/index/mbox/mbox-save.o \ + lib-storage/index/mbox/mbox-settings.o \ + lib-storage/index/mbox/mbox-storage.o \ + lib-storage/index/mbox/mbox-sync-list-index.o \ + lib-storage/index/mbox/mbox-sync-parse.o \ + lib-storage/index/mbox/mbox-sync-rewrite.o \ + lib-storage/index/mbox/mbox-sync-update.o \ + lib-storage/index/mbox/mbox-sync.o \ + +# was libstorage_pop3c +LIBDOVECOT_OBJS += \ + lib-storage/index/pop3c/pop3c-client.o \ + lib-storage/index/pop3c/pop3c-mail.o \ + lib-storage/index/pop3c/pop3c-settings.o \ + lib-storage/index/pop3c/pop3c-storage.o \ + lib-storage/index/pop3c/pop3c-sync.o \ + +# was libstorage_raw +LIBDOVECOT_OBJS += \ + lib-storage/index/raw/raw-mail.o \ + lib-storage/index/raw/raw-storage.o \ + lib-storage/index/raw/raw-sync.o \ + +# was libstorage_shared +LIBDOVECOT_OBJS += \ + lib-storage/index/shared/shared-list.o \ + lib-storage/index/shared/shared-storage.o \ + +# was libstorage_list +LIBDOVECOT_OBJS += \ + lib-storage/list/mail-storage-list-index-rebuild.o \ + lib-storage/list/mailbox-list-delete.o \ + lib-storage/list/mailbox-list-fs-flags.o \ + lib-storage/list/mailbox-list-fs-iter.o \ + lib-storage/list/mailbox-list-fs.o \ + lib-storage/list/mailbox-list-index-backend.o \ + lib-storage/list/mailbox-list-index-iter.o \ + lib-storage/list/mailbox-list-index-notify.o \ + lib-storage/list/mailbox-list-index-status.o \ + lib-storage/list/mailbox-list-index-sync.o \ + lib-storage/list/mailbox-list-index.o \ + lib-storage/list/mailbox-list-iter.o \ + lib-storage/list/mailbox-list-maildir-iter.o \ + lib-storage/list/mailbox-list-maildir.o \ + lib-storage/list/mailbox-list-none.o \ + lib-storage/list/mailbox-list-notify-tree.o \ + lib-storage/list/mailbox-list-subscriptions.o \ + lib-storage/list/subscription-file.o \ + +# was liblogin +LIBDOVECOT_OBJS += \ + login-common/access-lookup.o \ + login-common/client-common-auth.o \ + login-common/client-common.o \ + login-common/login-proxy-state.o \ + login-common/login-proxy.o \ + login-common/login-settings.o \ + login-common/main.o \ + login-common/sasl-server.o \ + +# was various plugin libs +LIBDOVECOT_OBJS += \ + plugins/acl/acl-api.o \ + plugins/acl/acl-attributes.o \ + plugins/acl/acl-backend-vfile-acllist.o \ + plugins/acl/acl-backend-vfile-update.o \ + plugins/acl/acl-backend-vfile.o \ + plugins/acl/acl-backend.o \ + plugins/acl/acl-cache.o \ + plugins/acl/acl-global-file.o \ + plugins/acl/acl-lookup-dict.o \ + plugins/acl/acl-mailbox-list.o \ + plugins/acl/acl-mailbox.o \ + plugins/acl/acl-plugin.o \ + plugins/acl/acl-shared-storage.o \ + plugins/acl/acl-storage.o \ + plugins/acl/doveadm-acl.o \ + plugins/charset-alias/charset-alias-plugin.o \ + plugins/fts-squat/fts-backend-squat.o \ + plugins/fts-squat/fts-squat-plugin.o \ + plugins/fts-squat/squat-trie.o \ + plugins/fts-squat/squat-uidlist.o \ + plugins/fts/doveadm-dump-fts-expunge-log.o \ + plugins/fts/doveadm-fts.o \ + plugins/fts/fts-api.o \ + plugins/fts/fts-build-mail.o \ + plugins/fts/fts-expunge-log.o \ + plugins/fts/fts-indexer.o \ + plugins/fts/fts-parser-html.o \ + plugins/fts/fts-parser-script.o \ + plugins/fts/fts-parser-tika.o \ + plugins/fts/fts-parser.o \ + plugins/fts/fts-plugin.o \ + plugins/fts/fts-search-args.o \ + plugins/fts/fts-search-serialize.o \ + plugins/fts/fts-search.o \ + plugins/fts/fts-storage.o \ + plugins/fts/fts-user.o \ + plugins/imap-acl/imap-acl-plugin.o \ + plugins/imap-old-stats/imap-stats-plugin.o \ + plugins/imap-quota/imap-quota-plugin.o \ + plugins/imap-zlib/imap-zlib-plugin.o \ + plugins/last-login/last-login-plugin.o \ + plugins/lazy-expunge/lazy-expunge-plugin.o \ + plugins/listescape/listescape-plugin.o \ + plugins/mail-log/mail-log-plugin.o \ + plugins/mailbox-alias/mailbox-alias-plugin.o \ + plugins/notify-status/notify-status-plugin.o \ + plugins/notify/notify-plugin.o \ + plugins/notify/notify-storage.o \ + plugins/old-stats/mail-stats-connection.o \ + plugins/old-stats/mail-stats-fill.o \ + plugins/old-stats/mail-stats.o \ + plugins/old-stats/stats-plugin.o \ + plugins/pop3-migration/pop3-migration-plugin.o \ + plugins/push-notification/push-notification-driver-dlog.o \ + plugins/push-notification/push-notification-driver-ox.o \ + plugins/push-notification/push-notification-drivers.o \ + plugins/push-notification/push-notification-event-flagsclear.o \ + plugins/push-notification/push-notification-event-flagsset.o \ + plugins/push-notification/push-notification-event-mailboxcreate.o \ + plugins/push-notification/push-notification-event-mailboxdelete.o \ + plugins/push-notification/push-notification-event-mailboxrename.o \ + plugins/push-notification/push-notification-event-mailboxsubscribe.o \ + plugins/push-notification/push-notification-event-mailboxunsubscribe.o \ + plugins/push-notification/push-notification-event-message-common.o \ + plugins/push-notification/push-notification-event-messageappend.o \ + plugins/push-notification/push-notification-event-messageexpunge.o \ + plugins/push-notification/push-notification-event-messagenew.o \ + plugins/push-notification/push-notification-event-messageread.o \ + plugins/push-notification/push-notification-event-messagetrash.o \ + plugins/push-notification/push-notification-events-rfc5423.o \ + plugins/push-notification/push-notification-events.o \ + plugins/push-notification/push-notification-plugin.o \ + plugins/push-notification/push-notification-triggers.o \ + plugins/push-notification/push-notification-txn-mbox.o \ + plugins/push-notification/push-notification-txn-msg.o \ + plugins/quota-clone/quota-clone-plugin.o \ + plugins/quota/doveadm-quota.o \ + plugins/quota/quota-count.o \ + plugins/quota/quota-dict.o \ + plugins/quota/quota-dirsize.o \ + plugins/quota/quota-fs.o \ + plugins/quota/quota-imapc.o \ + plugins/quota/quota-maildir.o \ + plugins/quota/quota-plugin.o \ + plugins/quota/quota-storage.o \ + plugins/quota/quota-util.o \ + plugins/quota/quota.o \ + plugins/replication/replication-plugin.o \ + plugins/trash/trash-plugin.o \ + plugins/virtual/virtual-config.o \ + plugins/virtual/virtual-mail.o \ + plugins/virtual/virtual-plugin.o \ + plugins/virtual/virtual-save.o \ + plugins/virtual/virtual-search.o \ + plugins/virtual/virtual-storage.o \ + plugins/virtual/virtual-sync.o \ + plugins/virtual/virtual-transaction.o \ + plugins/welcome/welcome-plugin.o \ + plugins/zlib/zlib-plugin.o \ + +# was libstats_local +LIBDOVECOT_OBJS += \ + stats/client-http.o \ + stats/client-reader.o \ + stats/client-writer.o \ + stats/event-exporter-fmt-json.o \ + stats/event-exporter-fmt-none.o \ + stats/event-exporter-fmt-tab-text.o \ + stats/event-exporter-fmt.o \ + stats/event-exporter-transport-drop.o \ + stats/event-exporter-transport-http-post.o \ + stats/event-exporter-transport-log.o \ + stats/stats-common.o \ + stats/stats-event-category.o \ + stats/stats-metrics.o \ + stats/stats-service-openmetrics.o \ + stats/stats-service.o \ + stats/stats-settings.o \ + stats/test-stats-common.o \ + +# This list used to be generated by configure with find-sed-sort magic. The idea is that it's */*settings.[ch], with lib-* subdirs listed first, and *.h before the corresponding *.c files. +SETTING_FILES = \ + lib-storage/mail-storage-settings.h \ + lib-storage/index/pop3c/pop3c-settings.h \ + lib-storage/index/mbox/mbox-settings.h \ + lib-storage/index/maildir/maildir-settings.h \ + lib-storage/index/imapc/imapc-settings.h \ + lib-storage/index/dbox-multi/mdbox-settings.h \ + lib-smtp/smtp-submit-settings.h \ + lib-settings/settings.h \ + lib-master/service-settings.h \ + lib-master/master-service-ssl-settings.h \ + lib-master/master-service-settings.h \ + lib-lda/lda-settings.h \ + lib-dict-backend/dict-sql-settings.h \ + lib-dict-backend/dict-ldap-settings.h \ + lib-storage/mail-storage-settings.c \ + lib-storage/index/pop3c/pop3c-settings.c \ + lib-storage/index/mbox/mbox-settings.c \ + lib-storage/index/maildir/maildir-settings.c \ + lib-storage/index/imapc/imapc-settings.c \ + lib-storage/index/dbox-multi/mdbox-settings.c \ + lib-lda/lda-settings.c \ + lib-dict-backend/dict-sql-settings.c \ + lib-dict-backend/dict-ldap-settings.c \ + submission/submission-settings.h \ + submission-login/submission-login-settings.h \ + stats/stats-settings.h \ + replication/replicator/replicator-settings.h \ + replication/aggregator/aggregator-settings.h \ + pop3/pop3-settings.h \ + pop3-login/pop3-login-settings.h \ + plugins/quota/quota-status-settings.h \ + old-stats/stats-settings.h \ + master/master-settings.h \ + login-common/login-settings.h \ + lmtp/lmtp-settings.h \ + imap/imap-settings.h \ + imap-urlauth/imap-urlauth-worker-settings.h \ + imap-urlauth/imap-urlauth-settings.h \ + imap-urlauth/imap-urlauth-login-settings.h \ + imap-login/imap-login-settings.h \ + doveadm/doveadm-settings.h \ + director/director-settings.h \ + dict/dict-settings.h \ + auth/auth-settings.h \ + util/tcpwrap-settings.c \ + util/health-check-settings.c \ + submission/submission-settings.c \ + submission-login/submission-login-settings.c \ + stats/stats-settings.c \ + replication/replicator/replicator-settings.c \ + replication/aggregator/aggregator-settings.c \ + pop3/pop3-settings.c \ + pop3-login/pop3-login-settings.c \ + plugins/quota/quota-status-settings.c \ + old-stats/stats-settings.c \ + master/master-settings.c \ + login-common/login-settings.c \ + log/log-settings.c \ + lmtp/lmtp-settings.c \ + ipc/ipc-settings.c \ + indexer/indexer-worker-settings.c \ + indexer/indexer-settings.c \ + imap/imap-settings.c \ + imap-urlauth/imap-urlauth-worker-settings.c \ + imap-urlauth/imap-urlauth-settings.c \ + imap-urlauth/imap-urlauth-login-settings.c \ + imap-login/imap-login-settings.c \ + imap-hibernate/imap-hibernate-settings.c \ + doveadm/doveadm-settings.c \ + dns/dns-client-settings.c \ + director/director-settings.c \ + dict/dict-settings.c \ + config/config-settings.c \ + auth/auth-settings.c \ + anvil/anvil-settings.c \ + +ifeq ($(DLUA_WITH_YIELDS),y) +# Internally, the dict methods yield via lua_yieldk() as implemented in Lua 5.3 and newer. +LIBDOVECOT_OBJS += \ + lib-dict/dict-iter-lua.o \ + lib-dict/dict-lua.o \ + lib-dict/dict-txn-lua.o \ + +TEST_PROGS += lib-lua/test-dict-lua +endif + +ifeq ($(BUILD_OPENSSL),y) +LIBDOVECOT_OBJS += \ + lib-ssl-iostream/dovecot-openssl-common.o \ + lib-ssl-iostream/iostream-openssl-common.o \ + lib-ssl-iostream/iostream-openssl-context.o \ + lib-ssl-iostream/iostream-openssl.o \ + lib-ssl-iostream/istream-openssl.o \ + lib-ssl-iostream/ostream-openssl.o \ + +LDLIBS += -lssl -lcrypto + +TEST_PROGS += lib-ssl-iostream/test-iostream-ssl +endif + +ifeq ($(USE_FUZZER),y) +OTHER_PROGS += \ + lib-imap/fuzz-imap-utf7 \ + lib-imap/fuzz-imap-bodystructure \ + lib-mail/fuzz-message-parser \ + lib-smtp/fuzz-smtp-server \ + +endif + +ifeq ($(TCPWRAPPERS),y) +LIBEXEC_PROGS += util/tcpwrap +endif + +ifeq ($(BUILD_LIBICU),y) +LIBDOVECOT_OBJS += lib-fts/fts-icu.o +TEST_PROGS += lib-fts/test-fts-icu +endif + +ifeq ($(BUILD_FTS_EXTTEXTCAT),y) +TEST_PROGS += lib-fts/test-fts-language +endif + +ifeq ($(HAVE_LDAP),y) +# was libdovecot_ldap +LIBDOVECOT_OBJS += \ + lib-ldap/ldap-client.o \ + lib-ldap/ldap-compare.o \ + lib-ldap/ldap-connection-pool.o \ + lib-ldap/ldap-connection.o \ + lib-ldap/ldap-entry.o \ + lib-ldap/ldap-iterator.o \ + lib-ldap/ldap-search.o \ + +endif + +ifeq ($(HAVE_LUA),y) +# was libdovecot_lua +LIBDOVECOT_OBJS += \ + lib-lua/dlua-compat.o \ + lib-lua/dlua-dovecot-http.o \ + lib-lua/dlua-dovecot.o \ + lib-lua/dlua-error.o \ + lib-lua/dlua-pushstring.o \ + lib-lua/dlua-resume.o \ + lib-lua/dlua-script.o \ + lib-lua/dlua-table.o \ + lib-lua/dlua-thread.o \ + +# was libdovecot_storage_lua +LIBDOVECOT_OBJS += \ + lib-storage/mail-lua.o \ + lib-storage/mail-storage-lua.o \ + lib-storage/mail-user-lua.o \ + lib-storage/mailbox-attribute-lua.o \ + lib-storage/mailbox-lua.o \ + +# was lib01_mail_lua_plugin +LIBDOVECOT_OBJS += plugins/mail-lua/mail-lua-plugin.o + +# was lib22_push_notification_lua_plugin +LIBDOVECOT_OBJS += plugins/push-notification/push-notification-driver-lua.o + +TEST_PROGS += lib-lua/test-lua +endif + +ifeq ($(HAVE_APPARMOR),y) +# was lib01_apparmor_plugin +LIBDOVECOT_OBJS += plugins/apparmor/apparmor-plugin.o +endif + +ifeq ($(BUILD_SOLR),y) +# was lib21_fts_solr_plugin +LIBDOVECOT_OBJS += \ + plugins/fts-solr/fts-backend-solr-old.o \ + plugins/fts-solr/fts-backend-solr.o \ + plugins/fts-solr/fts-solr-plugin.o \ + plugins/fts-solr/solr-connection.o \ + plugins/fts-solr/solr-response.o \ + +TEST_PROGS += plugins/fts-solr/test-solr-response +endif + +ALL_PROGS = $(BIN_PROGS) $(LIBEXEC_PROGS) $(TEST_PROGS) $(OTHER_PROGS) + +all: $(ALL_PROGS) + +# +# Specially generated files +# + +lib/unichar.o: lib/unichar.c lib/unicodemap.c + +lib/unicodemap.c: lib/unicodemap.pl lib/UnicodeData.txt + $(PERL) lib/unicodemap.pl < lib/UnicodeData.txt > $@.new + mv -f $@.new $@ + +%.c: %.l + $(FLEX) -o $@ $< + +%.c: %.y + $(BISON) -o $@ $< + +lib/event-filter-lexer.o: lib/event-filter-lexer.c lib/event-filter-parser.c + +config/all-settings.c: config/settings-get.pl $(SETTING_FILES) + $(PERL) config/settings-get.pl $(SETTING_FILES) > $@.new + mv -f $@.new $@ + +lib-fts/fts-tokenizer-generic.o: lib-fts/fts-tokenizer-generic.c lib-fts/word-boundary-data.c lib-fts/word-break-data.c + +lib-fts/word-boundary-data.c: lib-fts/word-properties.pl lib-fts/WordBreakProperty.txt + $(PERL) lib-fts/word-properties.pl boundaries lib-fts/WordBreakProperty.txt > $@.new + mv -f $@.new $@ + +lib-fts/word-break-data.c: lib-fts/word-properties.pl lib-fts/PropList.txt + $(PERL) lib-fts/word-properties.pl breaks lib-fts/PropList.txt > $@.new + mv -f $@.new $@ + +# +# Program definitions +# + +# For brevity, use the implicit linking rule where possible, i.e. where the target name matches one of the .o files, which happens quite often especially for the test programs. Otherwise, use the $(LINK) recipe. + +anvil/anvil: \ + anvil/anvil-connection.o \ + anvil/anvil-settings.o \ + anvil/connect-limit.o \ + anvil/main.o \ + anvil/penalty.o + $(LINK) +anvil/test-penalty: anvil/test-penalty.o anvil/penalty.o + +auth/auth: auth/main.o + $(LINK) +auth/checkpassword-reply: auth/checkpassword-reply.o +auth/test-libpassword: auth/test-libpassword.o +auth/test-auth-cache: auth/test-auth-cache.o auth/auth-cache.o +auth/test-auth: \ + auth/test-auth-request-fields.o \ + auth/test-auth-request-var-expand.o \ + auth/test-db-dict.o \ + auth/test-lua.o \ + auth/test-main.o \ + auth/test-mock.o \ + auth/test-username-filter.o + $(LINK) +auth/test-mech: auth/test-mech.o auth/test-mock.o + +config/config: config/all-settings.o config/main.o + $(LINK) +config/doveconf: config/all-settings.o config/doveconf.o +config/test-config-parser: config/test-config-parser.o + +dict/dict: \ + dict/dict-commands.o \ + dict/dict-connection.o \ + dict/dict-init-cache.o \ + dict/dict-settings.o \ + dict/main.o + $(LINK) + +director/director: \ + director/auth-connection.o \ + director/director-connection.o \ + director/director-host.o \ + director/director-request.o \ + director/director-settings.o \ + director/director.o \ + director/doveadm-connection.o \ + director/login-connection.o \ + director/mail-host.o \ + director/main.o \ + director/notify-connection.o \ + director/user-directory.o +director/director-test: director/director-test.o +director/test-user-directory: director/test-user-directory.o director/user-directory.o + +dns/dns-client: dns/dns-client-settings.o dns/dns-client.o + +doveadm/doveadm: \ + doveadm/doveadm.o \ + doveadm/doveadm-print-flow.o \ + doveadm/doveadm-print-pager.o \ + doveadm/doveadm-print-tab.o \ + doveadm/doveadm-print-table.o \ + doveadm/doveadm-pw.o +doveadm/doveadm-server: \ + doveadm/client-connection-http.o \ + doveadm/client-connection-tcp.o \ + doveadm/client-connection.o \ + doveadm/doveadm-auth-server.o \ + doveadm/doveadm-print-server.o \ + doveadm/main.o + $(LINK) + +doveadm/dsync/test-dsync-mailbox-tree-sync: doveadm/dsync/test-dsync-mailbox-tree-sync.o + +imap-hibernate/imap-hibernate: \ + imap-hibernate/imap-client.o \ + imap-hibernate/imap-hibernate-client.o \ + imap-hibernate/imap-hibernate-settings.o \ + imap-hibernate/imap-master-connection.o \ + imap-hibernate/main.o + $(LINK) + +imap-login/imap-login: \ + imap-login/client-authenticate.o \ + imap-login/imap-login-client.o \ + imap-login/imap-login-cmd-id.o \ + imap-login/imap-login-commands.o \ + imap-login/imap-login-settings.o \ + imap-login/imap-proxy.o + $(LINK) + +imap-urlauth/imap-urlauth: \ + imap-urlauth/imap-urlauth-client.o \ + imap-urlauth/imap-urlauth-settings.o \ + imap-urlauth/imap-urlauth.o + $(LINK) +imap-urlauth/imap-urlauth-login: \ + imap-urlauth/imap-urlauth-login-settings.o \ + imap-urlauth/imap-urlauth-login.o +imap-urlauth/imap-urlauth-worker: \ + imap-urlauth/imap-urlauth-worker-settings.o \ + imap-urlauth/imap-urlauth-worker.o + +imap/imap: imap/main.o imap/imap-client.o + $(LINK) +imap/test-imap-client-hibernate: imap/test-imap-client-hibernate.o imap/imap-client.o + +indexer/indexer: \ + indexer/indexer-client.o \ + indexer/indexer-queue.o \ + indexer/indexer-settings.o \ + indexer/indexer.o \ + indexer/worker-connection.o \ + indexer/worker-pool.o +indexer/indexer-worker: \ + indexer/indexer-worker-settings.o \ + indexer/indexer-worker.o \ + indexer/master-connection.o + +ipc/ipc: \ + ipc/client.o \ + ipc/ipc-connection.o \ + ipc/ipc-group.o \ + ipc/ipc-settings.o \ + ipc/main.o + $(LINK) + +lda/dovecot-lda: lda/main.o + $(LINK) + +lib-auth/test-auth-master: lib-auth/test-auth-master.o + +lib-charset/test-charset: lib-charset/test-charset.o + +lib-compression/bench-compression: lib-compression/bench-compression.o +lib-compression/test-compression: lib-compression/test-compression.o + +lib-dict-backend/test-dict-sql: lib-dict-backend/test-dict-sql.o + +lib-dict-extra/test-dict-fs: lib-dict-extra/test-dict-fs.o + +lib-dict/test-dict: lib-dict/test-dict.o +lib-dict/test-dict-client: lib-dict/test-dict-client.o + +lib-dns/test-dns-util: lib-dns/test-dns-util.o + +lib-fs/test-fs-metawrap: lib-fs/test-fs-metawrap.o +lib-fs/test-fs-posix: lib-fs/test-fs-posix.o + +lib-fts/test-fts-filter: lib-fts/test-fts-filter.o +lib-fts/test-fts-icu: lib-fts/test-fts-icu.o +lib-fts/test-fts-language: lib-fts/test-fts-language.o +lib-fts/test-fts-tokenizer: lib-fts/test-fts-tokenizer.o + +lib-http/test-http-auth: lib-http/test-http-auth.o +lib-http/test-http-client: lib-http/test-http-client.o +lib-http/test-http-client-errors: lib-http/test-http-client-errors.o +lib-http/test-http-client-request: lib-http/test-http-client-request.o +lib-http/test-http-date: lib-http/test-http-date.o +lib-http/test-http-header-parser: lib-http/test-http-header-parser.o +lib-http/test-http-payload: lib-http/test-http-payload.o +lib-http/test-http-request-parser: lib-http/test-http-request-parser.o +lib-http/test-http-response-parser: lib-http/test-http-response-parser.o +lib-http/test-http-server: lib-http/test-http-server.o +lib-http/test-http-server-errors: lib-http/test-http-server-errors.o +lib-http/test-http-transfer: lib-http/test-http-transfer.o +lib-http/test-http-url: lib-http/test-http-url.o + +lib-imap-client/test-imapc-client: lib-imap-client/test-imapc-client.o + +lib-imap/fuzz-imap-bodystructure: lib-imap/fuzz-imap-bodystructure.o +lib-imap/fuzz-imap-utf7: lib-imap/fuzz-imap-utf7.o +lib-imap/test-imap-bodystructure: lib-imap/test-imap-bodystructure.o +lib-imap/test-imap-envelope: lib-imap/test-imap-envelope.o +lib-imap/test-imap-match: lib-imap/test-imap-match.o +lib-imap/test-imap-parser: lib-imap/test-imap-parser.o +lib-imap/test-imap-quote: lib-imap/test-imap-quote.o +lib-imap/test-imap-url: lib-imap/test-imap-url.o +lib-imap/test-imap-utf7: lib-imap/test-imap-utf7.o +lib-imap/test-imap-util: lib-imap/test-imap-util.o + +lib-index/test-mail-cache-fields: lib-index/test-mail-cache-fields.o +lib-index/test-mail-cache-purge: lib-index/test-mail-cache-purge.o +lib-index/test-mail-cache: lib-index/test-mail-cache.o +lib-index/test-mail-index-map: lib-index/test-mail-index-map.o +lib-index/test-mail-index-modseq: lib-index/test-mail-index-modseq.o +lib-index/test-mail-index-sync-ext: lib-index/test-mail-index-sync-ext.o +lib-index/test-mail-index-transaction-finish: lib-index/test-mail-index-transaction-finish.o +lib-index/test-mail-index-transaction-update: lib-index/test-mail-index-transaction-update.o +lib-index/test-mail-index-write: lib-index/test-mail-index-write.o +lib-index/test-mail-index: lib-index/test-mail-index.o +lib-index/test-mail-transaction-log-append: lib-index/test-mail-transaction-log-append.o +lib-index/test-mail-transaction-log-file: lib-index/test-mail-transaction-log-file.o +lib-index/test-mail-transaction-log-view: lib-index/test-mail-transaction-log-view.o + +lib-lua/test-dict-lua: lib-lua/test-dict-lua.o +lib-lua/test-lua: lib-lua/test-lua.o + +lib-mail/fuzz-message-parser: lib-mail/fuzz-message-parser.o +lib-mail/test-istream-attachment: lib-mail/test-istream-attachment.o +lib-mail/test-istream-binary-converter: lib-mail/test-istream-binary-converter.o +lib-mail/test-istream-dot: lib-mail/test-istream-dot.o +lib-mail/test-istream-header-filter: lib-mail/test-istream-header-filter.o +lib-mail/test-istream-qp-decoder: lib-mail/test-istream-qp-decoder.o +lib-mail/test-istream-qp-encoder: lib-mail/test-istream-qp-encoder.o +lib-mail/test-mail-html2text: lib-mail/test-mail-html2text.o +lib-mail/test-mail-user-hash: lib-mail/test-mail-user-hash.o +lib-mail/test-mbox-from: lib-mail/test-mbox-from.o +lib-mail/test-message-address: lib-mail/test-message-address.o +lib-mail/test-message-date: lib-mail/test-message-date.o +lib-mail/test-message-decoder: lib-mail/test-message-decoder.o +lib-mail/test-message-header-decode: lib-mail/test-message-header-decode.o +lib-mail/test-message-header-encode: lib-mail/test-message-header-encode.o +lib-mail/test-message-header-hash: lib-mail/test-message-header-hash.o +lib-mail/test-message-header-parser: lib-mail/test-message-header-parser.o +lib-mail/test-message-id: lib-mail/test-message-id.o +lib-mail/test-message-parser: lib-mail/test-message-parser.o +lib-mail/test-message-part-serialize: lib-mail/test-message-part-serialize.o +lib-mail/test-message-part: lib-mail/test-message-part.o +lib-mail/test-message-search: lib-mail/test-message-search.o +lib-mail/test-message-size: lib-mail/test-message-size.o +lib-mail/test-message-snippet: lib-mail/test-message-snippet.o +lib-mail/test-ostream-dot: lib-mail/test-ostream-dot.o +lib-mail/test-qp-decoder: lib-mail/test-qp-decoder.o +lib-mail/test-qp-encoder: lib-mail/test-qp-encoder.o +lib-mail/test-quoted-printable: lib-mail/test-quoted-printable.o +lib-mail/test-rfc2231-parser: lib-mail/test-rfc2231-parser.o +lib-mail/test-rfc822-parser: lib-mail/test-rfc822-parser.o + +lib-master/test-event-stats: lib-master/test-event-stats.o +lib-master/test-master-service-settings-cache: lib-master/test-master-service-settings-cache.o + +lib-program-client/test-program-client-local: lib-program-client/test-program-client-local.o +lib-program-client/test-program-client-net: lib-program-client/test-program-client-net.o +lib-program-client/test-program-client-unix: lib-program-client/test-program-client-unix.o + +lib-sasl/test-sasl-client: lib-sasl/test-sasl-client.o + +lib-settings/test-settings-parser: lib-settings/test-settings-parser.o +lib-settings/test-settings: lib-settings/test-settings.o + +lib-smtp/fuzz-smtp-server: lib-smtp/fuzz-smtp-server.o +lib-smtp/test-smtp-address: lib-smtp/test-smtp-address.o +lib-smtp/test-smtp-client-errors: lib-smtp/test-smtp-client-errors.o +lib-smtp/test-smtp-command-parser: lib-smtp/test-smtp-command-parser.o +lib-smtp/test-smtp-params: lib-smtp/test-smtp-params.o +lib-smtp/test-smtp-payload: lib-smtp/test-smtp-payload.o +lib-smtp/test-smtp-reply: lib-smtp/test-smtp-reply.o +lib-smtp/test-smtp-server-errors: lib-smtp/test-smtp-server-errors.o +lib-smtp/test-smtp-submit: lib-smtp/test-smtp-submit.o +lib-smtp/test-smtp-syntax: lib-smtp/test-smtp-syntax.o + +lib-ssl-iostream/test-iostream-ssl: lib-ssl-iostream/test-iostream-ssl.o + +lib-storage/test-mail-search-args-imap: lib-storage/test-mail-search-args-imap.o +lib-storage/test-mail-search-args-simplify: lib-storage/test-mail-search-args-simplify.o +lib-storage/test-mail-storage: lib-storage/test-mail-storage.o +lib-storage/test-mail: lib-storage/test-mail.o +lib-storage/test-mailbox-get: lib-storage/test-mailbox-get.o +lib-storage/test-mailbox-list: lib-storage/test-mailbox-list.o + +lib/test-lib: \ + lib/test-aqueue.o \ + lib/test-array.o \ + lib/test-backtrace.o \ + lib/test-base32.o \ + lib/test-base64.o \ + lib/test-bits.o \ + lib/test-bsearch-insert-pos.o \ + lib/test-buffer-istream.o \ + lib/test-buffer.o \ + lib/test-byteorder.o \ + lib/test-connection.o \ + lib/test-cpu-limit.o \ + lib/test-crc32.o \ + lib/test-data-stack.o \ + lib/test-env-util.o \ + lib/test-event-category-register.o \ + lib/test-event-filter-expr.o \ + lib/test-event-filter-merge.o \ + lib/test-event-filter-parser.o \ + lib/test-event-filter.o \ + lib/test-event-flatten.o \ + lib/test-event-log.o \ + lib/test-failures.o \ + lib/test-fd-util.o \ + lib/test-file-cache.o \ + lib/test-file-create-locked.o \ + lib/test-guid.o \ + lib/test-hash-format.o \ + lib/test-hash-method.o \ + lib/test-hash.o \ + lib/test-hex-binary.o \ + lib/test-hmac.o \ + lib/test-imem.o \ + lib/test-ioloop.o \ + lib/test-iostream-proxy.o \ + lib/test-iostream-pump.o \ + lib/test-iostream-temp.o \ + lib/test-iso8601-date.o \ + lib/test-istream-base64-decoder.o \ + lib/test-istream-base64-encoder.o \ + lib/test-istream-chain.o \ + lib/test-istream-concat.o \ + lib/test-istream-crlf.o \ + lib/test-istream-failure-at.o \ + lib/test-istream-jsonstr.o \ + lib/test-istream-multiplex.o \ + lib/test-istream-seekable.o \ + lib/test-istream-sized.o \ + lib/test-istream-tee.o \ + lib/test-istream-try.o \ + lib/test-istream-unix.o \ + lib/test-istream.o \ + lib/test-json-parser.o \ + lib/test-json-tree.o \ + lib/test-lib-event.o \ + lib/test-lib-signals.o \ + lib/test-lib.o \ + lib/test-llist.o \ + lib/test-log-throttle.o \ + lib/test-macros.o \ + lib/test-malloc-overflow.o \ + lib/test-memarea.o \ + lib/test-mempool-allocfree.o \ + lib/test-mempool-alloconly.o \ + lib/test-mempool.o \ + lib/test-multiplex.o \ + lib/test-net.o \ + lib/test-numpack.o \ + lib/test-ostream-buffer.o \ + lib/test-ostream-failure-at.o \ + lib/test-ostream-file.o \ + lib/test-ostream-multiplex.o \ + lib/test-path-util.o \ + lib/test-pkcs5.o \ + lib/test-primes.o \ + lib/test-printf-format-fix.o \ + lib/test-priorityq.o \ + lib/test-random.o \ + lib/test-seq-range-array.o \ + lib/test-seq-set-builder.o \ + lib/test-stats-dist.o \ + lib/test-str-find.o \ + lib/test-str-sanitize.o \ + lib/test-str-table.o \ + lib/test-str.o \ + lib/test-strescape.o \ + lib/test-strfuncs.o \ + lib/test-strnum.o \ + lib/test-time-util.o \ + lib/test-unichar.o \ + lib/test-uri.o \ + lib/test-utc-mktime.o \ + lib/test-var-expand.o \ + lib/test-wildcard-match.o + +lmtp/lmtp: \ + lmtp/lmtp-client.o \ + lmtp/lmtp-commands.o \ + lmtp/lmtp-local.o \ + lmtp/lmtp-proxy.o \ + lmtp/lmtp-recipient.o \ + lmtp/lmtp-settings.o \ + lmtp/main.o + $(LINK) + +log/log: \ + log/doveadm-connection.o \ + log/log-connection.o \ + log/log-error-buffer.o \ + log/log-settings.o \ + log/main.o + $(LINK) + +master/dovecot: \ + master/capabilities-posix.o \ + master/dup2-array.o \ + master/main.o \ + master/master-client.o \ + master/master-settings.o \ + master/service-anvil.o \ + master/service-listen.o \ + master/service-log.o \ + master/service-monitor.o \ + master/service-process-notify.o \ + master/service-process.o \ + master/service.o + $(LINK) +master/test-auth-client: master/test-auth-client.o +master/test-auth-master: master/test-auth-master.o +master/test-master-login-auth: master/test-master-login-auth.o + +old-stats/old-stats: \ + old-stats/client-export.o \ + old-stats/client-reset.o \ + old-stats/client.o \ + old-stats/fifo-input-connection.o \ + old-stats/global-memory.o \ + old-stats/mail-command.o \ + old-stats/mail-domain.o \ + old-stats/mail-ip.o \ + old-stats/mail-session.o \ + old-stats/mail-stats.o \ + old-stats/mail-user.o \ + old-stats/main.o \ + old-stats/stats-carbon.o \ + old-stats/stats-settings.o + $(LINK) + +plugins/acl/test-acl: plugins/acl/test-acl.o +plugins/fts-solr/test-solr-response: plugins/fts-solr/test-solr-response.o +plugins/fts-squat/squat-test: plugins/fts-squat/squat-test.o +plugins/fts/xml2text: plugins/fts/xml2text.o +plugins/pop3-migration/test-pop3-migration-plugin: plugins/pop3-migration/test-pop3-migration-plugin.o +plugins/quota/quota-status: plugins/quota/quota-status.o plugins/quota/quota-status-settings.o +plugins/quota/test-quota-util: plugins/quota/test-quota-util.o + +pop3-login/pop3-login: \ + pop3-login/client-authenticate.o \ + pop3-login/client.o \ + pop3-login/pop3-login-settings.o \ + pop3-login/pop3-proxy.o + $(LINK) + +pop3/pop3: \ + pop3/main.o \ + pop3/pop3-client.o \ + pop3/pop3-commands.o \ + pop3/pop3-settings.o + $(LINK) + +replication/aggregator/aggregator: \ + replication/aggregator/aggregator-settings.o \ + replication/aggregator/aggregator.o \ + replication/aggregator/notify-connection.o \ + replication/aggregator/replicator-connection.o +replication/replicator/replicator: \ + replication/replicator/doveadm-connection.o \ + replication/replicator/dsync-client.o \ + replication/replicator/notify-connection.o \ + replication/replicator/replicator-brain.o \ + replication/replicator/replicator-queue-auth.o \ + replication/replicator/replicator-queue.o \ + replication/replicator/replicator-settings.o \ + replication/replicator/replicator.o + +stats/stats: stats/main.o + $(LINK) +stats/test-client-reader: stats/test-client-reader.o +stats/test-client-writer: stats/test-client-writer.o +stats/test-stats-metrics: stats/test-stats-metrics.o + +submission-login/submission-login: \ + submission-login/client-authenticate.o \ + submission-login/client.o \ + submission-login/submission-login-settings.o \ + submission-login/submission-proxy.o + $(LINK) + +submission/submission: \ + submission/main.o \ + submission/submission-backend-relay.o \ + submission/submission-backend.o \ + submission/submission-client.o \ + submission/submission-commands.o \ + submission/submission-recipient.o \ + submission/submission-settings.o + $(LINK) + +util/gdbhelper: util/gdbhelper.o +util/maildirlock: util/maildirlock.o +util/rawlog: util/rawlog.o +util/script-login: util/script-login.o +util/script: util/script.o util/health-check-settings.o +util/tcpwrap: util/tcpwrap.o util/tcpwrap-settings.o +util/test-fs: util/test-fs.o + +$(ALL_PROGS): libdovecot.a + +libdovecot.a: $(LIBDOVECOT_OBJS) + $(AR) -rcs $@ $^ + +check: all + for bin in $(TEST_PROGS); do $(RUN_TEST) ./$$bin || exit 1; done + env NOCHILDREN=yes $(RUN_TEST) ./lib-program-client/test-program-client-local + env NOCHILDREN=yes $(RUN_TEST) ./lib-smtp/test-smtp-submit + +install: + install -d $(DESTDIR)$(bindir) + install $(BIN_PROGS) $(DESTDIR)$(bindir)/ + install util/dovecot-sysreport $(DESTDIR)$(bindir)/ + ln -sf doveadm $(DESTDIR)$(bindir)/dsync + install -d $(DESTDIR)$(pkglibexecdir) + install $(LIBEXEC_PROGS) $(DESTDIR)$(pkglibexecdir)/ + install util/health-check.sh $(DESTDIR)$(pkglibexecdir)/ + install plugins/fts/decode2text.sh $(DESTDIR)$(pkglibexecdir)/ + install -d $(DESTDIR)$(pkgdatadir)/stopwords + for LANG in da de en es fi fr it nl no pt ro ru sv tr ; do + install -m 644 lib-fts/stopwords/stopwords_$$LANG.txt $(DESTDIR)$(pkgdatadir)/stopwords/ + done + +clean: + $(RM) libdovecot.a $(ALL_PROGS) */*.o config/all-settings.c lib-fts/word-boundary-data.c lib-fts/word-break-data.c lib/unicodemap.c lib/event-filter-lexer.c lib/event-filter-parser.c lib/event-filter-parser.h diff --git a/src/config/doveconf.c b/src/config/doveconf.c index 79ea9e8a1d..fec202f72d 100644 --- a/src/config/doveconf.c +++ b/src/config/doveconf.c @@ -20,7 +20,6 @@ #include "config-connection.h" #include "config-parser.h" #include "config-request.h" -#include "dovecot-version.h" #include #include @@ -965,7 +964,7 @@ int main(int argc, char *argv[]) } else if (!simple_output) { /* print the config file path before parsing it, so in case of errors it's still shown */ - printf("# "DOVECOT_VERSION_FULL": %s\n", config_path); + printf("# "PACKAGE_VERSION": %s\n", config_path); print_plugin_banner = TRUE; fflush(stdout); } @@ -983,14 +982,10 @@ int main(int argc, char *argv[]) } } - if ((ret = config_parse_file(dump_defaults ? NULL : config_path, - expand_vars, - parse_full_config ? NULL : wanted_modules, - &error)) == 0 && - access(EXAMPLE_CONFIG_DIR, X_OK) == 0) { - i_fatal("%s (copy example configs from "EXAMPLE_CONFIG_DIR"/)", - error); - } + ret = config_parse_file(dump_defaults ? NULL : config_path, + expand_vars, + parse_full_config ? NULL : wanted_modules, + &error); if ((ret == -1 && exec_args != NULL) || ret == 0 || ret == -2) i_fatal("%s", error); diff --git a/src/doveadm/client-connection-http.c b/src/doveadm/client-connection-http.c index c59d9ddac4..d4d8b95449 100644 --- a/src/doveadm/client-connection-http.c +++ b/src/doveadm/client-connection-http.c @@ -22,7 +22,6 @@ #include "http-request.h" #include "http-response.h" #include "http-url.h" -#include "doveadm-util.h" #include "doveadm-server.h" #include "doveadm-mail.h" #include "doveadm-print.h" diff --git a/src/doveadm/doveadm-util.c b/src/doveadm/doveadm-util.c index daf4cf3592..fd5b60b195 100644 --- a/src/doveadm/doveadm-util.c +++ b/src/doveadm/doveadm-util.c @@ -109,23 +109,6 @@ int doveadm_connect(const char *path) return doveadm_connect_with_default_port(path, 0); } -int i_strccdascmp(const char *a, const char *b) -{ - while(*a != '\0' && *b != '\0') { - if ((*a == ' ' || *a == '-') && *a != *b && *b != ' ' && *b != '-') { - if (i_toupper(*(a+1)) == *(b)) a++; - else break; - } else if ((*b == ' ' || *b == '-') && *a != *b && *a != ' ' && *a != '-') { - if (*a == i_toupper(*(b+1))) b++; - else break; - } else if (!((*a == ' ' || *a == '-') && - (*b == ' ' || *b == '-')) && - (*a != *b)) break; - a++; b++; - } - return *a-*b; -} - char doveadm_log_type_to_char(enum log_type type) { switch(type) { diff --git a/src/doveadm/doveadm-util.h b/src/doveadm/doveadm-util.h index 6049d36cbf..2f93a74349 100644 --- a/src/doveadm/doveadm-util.h +++ b/src/doveadm/doveadm-util.h @@ -23,8 +23,4 @@ void doveadm_unload_modules(void); char doveadm_log_type_to_char(enum log_type type) ATTR_PURE; bool doveadm_log_type_from_char(char c, enum log_type *type_r); -/* Similar to strcmp(), except "camel case" == "camel-case" == "camelCase". - Otherwise the comparison is case-sensitive. */ -int i_strccdascmp(const char *a, const char *b) ATTR_PURE; - #endif diff --git a/src/doveadm/test-doveadm-util.c b/src/doveadm/test-doveadm-util.c deleted file mode 100644 index aec1b39ae1..0000000000 --- a/src/doveadm/test-doveadm-util.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2016-2018 Dovecot authors, see the included COPYING file */ - -#include "lib.h" -#include "test-common.h" -#include "doveadm-settings.h" -#include "doveadm-util.h" - -struct doveadm_settings *doveadm_settings; /* just to avoid linker error */ - -static void test_i_strccdascmp(void) -{ - test_begin("i_strccdascmp()"); - - test_assert(i_strccdascmp("", "")==0); - test_assert(i_strccdascmp("", "-")!=0); - test_assert(i_strccdascmp("-", "")!=0); - test_assert(i_strccdascmp("-", "-")==0); - test_assert(i_strccdascmp("-\0baz", "-\0bar")==0); - test_assert(i_strccdascmp("", "a")!=0); - test_assert(i_strccdascmp("a", "")!=0); - test_assert(i_strccdascmp("a", "a")==0); - test_assert(i_strccdascmp("a-", "a-")==0); - test_assert(i_strccdascmp("a-a", "a-a")==0); - test_assert(i_strccdascmp("ca", "ba")!=0); - - test_assert(i_strccdascmp("camel case", "camel case")==0); - test_assert(i_strccdascmp("camel case", "camel-case")==0); - test_assert(i_strccdascmp("camel case", "camelCase")==0); - - test_assert(i_strccdascmp("camel case", "camel-case")==0); - test_assert(i_strccdascmp("camel-case", "camel-case")==0); - test_assert(i_strccdascmp("camelCase", "camel-case")==0); - - test_assert(i_strccdascmp("camel case", "camel Case")==-i_strccdascmp("camel Case", "camel case")); - test_assert(i_strccdascmp("camel-case", "camel Case")==-i_strccdascmp("camel Case", "camel-case")); - test_assert(i_strccdascmp("camel dase", "camel case")==-i_strccdascmp("camel case", "camel dase")); - - test_end(); -} - -int main(void) -{ - static void (*const test_functions[])(void) = { - test_i_strccdascmp, - NULL - }; - return test_run(test_functions); -} diff --git a/src/lib-dict-backend/dict-drivers-register.c b/src/lib-dict-backend/dict-drivers-register.c new file mode 100644 index 0000000000..dc72575215 --- /dev/null +++ b/src/lib-dict-backend/dict-drivers-register.c @@ -0,0 +1,36 @@ +#include "lib.h" +#include "dict.h" +#include "ldap-client.h" +#include "dict-sql.h" + +#ifdef BUILD_CDB +extern struct dict dict_driver_cdb; +#endif +#ifdef BUILTIN_LDAP +extern struct dict dict_driver_ldap; +#endif + +void dict_drivers_register_all(void) { + dict_drivers_register_builtin(); + dict_sql_register(); +#ifdef BUILD_CDB + dict_driver_register(&dict_driver_cdb); +#endif +#ifdef BUILTIN_LDAP + dict_driver_register(&dict_driver_ldap); +#endif +} + +void dict_drivers_unregister_all(void) { +#ifdef BUILTIN_LDAP + ldap_clients_cleanup(); +#endif + dict_drivers_unregister_builtin(); + dict_sql_unregister(); +#ifdef BUILD_CDB + dict_driver_unregister(&dict_driver_cdb); +#endif +#ifdef BUILTIN_LDAP + dict_driver_unregister(&dict_driver_ldap); +#endif +} diff --git a/src/lib-dict-backend/test-dict-sql.c b/src/lib-dict-backend/test-dict-sql.c index 4de45eb5c1..91724804af 100644 --- a/src/lib-dict-backend/test-dict-sql.c +++ b/src/lib-dict-backend/test-dict-sql.c @@ -21,7 +21,7 @@ static void test_setup(struct dict **dict_r) }; struct dict *dict = NULL; - if (dict_init("mysql:" DICT_SRC_DIR "/dict.conf", &set, &dict, &error) < 0) + if (dict_init("mysql:" TOP_SRC_DIR "/lib-dict-backend/dict.conf", &set, &dict, &error) < 0) i_fatal("cannot initialize dict: %s", error); *dict_r = dict; diff --git a/src/lib-fts/test-fts-filter.c b/src/lib-fts/test-fts-filter.c index f93cc7401a..aaa1f73d1b 100644 --- a/src/lib-fts/test-fts-filter.c +++ b/src/lib-fts/test-fts-filter.c @@ -10,7 +10,7 @@ #include -static const char *const stopword_settings[] = {"stopwords_dir", TEST_STOPWORDS_DIR, NULL}; +static const char *const stopword_settings[] = {"stopwords_dir", TOP_SRC_DIR"/lib-fts/stopwords", NULL}; static struct fts_language english_language = { .name = "en" }; static struct fts_language french_language = { .name = "fr" }; static struct fts_language norwegian_language = { .name = "no" }; @@ -576,7 +576,7 @@ static void test_fts_filter_normalizer_swedish_short_default_id(void) test_end(); } -/* UDHRDIR comes from Automake AM_CPPFLAGS */ +#define DUDHRDIR TOP_SRC_DIR"/lib-fts" #define UDHR_FRA_NAME "/udhr_fra.txt" static void test_fts_filter_normalizer_french(void) { diff --git a/src/lib-imap/imap-id.c b/src/lib-imap/imap-id.c index f873c5780e..1318403780 100644 --- a/src/lib-imap/imap-id.c +++ b/src/lib-imap/imap-id.c @@ -7,7 +7,6 @@ #include "imap-parser.h" #include "imap-quote.h" #include "imap-id.h" -#include "dovecot-version.h" #ifdef HAVE_SYS_UTSNAME_H # include @@ -41,8 +40,6 @@ static const char *imap_id_get_default(const char *key) return PACKAGE_NAME; if (strcasecmp(key, "version") == 0) return PACKAGE_VERSION; - if (strcasecmp(key, "revision") == 0) - return DOVECOT_REVISION; if (strcasecmp(key, "support-url") == 0) return PACKAGE_WEBPAGE; if (strcasecmp(key, "support-email") == 0) diff --git a/src/lib-smtp/test-smtp-submit.c b/src/lib-smtp/test-smtp-submit.c index f82dc4dcf8..6eb81c55ad 100644 --- a/src/lib-smtp/test-smtp-submit.c +++ b/src/lib-smtp/test-smtp-submit.c @@ -1,5 +1,7 @@ /* Copyright (c) 2016-2018 Dovecot authors, see the included COPYING file */ +#define TEST_BIN_DIR TOP_SRC_DIR"/lib-smtp/test-bin" + #include "lib.h" #include "str.h" #include "hostpid.h" diff --git a/src/lib-sql/sql-drivers-register.c b/src/lib-sql/sql-drivers-register.c new file mode 100644 index 0000000000..f74824edc7 --- /dev/null +++ b/src/lib-sql/sql-drivers-register.c @@ -0,0 +1,21 @@ +#include "lib.h" +#include "sql-api.h" + +void sql_drivers_register_all(void) { +#ifdef BUILD_PGSQL + extern struct sql_db driver_pgsql_db; + sql_driver_register(&driver_pgsql_db); +#endif +#ifdef BUILD_MYSQL + extern struct sql_db driver_mysql_db; + sql_driver_register(&driver_mysql_db); +#endif +#ifdef BUILD_SQLITE + extern struct sql_db driver_sqlite_db; + sql_driver_register(&driver_sqlite_db); +#endif +#ifdef BUILD_CASSANDRA + extern struct sql_db driver_cassandra_db; + sql_driver_register(&driver_cassandra_db); +#endif +} diff --git a/src/lib/lib.c b/src/lib/lib.c index bd2da917c1..bcd5b534ee 100644 --- a/src/lib/lib.c +++ b/src/lib/lib.c @@ -1,7 +1,6 @@ /* Copyright (c) 2001-2018 Dovecot authors, see the included COPYING file */ #include "lib.h" -#include "dovecot-version.h" #include "array.h" #include "event-filter.h" #include "env-util.h" @@ -16,10 +15,6 @@ #include #include -/* Mainly for including the full version information in core dumps. - NOTE: Don't set this const - otherwise it won't end up in core dumps. */ -char dovecot_build_info[] = DOVECOT_BUILD_INFO; - static bool lib_initialized = FALSE; int dev_null_fd = -1; diff --git a/src/lib/module-dir-load-adm.c b/src/lib/module-dir-load-adm.c index f800fc5838..a359363046 100644 --- a/src/lib/module-dir-load-adm.c +++ b/src/lib/module-dir-load-adm.c @@ -1,3 +1,4 @@ +#include "lib.h" #include "module-dir.h" #include "../plugins/fts/doveadm-fts.h" diff --git a/src/lib/module-dir-load-auth.c b/src/lib/module-dir-load-auth.c index 7c1bb1ad5a..a01bb05d49 100644 --- a/src/lib/module-dir-load-auth.c +++ b/src/lib/module-dir-load-auth.c @@ -1,3 +1,4 @@ +#include "lib.h" #include "module-dir.h" /* XXX these aren't found in any existing header, and their signature is wrong (no args instead of one) */ diff --git a/src/lib/module-dir-load-mail.c b/src/lib/module-dir-load-mail.c index edc7fbb65c..a8423000a3 100644 --- a/src/lib/module-dir-load-mail.c +++ b/src/lib/module-dir-load-mail.c @@ -1,3 +1,4 @@ +#include "lib.h" #include "module-dir.h" #include "../plugins/fts/fts-plugin.h" #include "../plugins/fts-squat/fts-squat-plugin.h" diff --git a/src/lib/module-dir-load-old-stats.c b/src/lib/module-dir-load-old-stats.c index a3aa9ee2e9..767954aa81 100644 --- a/src/lib/module-dir-load-old-stats.c +++ b/src/lib/module-dir-load-old-stats.c @@ -1,3 +1,4 @@ +#include "lib.h" #include "module-dir.h" /* XXX these aren't found in any existing header, and their signature is wrong (no args instead of one) */ diff --git a/src/lib/module-dir-load-settings.c b/src/lib/module-dir-load-settings.c index 16719e73e3..41d160cbdd 100644 --- a/src/lib/module-dir-load-settings.c +++ b/src/lib/module-dir-load-settings.c @@ -1,3 +1,4 @@ +#include "lib.h" #include "module-dir.h" void module_dir_load_settings(struct module **modules, const char *mod_names) diff --git a/src/lib/module-dir-load-ssl-iostream.c b/src/lib/module-dir-load-ssl-iostream.c index 9d8b45f598..380f8a1914 100644 --- a/src/lib/module-dir-load-ssl-iostream.c +++ b/src/lib/module-dir-load-ssl-iostream.c @@ -1,3 +1,4 @@ +#include "lib.h" #include "module-dir.h" #include "../lib-ssl-iostream/iostream-openssl.h" diff --git a/src/lib/module-dir.c b/src/lib/module-dir.c index 63d05fd249..d00b56cd85 100644 --- a/src/lib/module-dir.c +++ b/src/lib/module-dir.c @@ -145,7 +145,7 @@ void *module_get_symbol_quiet(struct module *module ATTR_UNUSED, void module_load_static(struct module **modules, const char **module_names, const char *name, - void (*)(struct module *) init_func, void (*)(void) deinit_func) + void (*init_func)(struct module *), void (*deinit_func)(void)) { if (module_want_load(module_names, name) && !module_is_loaded(*modules, name)) { diff --git a/src/lib/module-dir.h b/src/lib/module-dir.h index 5d66a245b6..78c4480398 100644 --- a/src/lib/module-dir.h +++ b/src/lib/module-dir.h @@ -13,6 +13,11 @@ struct module { struct module *next; }; +/* Define a statically linked module by supplying its name string, init and deinit functions. This first checks that the module is wanted (module_names is NULL or else includes name) and isn't already loaded in the given modules linked list. It then constructs a struct module and appends it to the list. */ +void module_load_static(struct module **modules, const char **module_names, const char *name, void (*init_func)(struct module *), void (*deinit_func)(void)); +/* Split a user-configured module names list into a temporary array, converting to base form and dropping duplicates, suitable for use as the module_names argument to module_load_static. */ +const char **module_parse_names(const char *module_names); + /* Load modules of a given type (called a "module directory" due to the prior dlopen based implementation). mod_names is a space separated list of module names to load, or NULL for all available. Each function goes in a separate file so that each module collection links into only the binaries that require it. */ void module_dir_load_adm(struct module **modules, const char *mod_names); void module_dir_load_auth(struct module **modules, const char *mod_names); diff --git a/src/lib/strccdascmp.c b/src/lib/strccdascmp.c new file mode 100644 index 0000000000..45a754f095 --- /dev/null +++ b/src/lib/strccdascmp.c @@ -0,0 +1,21 @@ +#include "lib.h" +#include "strfuncs.h" + +#include + +int i_strccdascmp(const char *a, const char *b) +{ + while(*a != '\0' && *b != '\0') { + if ((*a == ' ' || *a == '-') && *a != *b && *b != ' ' && *b != '-') { + if (i_toupper(*(a+1)) == *(b)) a++; + else break; + } else if ((*b == ' ' || *b == '-') && *a != *b && *a != ' ' && *a != '-') { + if (*a == i_toupper(*(b+1))) b++; + else break; + } else if (!((*a == ' ' || *a == '-') && + (*b == ' ' || *b == '-')) && + (*a != *b)) break; + a++; b++; + } + return *a-*b; +} diff --git a/src/lib/strfuncs.h b/src/lib/strfuncs.h index 1ddb82f8b5..8f81a4aca6 100644 --- a/src/lib/strfuncs.h +++ b/src/lib/strfuncs.h @@ -77,6 +77,11 @@ int null_strcasecmp(const char *s1, const char *s2) ATTR_PURE; int i_memcasecmp(const void *p1, const void *p2, size_t size) ATTR_PURE; int i_strcmp_p(const char *const *p1, const char *const *p2) ATTR_PURE; int i_strcasecmp_p(const char *const *p1, const char *const *p2) ATTR_PURE; + +/* Similar to strcmp(), except "camel case" == "camel-case" == "camelCase". + Otherwise the comparison is case-sensitive. */ +int i_strccdascmp(const char *a, const char *b) ATTR_PURE; + /* Returns TRUE if the two memory areas are equal. This function is safe against timing attacks, so it compares all the bytes every time. */ bool mem_equals_timing_safe(const void *p1, const void *p2, size_t size); diff --git a/src/lib/test-strfuncs.c b/src/lib/test-strfuncs.c index b5463846bd..393d1f54cf 100644 --- a/src/lib/test-strfuncs.c +++ b/src/lib/test-strfuncs.c @@ -598,6 +598,37 @@ static void test_memcspn(void) test_end(); } +static void test_i_strccdascmp(void) +{ + test_begin("i_strccdascmp()"); + + test_assert(i_strccdascmp("", "")==0); + test_assert(i_strccdascmp("", "-")!=0); + test_assert(i_strccdascmp("-", "")!=0); + test_assert(i_strccdascmp("-", "-")==0); + test_assert(i_strccdascmp("-\0baz", "-\0bar")==0); + test_assert(i_strccdascmp("", "a")!=0); + test_assert(i_strccdascmp("a", "")!=0); + test_assert(i_strccdascmp("a", "a")==0); + test_assert(i_strccdascmp("a-", "a-")==0); + test_assert(i_strccdascmp("a-a", "a-a")==0); + test_assert(i_strccdascmp("ca", "ba")!=0); + + test_assert(i_strccdascmp("camel case", "camel case")==0); + test_assert(i_strccdascmp("camel case", "camel-case")==0); + test_assert(i_strccdascmp("camel case", "camelCase")==0); + + test_assert(i_strccdascmp("camel case", "camel-case")==0); + test_assert(i_strccdascmp("camel-case", "camel-case")==0); + test_assert(i_strccdascmp("camelCase", "camel-case")==0); + + test_assert(i_strccdascmp("camel case", "camel Case")==-i_strccdascmp("camel Case", "camel case")); + test_assert(i_strccdascmp("camel-case", "camel Case")==-i_strccdascmp("camel Case", "camel-case")); + test_assert(i_strccdascmp("camel dase", "camel case")==-i_strccdascmp("camel case", "camel dase")); + + test_end(); +} + void test_strfuncs(void) { test_p_strdup(); @@ -620,6 +651,7 @@ void test_strfuncs(void) test_str_match(); test_memspn(); test_memcspn(); + test_i_strccdascmp(); } enum fatal_test_state fatal_strfuncs(unsigned int stage) diff --git a/src/master/main.c b/src/master/main.c index 24c3d297d3..8d286f8bfc 100644 --- a/src/master/main.c +++ b/src/master/main.c @@ -25,7 +25,6 @@ #include "service-monitor.h" #include "service-process.h" #include "service-log.h" -#include "dovecot-version.h" #ifdef HAVE_LIBSYSTEMD # include # define i_sd_notify(unset, message) (void)sd_notify((unset), (message)) @@ -488,7 +487,7 @@ static struct master_settings *master_settings_read(void) static void main_log_startup(char **protocols) { -#define STARTUP_STRING PACKAGE_NAME" v"DOVECOT_VERSION_FULL" starting up" +#define STARTUP_STRING PACKAGE_NAME" v"PACKAGE_VERSION" starting up" string_t *str = t_str_new(128); rlim_t core_limit; struct stat st; @@ -561,7 +560,7 @@ static void main_init(const struct master_settings *set) master_clients_init(); services_monitor_start(services); - i_sd_notifyf(0, "READY=1\nSTATUS=v" DOVECOT_VERSION_FULL " running\n" + i_sd_notifyf(0, "READY=1\nSTATUS=v" PACKAGE_VERSION " running\n" "MAINPID=%u", getpid()); startup_finished = TRUE; } @@ -840,7 +839,7 @@ int main(int argc, char *argv[]) (void)execv(BINDIR"/doveadm", argv); i_fatal("execv("BINDIR"/doveadm) failed: %m"); } else if (strcmp(argv[optind], "version") == 0) { - printf("%s\n", DOVECOT_VERSION_FULL); + printf("%s\n", PACKAGE_VERSION); return 0; } else if (strcmp(argv[optind], "hostdomain") == 0) { printf("%s\n", my_hostdomain()); diff --git a/src/plugins/imap-acl/imap-acl-plugin.c b/src/plugins/imap-acl/imap-acl-plugin.c index 5d1c3bec00..1ccda97886 100644 --- a/src/plugins/imap-acl/imap-acl-plugin.c +++ b/src/plugins/imap-acl/imap-acl-plugin.c @@ -13,9 +13,9 @@ #include "mail-namespace.h" #include "mail-storage-private.h" #include "module-context.h" -#include "acl-api.h" -#include "acl-storage.h" -#include "acl-plugin.h" +#include "plugins/acl/acl-api.h" +#include "plugins/acl/acl-storage.h" +#include "plugins/acl/acl-plugin.h" #include "imap-acl-plugin.h" diff --git a/src/plugins/imap-old-stats/imap-stats-plugin.c b/src/plugins/imap-old-stats/imap-stats-plugin.c index 6c91aa78e3..54d0a2d883 100644 --- a/src/plugins/imap-old-stats/imap-stats-plugin.c +++ b/src/plugins/imap-old-stats/imap-stats-plugin.c @@ -5,7 +5,7 @@ #include "str.h" #include "imap-commands.h" #include "stats.h" -#include "stats-plugin.h" +#include "plugins/old-stats/stats-plugin.h" #include "stats-connection.h" #include "imap-stats-plugin.h" diff --git a/src/plugins/imap-quota/imap-quota-plugin.c b/src/plugins/imap-quota/imap-quota-plugin.c index 7863419b62..9d3c468675 100644 --- a/src/plugins/imap-quota/imap-quota-plugin.c +++ b/src/plugins/imap-quota/imap-quota-plugin.c @@ -6,8 +6,8 @@ #include "imap-quote.h" #include "mail-namespace.h" #include "imap-commands.h" -#include "quota.h" -#include "quota-plugin.h" +#include "plugins/quota/quota.h" +#include "plugins/quota/quota-plugin.h" #include "imap-quota-plugin.h" diff --git a/src/plugins/mail-log/mail-log-plugin.c b/src/plugins/mail-log/mail-log-plugin.c index f01cd0de70..2817e144ed 100644 --- a/src/plugins/mail-log/mail-log-plugin.c +++ b/src/plugins/mail-log/mail-log-plugin.c @@ -8,7 +8,7 @@ #include "imap-util.h" #include "mail-user.h" #include "mail-storage-private.h" -#include "notify-plugin.h" +#include "plugins/notify/notify-plugin.h" #include "mail-log-plugin.h" diff --git a/src/plugins/notify-status/notify-status-plugin.c b/src/plugins/notify-status/notify-status-plugin.c index f52ffa11f5..ce283d663d 100644 --- a/src/plugins/notify-status/notify-status-plugin.c +++ b/src/plugins/notify-status/notify-status-plugin.c @@ -12,7 +12,7 @@ #include "mail-storage-hooks.h" #include "imap-match.h" #include "dict.h" -#include "notify-plugin.h" +#include "plugins/notify/notify-plugin.h" #define NOTIFY_STATUS_SETTING_DICT_URI "notify_status_dict" #define NOTIFY_STATUS_SETTING_MAILBOX_PREFIX "notify_status_mailbox" diff --git a/src/plugins/push-notification/push-notification-plugin.c b/src/plugins/push-notification/push-notification-plugin.c index 22c2fb0ae0..815268d59c 100644 --- a/src/plugins/push-notification/push-notification-plugin.c +++ b/src/plugins/push-notification/push-notification-plugin.c @@ -6,7 +6,7 @@ #include "mail-namespace.h" #include "mail-storage.h" #include "mail-storage-private.h" -#include "notify-plugin.h" +#include "plugins/notify/notify-plugin.h" #include "str.h" #include "push-notification-drivers.h" diff --git a/src/plugins/quota-clone/quota-clone-plugin.c b/src/plugins/quota-clone/quota-clone-plugin.c index 5f5efa41ad..e3d5fbcfb5 100644 --- a/src/plugins/quota-clone/quota-clone-plugin.c +++ b/src/plugins/quota-clone/quota-clone-plugin.c @@ -5,7 +5,7 @@ #include "ioloop.h" #include "dict.h" #include "mail-storage-private.h" -#include "quota.h" +#include "plugins/quota/quota.h" #include "quota-clone-plugin.h" /* If mailbox is kept open for this many milliseconds after quota update, diff --git a/src/plugins/replication/replication-plugin.c b/src/plugins/replication/replication-plugin.c index 9b4bb089e3..4515a8c906 100644 --- a/src/plugins/replication/replication-plugin.c +++ b/src/plugins/replication/replication-plugin.c @@ -10,8 +10,8 @@ #include "mail-user.h" #include "mail-namespace.h" #include "mail-storage-private.h" -#include "notify-plugin.h" -#include "replication-common.h" +#include "plugins/notify/notify-plugin.h" +#include "replication/replication-common.h" #include "replication-plugin.h" diff --git a/src/plugins/trash/trash-plugin.c b/src/plugins/trash/trash-plugin.c index d918484edd..b121eb60b4 100644 --- a/src/plugins/trash/trash-plugin.c +++ b/src/plugins/trash/trash-plugin.c @@ -6,8 +6,8 @@ #include "istream.h" #include "mail-namespace.h" #include "mail-search-build.h" -#include "quota-private.h" -#include "quota-plugin.h" +#include "plugins/quota/quota-private.h" +#include "plugins/quota/quota-plugin.h" #include "trash-plugin.h" #include diff --git a/src/replication/aggregator/notify-connection.c b/src/replication/aggregator/notify-connection.c index f9587fe9e5..3573f7dd11 100644 --- a/src/replication/aggregator/notify-connection.c +++ b/src/replication/aggregator/notify-connection.c @@ -8,7 +8,7 @@ #include "llist.h" #include "strescape.h" #include "master-service.h" -#include "replication-common.h" +#include "replication/replication-common.h" #include "replicator-connection.h" #include "notify-connection.h" diff --git a/src/replication/aggregator/replicator-connection.h b/src/replication/aggregator/replicator-connection.h index bc2c82a64c..d254160cf5 100644 --- a/src/replication/aggregator/replicator-connection.h +++ b/src/replication/aggregator/replicator-connection.h @@ -1,7 +1,7 @@ #ifndef REPLICATOR_CONNECTION_H #define REPLICATOR_CONNECTION_H -#include "replication-common.h" +#include "replication/replication-common.h" typedef void replicator_sync_callback_t(bool success, void *context); diff --git a/src/replication/replicator/replicator-queue.h b/src/replication/replicator/replicator-queue.h index a298a5d9ed..ed1f21dfac 100644 --- a/src/replication/replicator/replicator-queue.h +++ b/src/replication/replicator/replicator-queue.h @@ -2,7 +2,7 @@ #define REPLICATOR_QUEUE_H #include "priorityq.h" -#include "replication-common.h" +#include "replication/replication-common.h" struct replicator_user { struct priorityq_item item; diff --git a/src/stats/main.c b/src/stats/main.c index 15e07338fa..9630cab871 100644 --- a/src/stats/main.c +++ b/src/stats/main.c @@ -13,9 +13,6 @@ #include "client-reader.h" #include "client-http.h" -struct stats_metrics *stats_metrics; -time_t stats_startup_time; - static const struct stats_settings *stats_settings; static bool client_is_writer(const char *path) diff --git a/src/stats/stats-common.c b/src/stats/stats-common.c new file mode 100644 index 0000000000..4c9c95f6e1 --- /dev/null +++ b/src/stats/stats-common.c @@ -0,0 +1,4 @@ +#include "stats-common.h" + +struct stats_metrics *stats_metrics; +time_t stats_startup_time; diff --git a/src/stats/stats-service-openmetrics.c b/src/stats/stats-service-openmetrics.c index a31b107558..4847386526 100644 --- a/src/stats/stats-service-openmetrics.c +++ b/src/stats/stats-service-openmetrics.c @@ -1,7 +1,6 @@ /* Copyright (c) 2019 Dovecot authors, see the included COPYING file */ #include "stats-common.h" -#include "dovecot-version.h" #include "str.h" #include "array.h" #include "json-parser.h" @@ -16,14 +15,8 @@ #define OPENMETRICS_CONTENT_VERSION "0.0.1" -#ifdef DOVECOT_REVISION -#define OPENMETRICS_BUILD_INFO \ - "version=\""DOVECOT_VERSION"\"," \ - "revision=\""DOVECOT_REVISION"\"" -#else #define OPENMETRICS_BUILD_INFO \ "version=\""DOVECOT_VERSION"\"" -#endif enum openmetrics_metric_type { OPENMETRICS_METRIC_TYPE_COUNT, diff --git a/src/stats/test-stats-common.c b/src/stats/test-stats-common.c index 3e307a9e58..d7f76b0293 100644 --- a/src/stats/test-stats-common.c +++ b/src/stats/test-stats-common.c @@ -14,8 +14,6 @@ struct event_category child_test_category = { }; pool_t test_pool; -struct stats_metrics *stats_metrics = NULL; -time_t stats_startup_time; static bool callback_added = FALSE;