MHNSEARCHPATH = "$(PATH)"
MHNSEARCHPROG = $(srcdir)/etc/mhn.find.sh
-##
-## Install config files and back-end programs in our own subdirecctories.
-##
-nmhetcdir = @sysconfdir@/nmh
-nmhlibexecdir = @libexecdir@/nmh
-
##
## nmh _does_ have a test suite!
##
TESTS_ENVIRONMENT = MH_OBJ_DIR="@abs_builddir@" \
MH_VERSION="$(VERSION)" \
+ MAKE=$(MAKE) \
OAUTH_SUPPORT='@OAUTH_SUPPORT@' \
CURL_USER_AGENT='@CURL_USER_AGENT@' \
MH_TEST_DIR=`cd "@abs_builddir@" && pwd -P`/test/testdir \
test/burst/test-burst \
test/burst/test-burst-mime \
test/comp/test-comp-format \
+ test/comp/test-draft-fcc \
test/dist/test-dist \
test/folder/test-coverage \
test/folder/test-create \
test/format/test-curses \
test/format/test-dp \
test/format/test-fmtdump \
+ test/format/test-fmttest \
test/format/test-functions \
test/format/test-localmbox \
test/format/test-myhost \
test/forw/test-forw-coverage \
test/forw/test-forw-digest \
test/forw/test-forw-format \
+ test/imap/test-inc \
+ test/imap/test-live \
+ test/imap/test-scan \
test/inc/test-deb359167 \
test/inc/test-eom-align \
test/inc/test-inc-scanout \
test/install-mh/test-version-check \
test/locking/test-datalocking \
test/locking/test-spoollocking \
+ test/managed-folders/test-read-message \
test/manpages/test-manpages \
test/mhbuild/test-attach \
test/mhbuild/test-cte \
test/mhbuild/test-utf8-body \
test/mhfixmsg/test-mhfixmsg \
test/mhical/test-mhical \
+ test/mhl/test-format \
test/mhl/test-mhl-flags \
test/mhl/test-rfc6532 \
test/mhlist/test-ext-params \
test/mhshow/test-binary \
test/mhshow/test-charset \
test/mhshow/test-cte-binary \
+ test/mhshow/test-exec \
+ test/mhshow/test-markers \
test/mhshow/test-msg-buffer-boundaries \
test/mhshow/test-qp \
test/mhshow/test-subpart \
test/repl/test-trailing-newline \
test/scan/test-header-parsing \
test/scan/test-scan \
+ test/scan/test-scan-file \
test/scan/test-scan-multibyte \
test/send/test-sendfrom \
test/sequences/test-flist \
test/whom/test-whom \
test/cleanup ## The "cleanup" test should always be last.
-XFAIL_TESTS =
+check_DATA = fake.pem
check_SCRIPTS = test/common.sh
check_PROGRAMS = \
test/fakehttp \
+ test/fakeinetd \
test/fakepop \
test/fakesmtp \
test/getcanon \
test/getcwidth \
test/getfullname \
+ test/managed-folders/protocol-tester \
test/runpty \
#
##
## Stuff that should be cleaned via "make clean"
-## automake 1.12.6 on FreeBSD 9 needs the sbr/dtimep.c.
##
CLEANFILES = \
$(man_MANS) \
etc/mhn.defaults \
etc/mts.conf \
man/man.sed \
- man/mh-chart.man \
- sbr/dtimep.c \
+ man/mh-chart.man
#
clean-local:
noinst_HEADERS = \
h/addrsbr.h \
h/aliasbr.h \
- h/crawl_folders.h \
h/done.h \
h/dropsbr.h \
h/fmt_compile.h \
h/fmt_scan.h \
+ h/folder.h \
+ h/folder_manager_protocol.h \
h/icalendar.h \
- h/md5.h \
+ h/managed_folders.h \
h/mf.h \
h/mh.h \
- h/mhcachesbr.h \
h/mhparse.h \
h/mime.h \
h/mts.h \
h/netsec.h \
h/nmh.h \
h/oauth.h \
- h/picksbr.h \
- h/popsbr.h \
h/prototypes.h \
- h/rcvmail.h \
- h/scansbr.h \
h/signals.h \
h/tws.h \
h/utils.h \
sbr/brkstring.h \
sbr/check_charset.h \
sbr/client.h \
- sbr/closefds.h \
+ sbr/concat.h \
sbr/context_del.h \
sbr/context_find.h \
sbr/context_foil.h \
sbr/copyip.h \
sbr/cpydata.h \
sbr/cpydgst.h \
+ sbr/crawl_folders.h \
sbr/credentials.h \
sbr/ctype-checked.h \
+ sbr/datetime.h \
sbr/discard.h \
+ sbr/dtime.h \
sbr/encode_rfc2047.h \
sbr/error.h \
sbr/escape_addresses.h \
sbr/ext_hook.h \
sbr/fdcompare.h \
+ sbr/fmt_addr.h \
+ sbr/fmt_new.h \
sbr/fmt_rfc2047.h \
sbr/folder_addmsg.h \
sbr/folder_delmsgs.h \
sbr/folder_pack.h \
sbr/folder_read.h \
sbr/folder_realloc.h \
+ sbr/getarguments.h \
sbr/getcpy.h \
sbr/geteditor.h \
sbr/getfolder.h \
sbr/m_backup.h \
sbr/m_convert.h \
sbr/m_draft.h \
+ sbr/m_getfld.h \
+ sbr/m_gmprot.h \
sbr/m_maildir.h \
sbr/m_mktemp.h \
+ sbr/m_name.h \
sbr/m_popen.h \
sbr/m_rand.h \
+ sbr/maildir_read_and_sort.h \
sbr/makedir.h \
sbr/message_id.h \
sbr/mime_type.h \
sbr/push.h \
sbr/r1bindex.h \
sbr/read_line.h \
+ sbr/read_switch.h \
+ sbr/read_switch_multiword.h \
+ sbr/read_switch_multiword_via_readline.h \
+ sbr/read_yes_or_no_if_tty.h \
sbr/readconfig.h \
sbr/refile.h \
sbr/remdir.h \
sbr/seq_print.h \
sbr/seq_read.h \
sbr/seq_save.h \
+ sbr/seq_setcur.h \
+ sbr/seq_setprev.h \
+ sbr/seq_setunseen.h \
sbr/showfile.h \
sbr/smatch.h \
sbr/snprintb.h \
sbr/vector.h \
sbr/vfgets.h \
thirdparty/jsmn/jsmn.h \
+ uip/annosbr.h \
+ uip/distsbr.h \
uip/forwsbr.h \
uip/mhfree.h \
+ uip/mhlsbr.h \
uip/mhmisc.h \
uip/mhoutsbr.h \
uip/mhshowsbr.h \
+ uip/picksbr.h \
+ uip/popsbr.h \
uip/replsbr.h \
+ uip/scansbr.h \
+ uip/sendsbr.h \
+ uip/whatnowproc.h \
+ uip/whatnowsbr.h \
#
##
## Extra files we need to install in various places
##
+dist_nmhetc_SCRIPTS = etc/rmmproc.messageid
dist_nmhetc_DATA = \
etc/MailAliases \
etc/components \
etc/rcvdistcomps.outbox \
etc/replcomps \
etc/replgroupcomps \
- etc/rmmproc.messageid \
etc/scan.MMDDYY \
etc/scan.YYYYMMDD \
etc/scan.curses \
dist_docs_contrib_SCRIPTS = \
docs/contrib/localpostproc \
docs/contrib/ml \
- docs/contrib/replaliases \
docs/contrib/replyfilter \
docs/contrib/vpick \
#
uip_anno_SOURCES = uip/anno.c uip/annosbr.c
uip_anno_LDADD = $(LDADD) $(POSTLINK)
-uip_burst_SOURCES = uip/burst.c uip/mhparse.c uip/mhmisc.c uip/mhfree.c \
- uip/mhcachesbr.c
+uip_burst_SOURCES = uip/burst.c \
+ uip/mhparse.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ #
uip_burst_LDADD = $(LDADD) $(ICONVLIB) $(POSTLINK)
uip_comp_SOURCES = uip/comp.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \
uip_mark_SOURCES = uip/mark.c
uip_mark_LDADD = $(LDADD) $(POSTLINK)
-uip_mhbuild_SOURCES = uip/mhbuild.c uip/mhbuildsbr.c uip/mhcachesbr.c \
- uip/mhlistsbr.c uip/mhoutsbr.c uip/mhmisc.c \
- uip/mhfree.c uip/mhparse.c \
- uip/mhstoresbr.c uip/mhshowsbr.c
+uip_mhbuild_SOURCES = uip/mhbuild.c \
+ uip/mhbuildsbr.c \
+ uip/mhlistsbr.c \
+ uip/mhoutsbr.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ uip/mhparse.c \
+ uip/mhstoresbr.c \
+ uip/mhshowsbr.c \
+ #
uip_mhbuild_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
-uip_mhfixmsg_SOURCES = uip/mhfixmsg.c uip/mhparse.c uip/mhcachesbr.c \
- uip/mhoutsbr.c uip/mhmisc.c uip/mhfree.c \
- uip/mhshowsbr.c uip/mhlistsbr.c
+uip_mhfixmsg_SOURCES = uip/mhfixmsg.c \
+ uip/mhparse.c \
+ uip/mhoutsbr.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ uip/mhshowsbr.c \
+ uip/mhlistsbr.c \
+ #
uip_mhfixmsg_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
uip_mhical_SOURCES = uip/mhical.c
uip_mhical_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
-uip_mhlist_SOURCES = uip/mhlist.c uip/mhparse.c uip/mhcachesbr.c \
- uip/mhlistsbr.c uip/mhmisc.c uip/mhfree.c
+uip_mhlist_SOURCES = uip/mhlist.c \
+ uip/mhparse.c \
+ uip/mhlistsbr.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ #
uip_mhlist_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
-uip_mhn_SOURCES = uip/mhn.c uip/mhparse.c uip/mhcachesbr.c uip/mhshowsbr.c \
- uip/mhlistsbr.c uip/mhstoresbr.c uip/mhmisc.c uip/mhfree.c
+uip_mhn_SOURCES = uip/mhn.c \
+ uip/mhparse.c \
+ uip/mhshowsbr.c \
+ uip/mhlistsbr.c \
+ uip/mhstoresbr.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ #
uip_mhn_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
uip_mhparam_SOURCES = uip/mhparam.c
uip_mhpath_SOURCES = uip/mhpath.c
uip_mhpath_LDADD = $(LDADD) $(POSTLINK)
-uip_mhshow_SOURCES = uip/mhshow.c uip/mhparse.c uip/mhcachesbr.c \
- uip/mhshowsbr.c uip/mhlistsbr.c uip/mhmisc.c \
- uip/mhfree.c
+uip_mhshow_SOURCES = uip/mhshow.c \
+ uip/mhparse.c \
+ uip/mhshowsbr.c \
+ uip/mhlistsbr.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ #
uip_mhshow_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
-uip_mhstore_SOURCES = uip/mhstore.c uip/mhparse.c uip/mhcachesbr.c \
- uip/mhshowsbr.c uip/mhlistsbr.c uip/mhstoresbr.c \
- uip/mhmisc.c uip/mhfree.c
+uip_mhstore_SOURCES = uip/mhstore.c \
+ uip/mhparse.c \
+ uip/mhshowsbr.c \
+ uip/mhlistsbr.c \
+ uip/mhstoresbr.c \
+ uip/mhmisc.c \
+ uip/mhfree.c \
+ #
uip_mhstore_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK)
uip_msgchk_SOURCES = uip/msgchk.c uip/popsbr.c
test_fakehttp_SOURCES = test/fakehttp.c test/server.c
test_fakehttp_LDADD = $(LDADD) $(POSTLINK)
+test_fakeinetd_SOURCES = test/fakeinetd.c
+test_fakeinetd_LDADD = $(LDADD) $(POSTLINK)
+
test_getcwidth_SOURCES = test/getcwidth.c
test_getcwidth_LDADD = $(POSTLINK)
sbr/charstring.c \
sbr/check_charset.c \
sbr/client.c \
- sbr/closefds.c \
sbr/concat.c \
sbr/context_del.c \
sbr/context_find.c \
sbr/folder_addmsg.c \
sbr/folder_delmsgs.c \
sbr/folder_free.c \
+ sbr/folder_manager_client.c \
+ sbr/folder_manager_protocol.c \
+ sbr/folder_operations.c \
sbr/folder_pack.c \
sbr/folder_read.c \
sbr/folder_realloc.c \
sbr/m_name.c \
sbr/m_popen.c \
sbr/m_rand.c \
+ sbr/maildir_read_and_sort.c \
sbr/makedir.c \
- sbr/md5.c \
+ sbr/managed_folders.c \
sbr/message_id.c \
sbr/mf.c \
sbr/mime_type.c \
## Need explicit dependency so that YACC is run before LEX.
##
sbr/icalendar.c: sbr/icalparse.c
+uip/mhical.c: sbr/icalparse.h
##
## Because these files use the definitions in the libmh rule below,
config/sbr_libmh_a-config.$(OBJEXT) sbr/sbr_libmh_a-mts.$(OBJEXT): Makefile
-sbr_libmh_a_CPPFLAGS = ${AM_CPPFLAGS} -I./sbr \
+sbr_libmh_a_CPPFLAGS = ${AM_CPPFLAGS} \
-DNMHBINDIR='"$(bindir)"' \
-DNMHLIBEXECDIR='"$(nmhlibexecdir)"' \
-DNMHETCDIR='"@nmhetcdirinst@$(nmhetcdir)"' \
.PHONY: gcov gcov-rebuild gcov-run gcov-process gcov-report \
gcov-mostlyclean gcov-clean
+# TODO rust coverage
+# cargo +nightly install cargo-binutils grcov rustfilt
+# RUSTFLAGS=-Zinstrument-coverage make CARGO_FLAGS=+nightly cargo
+# make check
+# TODO rename .llvmprof to .profdata so grcov will see it
+# cargo +nightly profdata -- merge -sparse test/imap/*.llvmprof -o profdata
+# cargo +nightly cov -- show target/debug/imap-folder-manager -instr-profile=profdata "-path-equivalence=,${top_srcdir}"
+# grcov --branch --llvm -b target/debug -o ~/public_html/cov -t html -s ../.. test/imap/cov
##
## Rules to upload the distribution to savannah
@echo "Uploading to savannah"
scp -p $(DIST_ARCHIVES)* $(SAVANNAH_USERNAME)@dl.sv.nongnu.org:/releases/nmh
.PHONY: upload
+
+# TODO autoconf check for cargo and bindgen
+.PHONY: cargo cargo-doc
+cargo: $(srcdir)/sbr/rust/src/bindgen.rs $(abs_srcdir)/sbr/rust/build.rs
+ cd $(srcdir) && CARGO_TARGET_DIR=$(abs_builddir)/target cargo $(CARGO_FLAGS) build
+cargo-doc: cargo
+ cd $(srcdir) && CARGO_TARGET_DIR=$(abs_builddir)/target cargo $(CARGO_FLAGS) doc --no-deps
+
+# TODO default to release build with optional debug build
+# TODO install mhimap to bindir and imap-folder-manager to libexecdir
+# TODO proper build rules, including dependency on libmh.a
+target/debug/mhimap target/debug/imap-folder-manager: cargo
+
+# TODO proper out-of-tree build
+$(abs_srcdir)/sbr/rust/build.rs: $(abs_builddir)/sbr/rust/build.rs
+ [ $(abs_srcdir) = $(abs_builddir) ] || cp $(builddir)/sbr/rust/build.rs $(srcdir)/sbr/rust/build.rs
+
+$(srcdir)/sbr/rust/src/bindgen.rs: $(srcdir)/sbr/rust/bindgen.h
+ bindgen --no-derive-copy -o $(srcdir)/sbr/rust/src/bindgen.rs.tmp $(srcdir)/sbr/rust/bindgen.h -- -I$(srcdir) \
+ && mv $(srcdir)/sbr/rust/src/bindgen.rs.tmp $(srcdir)/sbr/rust/src/bindgen.rs
+
+# TODO autoconf check for openssl
+fake.pem:
+ yes '' | openssl req -new -x509 -nodes -out fake.pem -keyout fake.pem