aboutsummaryrefslogtreecommitdiff
path: root/mail/mutt
diff options
context:
space:
mode:
authorDmitry Marakasov <amdmi3@FreeBSD.org>2013-08-30 15:14:26 +0000
committerDmitry Marakasov <amdmi3@FreeBSD.org>2013-08-30 15:14:26 +0000
commitb728cc2245c32c5c4d8fd49d2081208a823da28c (patch)
tree12bd7ef49e4a1c18a9c565784fbb17d9516a9d0c /mail/mutt
parent4ad6c7024da2bd53ef1be6856d558120c205a631 (diff)
downloadports-b728cc2245c32c5c4d8fd49d2081208a823da28c.tar.gz
ports-b728cc2245c32c5c4d8fd49d2081208a823da28c.zip
Notes
Diffstat (limited to 'mail/mutt')
-rw-r--r--mail/mutt/Makefile14
-rw-r--r--mail/mutt/files/extra-patch-smartdate126
-rw-r--r--mail/mutt/files/patch-tls-version112
-rw-r--r--mail/mutt/pkg-descr2
4 files changed, 249 insertions, 5 deletions
diff --git a/mail/mutt/Makefile b/mail/mutt/Makefile
index 6705e8e4a352..879e250f1c12 100644
--- a/mail/mutt/Makefile
+++ b/mail/mutt/Makefile
@@ -9,7 +9,7 @@
PORTNAME= mutt
PORTVERSION= 1.5.21
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES+= mail ipv6
MASTER_SITES= ftp://ftp.mutt.org/mutt/devel/ \
ftp://ftp.fu-berlin.de/pub/unix/mail/mutt/devel/ \
@@ -66,8 +66,8 @@ OPTIONS_DEFINE= COMPRESSED_FOLDERS SASL DEBUG FLOCK \
MAILDIR_HEADER_CACHE MAILDIR_MTIME_PATCH \
NNTP PARENT_CHILD_MATCH_PATCH \
QUOTE_PATCH REVERSE_REPLY_PATCH SGMLFORMAT SIDEBAR_PATCH \
- SIGNATURE_MENU SMIME_OUTLOOK_COMPAT SMTP TOKYOCABINET \
- TRASH_PATCH XML
+ SIGNATURE_MENU SMART_DATE SMIME_OUTLOOK_COMPAT SMTP \
+ TOKYOCABINET TRASH_PATCH XML
OPTIONS_SINGLE= SCREEN
OPTIONS_RADIO= SPELL
@@ -97,6 +97,7 @@ SGMLFORMAT_DESC= SGML support
SIDEBAR_PATCH_DESC= Sidebar support
SIGNATURE_MENU_DESC= Signature menu
SLANG_DESC= SLANG support
+SMART_DATE_DESC= Dynamic date formatting with "%@"
SMIME_OUTLOOK_COMPAT_DESC= SMIME outlook compatibility
SMTP_DESC= SMTP relay support
TOKYOCABINET_DESC= Use tokyocabinet instead of Berkley DB
@@ -194,6 +195,11 @@ post-patch::
@${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-smime-outlook
.endif
+.if ${PORT_OPTIONS:MSMART_DATE}
+post-patch::
+ @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-smartdate
+.endif
+
.if ${PORT_OPTIONS:MSIGNATURE_MENU}
IGNORE= the WITH_SIGNATURE_MENU does not work at the moment
XML_NEEDED= yes
@@ -390,7 +396,7 @@ SCRIPTS_ENV+= COMPRESSED_FOLDERS="yes"
SCRIPTS_ENV+= QUOTE_PATCH="yes"
.endif
-.if ${PORT_OPTIONS:MIMAP_HEADER_CACHE}
+.if ${PORT_OPTIONS:MIMAP_HEADER_CACHE} || ${PORT_OPTIONS:MMAILDIR_HEADER_CACHE}
.if ${PORT_OPTIONS:MTOKYOCABINET}
CONFIGURE_ARGS+= --enable-hcache --without-gdbm --without-bdb --with-tokyocabinet
LIB_DEPENDS+= tokyocabinet.9:${PORTSDIR}/databases/tokyocabinet
diff --git a/mail/mutt/files/extra-patch-smartdate b/mail/mutt/files/extra-patch-smartdate
new file mode 100644
index 000000000000..6762fbe279be
--- /dev/null
+++ b/mail/mutt/files/extra-patch-smartdate
@@ -0,0 +1,126 @@
+--- mutt.h
++++ mutt.h
+@@ -133,6 +133,16 @@
+ M_FORMAT_NOFILTER = (1<<7) /* do not allow filtering on this pass */
+ } format_flag;
+
++/* flags for SmartDate */
++typedef enum {
++ FUTURE = 1,
++ SMARTTIME = 2,
++ YESTERDAY = 3,
++ WEEKDAY = 4,
++ STANDARD = 5,
++ ANCIENT = 6
++} smartdate_type;
++
+ /* types for mutt_add_hook() */
+ #define M_FOLDERHOOK 1
+ #define M_MBOXHOOK (1<<1)
+--- hdrline.c
++++ hdrline.c
+@@ -231,6 +231,89 @@
+ * %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label)
+ * %Z = status flags */
+
++static void
++format_smartdate( char *buf, size_t max, struct tm *tm, smartdate_type type )
++{
++ char *strftime_fmt = NULL;
++
++ switch( type ) {
++ case FUTURE: /* Date in the future */
++ strftime_fmt = "%d%h%y!";
++ break;
++ case SMARTTIME: /* Today */
++ strftime_fmt = "%I:%M %p";
++ break;
++ case YESTERDAY: /* Yesterday */
++ strncpy( buf, "Yesterday", max );
++ break;
++ case WEEKDAY: /* Within the last 7 days */
++ strftime_fmt = "%A";
++ break;
++ case STANDARD: /* Within the last six months */
++ strftime_fmt = "%h %d";
++ break;
++ case ANCIENT: /* Older than 6 months */
++ strftime_fmt = "%h %Y";
++ break;
++ }
++
++ if( strftime_fmt != NULL ) {
++ strftime( buf, max, strftime_fmt, tm );
++ }
++}
++
++static void
++smartdate( char *buf, size_t max, struct tm *tm )
++{
++ smartdate_type type = 0;
++
++ struct tm now;
++
++ time_t sse = mktime( tm ); /* Seconds since epoch */
++ time_t sse_now = time(NULL); /* Seconds since epoch until now */
++
++ int dse = 0; /* Days since epoch */
++ int dse_now = 0; /* Days since epoch until today */
++
++ /* Calculate the number of days since epoch */
++ dse = sse / (60*60*24);
++ dse_now = sse_now / (60*60*24);
++
++ /* Default display type */
++ type = STANDARD;
++
++ /* Check if the date is in the future */
++ if( dse > dse_now ) {
++ type = FUTURE;
++ }
++ else {
++ int diff = dse_now - dse;
++ if( diff == 0 ) type = SMARTTIME;
++ else if( diff == 1 ) type = YESTERDAY;
++ else if( diff < 7 ) type = WEEKDAY;
++ else if( diff > 215 ) type = ANCIENT; /* Surely older than six
++ months */
++ else if( diff > 180 ) {
++ /*
++ * Slightly heavy calculation to check if the date is more
++ * than six months in the past. This calculation uses
++ * calendar months and not the exact number of days. So,
++ * January 31, 2003 would be considered more than six months
++ * old whether today's date is August 1 or August 31, 2003
++ */
++ int monthdiff;
++ localtime_r( &sse_now, &now );
++ monthdiff = ( now.tm_mon - tm->tm_mon )
++ + ( ( now.tm_year - tm->tm_year ) * 12 );
++ if( monthdiff > 6 ) {
++ type = ANCIENT;
++ }
++ }
++ }
++
++ format_smartdate( buf, max, tm, type );
++}
++
+ static const char *
+ hdr_format_str (char *dest,
+ size_t destlen,
+@@ -462,7 +545,13 @@
+ tm = gmtime (&T);
+ }
+
+- strftime (buf2, sizeof (buf2), dest, tm);
++ /* Identify the non-strftime smartdate pattern (%@) */
++ if( strncmp( dest, "%@", 2 ) == 0 ) {
++ smartdate( buf2, sizeof( buf2 ), tm );
++ }
++ else {
++ strftime (buf2, sizeof (buf2), dest, tm);
++ }
+
+ if (do_locales)
+ setlocale (LC_TIME, "C");
diff --git a/mail/mutt/files/patch-tls-version b/mail/mutt/files/patch-tls-version
new file mode 100644
index 000000000000..db9e22315ddd
--- /dev/null
+++ b/mail/mutt/files/patch-tls-version
@@ -0,0 +1,112 @@
+--- init.h.orig 2010-09-15 08:39:31.000000000 -0700
++++ init.h 2012-03-28 10:58:42.870572835 -0700
+@@ -2972,6 +2972,18 @@ struct option_t MuttVars[] = {
+ ** SSL authentication process.
+ */
+ #ifdef USE_SSL_OPENSSL
++ { "ssl_use_tlsv1_1", DT_BOOL, R_NONE, OPTTLSV1_1, 1 },
++ /*
++ ** .pp
++ ** This variable specifies whether to attempt to use TLSv1.1 in the
++ ** SSL authentication process.
++ */
++ { "ssl_use_tlsv1_2", DT_BOOL, R_NONE, OPTTLSV1_2, 1 },
++ /*
++ ** .pp
++ ** This variable specifies whether to attempt to use TLSv1.2 in the
++ ** SSL authentication process.
++ */
+ { "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 },
+ /*
+ ** .pp
+--- mutt.h 2010-09-13 10:19:55.000000000 -0700
++++ mutt.h 2012-03-28 10:59:24.437237530 -0700
+@@ -376,6 +376,8 @@ enum
+ # endif /* USE_SSL_GNUTLS */
+ OPTSSLV3,
+ OPTTLSV1,
++ OPTTLSV1_1,
++ OPTTLSV1_2,
+ OPTSSLFORCETLS,
+ OPTSSLVERIFYDATES,
+ OPTSSLVERIFYHOST,
+--- mutt_ssl.c.orig 2010-08-25 18:31:40.000000000 +0200
++++ mutt_ssl.c 2013-08-20 13:51:14.000000000 +0200
+@@ -100,12 +100,33 @@
+ goto bail;
+
+ ssldata = (sslsockdata*) safe_calloc (1, sizeof (sslsockdata));
+- /* the ssl_use_xxx protocol options don't apply. We must use TLS in TLS. */
+- if (! (ssldata->ctx = SSL_CTX_new (TLSv1_client_method ())))
++ /* the ssl_use_xxx protocol options don't apply. We must use TLS in TLS.
++ * TLSv1.2 support was added in OpenSSL 1.0.1. RHEL6 shipped with 1.0.0 so
++ * our configure script checks for TLSv1.2 availability.
++ */
++ if (! (ssldata->ctx = SSL_CTX_new (
++#ifdef HAVE_TLSV1_2_CLIENT_METHOD
++ TLSv1_2_client_method ()
++#else
++ TLSv1_client_method ()
++#endif
++ )))
+ {
+ dprint (1, (debugfile, "mutt_ssl_starttls: Error allocating SSL_CTX\n"));
+ goto bail_ssldata;
+ }
++#ifdef SSL_OP_NO_TLSv1_1
++ if (!option(OPTTLSV1_1))
++ {
++ SSL_CTX_set_options(ssldata->ctx, SSL_OP_NO_TLSv1_1);
++ }
++#endif
++#ifdef SSL_OP_NO_TLSv1_2
++ if (!option(OPTTLSV1_2))
++ {
++ SSL_CTX_set_options(ssldata->ctx, SSL_OP_NO_TLSv1_2);
++ }
++#endif
+
+ ssl_get_client_cert(ssldata, conn);
+
+@@ -303,6 +324,21 @@
+ {
+ SSL_CTX_set_options(data->ctx, SSL_OP_NO_TLSv1);
+ }
++ /* TLSv1.1/1.2 support was added in OpenSSL 1.0.1, but some OS distros such
++ * as Fedora 17 are on OpenSSL 1.0.0.
++ */
++#ifdef SSL_OP_NO_TLSv1_1
++ if (!option(OPTTLSV1_1))
++ {
++ SSL_CTX_set_options(data->ctx, SSL_OP_NO_TLSv1_1);
++ }
++#endif
++#ifdef SSL_OP_NO_TLSv1_2
++ if (!option(OPTTLSV1_2))
++ {
++ SSL_CTX_set_options(data->ctx, SSL_OP_NO_TLSv1_2);
++ }
++#endif
+ if (!option(OPTSSLV2))
+ {
+ SSL_CTX_set_options(data->ctx, SSL_OP_NO_SSLv2);
+@@ -375,8 +411,8 @@
+ if (!ssl_check_certificate (conn, ssldata))
+ return -1;
+
+- mutt_message (_("SSL connection using %s (%s)"),
+- SSL_get_cipher_version (ssldata->ssl), SSL_get_cipher_name (ssldata->ssl));
++ mutt_message (_("%s connection using %s (%s)"),
++ SSL_get_version(ssldata->ssl), SSL_get_cipher_version (ssldata->ssl), SSL_get_cipher_name (ssldata->ssl));
+ mutt_sleep (0);
+
+ return 0;
+@@ -911,7 +947,7 @@
+
+ static int interactive_check_cert (X509 *cert, int idx, int len)
+ {
+- char *part[] =
++ static const char * const part[] =
+ {"/CN=", "/Email=", "/O=", "/OU=", "/L=", "/ST=", "/C="};
+ char helpstr[LONG_STRING];
+ char buf[STRING];
diff --git a/mail/mutt/pkg-descr b/mail/mutt/pkg-descr
index 133bc52670cb..4b48c8d8ab90 100644
--- a/mail/mutt/pkg-descr
+++ b/mail/mutt/pkg-descr
@@ -6,6 +6,6 @@ Features include color support, message threading, MIME support (including
RFC1522 support for encoded headers), customizable key bindings, POP3,
Delivery Status Notification (DSN) support, and PGP/MIME.
-Mutt User Information: http://www.math.fu-berlin.de/~guckes/mutt/
+Mutt FAQ: http://dev.mutt.org/trac/wiki/MuttFaq
WWW: http://www.mutt.org/