/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */ /* camel-mime-message.c : class for a mime_message */ /* * Authors: Bertrand Guiheneuf * Michael Zucchi * Jeffrey Stedfast * * Copyright 1999, 2000 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "camel-mime-message.h" #include "camel-multipart.h" #include "camel-stream-mem.h" #include "string-utils.h" #include "camel-url.h" #include "camel-stream-filter.h" #include "camel-stream-null.h" #include "camel-mime-filter-charset.h" #include "camel-mime-filter-bestenc.h" #include "e-time-utils.h" #define d(x) /* these 2 below should be kept in sync */ typedef enum { HEADER_UNKNOWN, HEADER_FROM, HEADER_REPLY_TO, HEADER_SUBJECT, HEADER_TO, HEADER_RESENT_TO, HEADER_CC, HEADER_RESENT_CC, HEADER_BCC, HEADER_RESENT_BCC, HEADER_DATE, HEADER_MESSAGE_ID } CamelHeaderType; static char *header_names[] = { /* dont include HEADER_UNKNOWN string */ "From", "Reply-To", "Subject", "To", "Resent-To", "Cc", "Resent-Cc", "Bcc", "Resent-Bcc", "Date", "Message-Id", NULL }; static GHashTable *header_name_table; static CamelMimePartClass *parent_class = NULL; static char *recipient_names[] = { "To", "Cc", "Bcc", "Resent-To", "Resent-Cc", "Resent-Bcc", NULL }; static int write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream); static void add_header (CamelMedium *medium, const char *header_name, const void *header_value); static void set_header (CamelMedium *medium, const char *header_name, const void *header_value); static void remove_header (CamelMedium *medium, const char *header_name); static int construct_from_parser (CamelMimePart *, CamelMimeParser *); static void unref_recipient (gpointer key, gpointer value, gpointer user_data); /* Returns the class for a CamelMimeMessage */ #define CMM_CLASS(so) CAMEL_MIME_MESSAGE_CLASS (CAMEL_OBJECT_GET_CLASS(so)) #define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (CAMEL_OBJECT_GET_CLASS(so)) #define CMD_CLASS(so) CAMEL_MEDIUM_CLASS (CAMEL_OBJECT_GET_CLASS(so)) static void camel_mime_message_class_init (CamelMimeMessageClass *camel_mime_message_class) { CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_mime_message_class); CamelMimePartClass *camel_mime_part_class = CAMEL_MIME_PART_CLASS (camel_mime_message_class); CamelMediumClass *camel_medium_class = CAMEL_MEDIUM_CLASS (camel_mime_message_class); int i; parent_class = CAMEL_MIME_PART_CLASS(camel_type_get_global_classfuncs (camel_mime_part_get_type ())); header_name_table = g_hash_table_new (g_strcase_hash, g_strcase_equal); for (i=0;header_names[i];i++) g_hash_table_insert (header_name_table, header_names[i], (gpointer)i+1); /* virtual method overload */ camel_data_wrapper_class->write_to_stream = write_to_stream; camel_medium_class->add_header = add_header; camel_medium_class->set_header = set_header; camel_medium_class->remove_header = remove_header; camel_mime_part_class->construct_from_parser = construct_from_parser; } static void camel_mime_message_init (gpointer object, gpointer klass) { CamelMimeMessage *mime_message = (CamelMimeMessage *)object; int i; camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (object), "message/rfc822"); mime_message->recipients = g_hash_table_new(g_strcase_hash, g_strcase_equal); for (i=0;recipient_names[i];i++) { g_hash_table_insert(mime_message->recipients, recipient_names[i], camel_internet_address_new()); } mime_message->subject = NULL; mime_message->reply_to = NULL; mime_message->from = NULL; mime_message->date = CAMEL_MESSAGE_DATE_CURRENT; mime_message->date_offset = 0; mime_message->date_received = CAMEL_MESSAGE_DATE_CURRENT; mime_message->date_received_offset = 0; mime_message->message_id = NULL; } static void camel_mime_message_finalize (CamelObject *object) { CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object); g_free (message->subject); g_free (message->message_id); if (message->reply_to) camel_object_unref ((CamelObject *)message->reply_to); if (message->from) camel_object_unref ((CamelObject *)message->from); g_hash_table_foreach (message->recipients, unref_recipient, NULL); g_hash_table_destroy (message->recipients); } CamelType camel_mime_message_get_type (void) { static CamelType camel_mime_message_type = CAMEL_INVALID_TYPE; if (camel_mime_message_type == CAMEL_INVALID_TYPE) { camel_mime_message_type = camel_type_register (camel_mime_part_get_type(), "CamelMimeMessage", sizeof (CamelMimeMessage), sizeof (CamelMimeMessageClass), (CamelObjectClassInitFunc) camel_mime_message_class_init, NULL, (CamelObjectInitFunc) camel_mime_message_init, (CamelObjectFinalizeFunc) camel_mime_message_finalize); } return camel_mime_message_type; } static void unref_recipient (gpointer key, gpointer value, gpointer user_data) { camel_object_unref (CAMEL_OBJECT (value)); } CamelMimeMessage * camel_mime_message_new (void) { CamelMimeMessage *mime_message; mime_message = CAMEL_MIME_MESSAGE (camel_object_new (CAMEL_MIME_MESSAGE_TYPE)); return mime_message; } /* **** Date: */ void camel_mime_message_set_date (CamelMimeMessage *message, time_t date, int offset) { char *datestr; g_assert(message); if (date == CAMEL_MESSAGE_DATE_CURRENT) { struct tm local; int tz; date = time(0); e_localtime_with_offset(date, &local, &tz); offset = (((tz/60/60) * 100) + (tz/60 % 60)); } message->date = date; message->date_offset = offset; datestr = header_format_date (date, offset); CAMEL_MEDIUM_CLASS (parent_class)->set_header ((CamelMedium *)message, "Date", datestr); g_free (datestr); } time_t camel_mime_message_get_date (CamelMimeMessage *msg, int *offset) { if (offset) *offset = msg->date_offset; return msg->date; } time_t camel_mime_message_get_date_received (CamelMimeMessage *msg, int *offset) { if (msg->date_received == CAMEL_MESSAGE_DATE_CURRENT) { const char *received; received = camel_medium_get_header ((CamelMedium *)msg, "received"); if (received) received = strrchr (received, ';'); if (received) msg->date_received = header_decode_date (received + 1, &msg->date_received_offset); } if (offset) *offset = msg->date_received_offset; return msg->date_received; } /* **** Message-Id: */ void camel_mime_message_set_message_id (CamelMimeMessage *mime_message, const char *message_id) { char *id; g_assert (mime_message); g_free (mime_message->message_id); if (message_id) { id = g_strstrip (g_strdup (message_id)); } else { id = header_msgid_generate (); } mime_message->message_id = id; id = g_strdup_printf ("<%s>", mime_message->message_id); CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (mime_message), "Message-Id", id); g_free (id); } const char * camel_mime_message_get_message_id (CamelMimeMessage *mime_message) { g_assert (mime_message); return mime_message->message_id; } /* **** Reply-To: */ void camel_mime_message_set_reply_to (CamelMimeMessage *msg, const CamelInternetAddress *reply_to) { char *addr; g_assert(msg); if (msg->reply_to) { camel_object_unref ((CamelObject *)msg->reply_to); msg->reply_to = NULL; } if (reply_to == NULL) { CAMEL_MEDIUM_CLASS (parent_class)->remove_header (CAMEL_MEDIUM (msg), "Reply-To"); return; } msg->reply_to = (CamelInternetAddress *)camel_address_new_clone ((CamelAddress *)reply_to); addr = camel_address_encode ((CamelAddress *)msg->reply_to); CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (msg), "Reply-To", addr); g_free (addr); } const CamelInternetAddress * camel_mime_message_get_reply_to (CamelMimeMessage *mime_message) { g_assert (mime_message); /* TODO: ref for threading? */ return mime_message->reply_to; } /* **** Subject: */ void camel_mime_message_set_subject (CamelMimeMessage *mime_message, const char *subject) { char *text; g_assert(mime_message); g_free (mime_message->subject); mime_message->subject = g_strstrip (g_strdup (subject)); text = header_encode_string((unsigned char *)mime_message->subject); CAMEL_MEDIUM_CLASS(parent_class)->set_header(CAMEL_MEDIUM (mime_message), "Subject", text); g_free (text); } const char * camel_mime_message_get_subject (CamelMimeMessage *mime_message) { g_assert(mime_message); return mime_message->subject; } /* *** From: */ /* Thought: Since get_from/set_from are so rarely called, it is probably not useful to cache the from (and reply_to) addresses as InternetAddresses internally, we could just get it from the headers and reprocess every time. */ void camel_mime_message_set_from (CamelMimeMessage *msg, const CamelInternetAddress *from) { char *addr; g_assert(msg); if (msg->from) { camel_object_unref((CamelObject *)msg->from); msg->from = NULL; } if (from == NULL || camel_address_length((CamelAddress *)from) == 0) { CAMEL_MEDIUM_CLASS(parent_class)->remove_header(CAMEL_MEDIUM(msg), "From"); return; } msg->from = (CamelInternetAddress *)camel_address_new_clone((CamelAddress *)from); addr = camel_address_encode((CamelAddress *)msg->from); CAMEL_MEDIUM_CLASS (parent_class)->set_header(CAMEL_MEDIUM(msg), "From", addr); g_free(addr); } const CamelInternetAddress * camel_mime_message_get_from (CamelMimeMessage *mime_message) { g_assert (mime_message); /* TODO: we should really ref this for multi-threading to work */ return mime_message->from; } /* **** To: Cc: Bcc: */ void camel_mime_message_set_recipients(CamelMimeMessage *mime_message, const char *type, const CamelInternetAddress *r) { char *text; CamelInternetAddress *addr; g_assert(mime_message); addr = g_hash_table_lookup (mime_message->recipients, type); if (addr == NULL) { g_warning ("trying to set a non-valid receipient type: %s", type); return; } if (r == NULL || camel_address_length ((CamelAddress *)r) == 0) { camel_address_remove ((CamelAddress *)addr, -1); CAMEL_MEDIUM_CLASS (parent_class)->remove_header (CAMEL_MEDIUM (mime_message), type); return; } /* note this does copy, and not append (cat) */ camel_address_copy ((CamelAddress *)addr, (const CamelAddress *)r); /* and sync our headers */ text = camel_address_encode (CAMEL_ADDRESS (addr)); CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (mime_message), type, text); g_free(text); } void camel_mime_message_set_source (CamelMimeMessage *mime_message, const char *src) { CamelURL *url; char *uri; g_assert (mime_message); url = camel_url_new (src, NULL); if (url) { uri = camel_url_to_string (url, CAMEL_URL_HIDE_ALL); camel_medium_add_header (CAMEL_MEDIUM (mime_message), "X-Evolution-Source", uri); g_free (uri); camel_url_free (url); } } const char * camel_mime_message_get_source (CamelMimeMessage *mime_message) { const char *src; g_assert(mime_message); src = camel_medium_get_header (CAMEL_MEDIUM (mime_message), "X-Evolution-Source"); if (src) { while (*src && isspace ((unsigned) *src)) ++src; } return src; } const CamelInternetAddress * camel_mime_message_get_recipients (CamelMimeMessage *mime_message, const char *type) { g_assert(mime_message); return g_hash_table_lookup (mime_message->recipients, type); } /* mime_message */ static int construct_from_parser (CamelMimePart *dw, CamelMimeParser *mp) { char *buf; int len; int state; int ret; int err; d(printf("constructing mime-message\n")); d(printf("mime_message::construct_from_parser()\n")); /* let the mime-part construct the guts ... */ ret = ((CamelMimePartClass *)parent_class)->construct_from_parser(dw, mp); if (ret == -1) return -1; /* ... then clean up the follow-on state */ state = camel_mime_parser_step (mp, &buf, &len); switch (state) { case HSCAN_EOF: case HSCAN_FROM_END: /* these doesn't belong to us */ camel_mime_parser_unstep (mp); case HSCAN_MESSAGE_END: break; default: g_error ("Bad parser state: Expecing MESSAGE_END or EOF or EOM, got: %d", camel_mime_parser_state (mp)); camel_mime_parser_unstep (mp); return -1; } d(printf("mime_message::construct_from_parser() leaving\n")); #ifndef NO_WARNINGS #warning "return a real error code" #endif err = camel_mime_parser_errno(mp); if (err != 0) { errno = err; ret = -1; } return ret; } static int write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMimeMessage *mm = CAMEL_MIME_MESSAGE (data_wrapper); /* force mandatory headers ... */ if (mm->from == NULL) { /* FIXME: should we just abort? Should we make one up? */ g_warning ("No from set for message"); camel_medium_set_header ((CamelMedium *)mm, "From", ""); } if (!camel_medium_get_header ((CamelMedium *)mm, "Date")) camel_mime_message_set_date (mm, CAMEL_MESSAGE_DATE_CURRENT, 0); if (mm->subject == NULL) camel_mime_message_set_subject (mm, "No Subject"); if (mm->message_id == NULL) camel_mime_message_set_message_id (mm, NULL); /* FIXME: "To" header needs to be set explicitly as well ... */ if (!camel_medium_get_header ((CamelMedium *)mm, "Mime-Version")) camel_medium_set_header ((CamelMedium *)mm, "Mime-Version", "1.0"); return CAMEL_DATA_WRAPPER_CLASS (parent_class)->write_to_stream (data_wrapper, stream); } /* FIXME: check format of fields. */ static gboolean process_header (CamelMedium *medium, const char *header_name, const char *header_value) { CamelHeaderType header_type; CamelMimeMessage *message = CAMEL_MIME_MESSAGE (medium); CamelInternetAddress *addr; const char *charset; header_type = (CamelHeaderType)g_hash_table_lookup (header_name_table, header_name); switch (header_type) { case HEADER_FROM: if (message->from) camel_object_unref (CAMEL_OBJECT (message->from)); message->from = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (message->from), header_value); break; case HEADER_REPLY_TO: if (message->reply_to) camel_object_unref (CAMEL_OBJECT (message->reply_to)); message->reply_to = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (message->reply_to), header_value); break; case HEADER_SUBJECT: g_free (message->subject); if (((CamelMimePart *)message)->content_type) charset = e_iconv_charset_name(header_content_type_param(((CamelMimePart *)message)->content_type, "charset")); else charset = NULL; message->subject = g_strstrip (header_decode_string (header_value, charset)); break; case HEADER_TO: case HEADER_CC: case HEADER_BCC: case HEADER_RESENT_TO: case HEADER_RESENT_CC: case HEADER_RESENT_BCC: addr = g_hash_table_lookup (message->recipients, header_name); if (header_value) camel_address_decode (CAMEL_ADDRESS (addr), header_value); else camel_address_remove (CAMEL_ADDRESS (addr), -1); break; case HEADER_DATE: if (header_value) { message->date = header_decode_date (header_value, &message->date_offset); } else { message->date = CAMEL_MESSAGE_DATE_CURRENT; message->date_offset = 0; } break; case HEADER_MESSAGE_ID: g_free (message->message_id); if (header_value) message->message_id = header_msgid_decode (header_value); else message->message_id = NULL; break; default: return FALSE; } return TRUE; } static void set_header (CamelMedium *medium, const char *header_name, const void *header_value) { process_header (medium, header_name, header_value); parent_class->parent_class.set_header (medium, header_name, header_value); } static void add_header (CamelMedium *medium, const char *header_name, const void *header_value) { /* if we process it, then it must be forced unique as well ... */ if (process_header (medium, header_name, header_value)) parent_class->parent_class.set_header (medium, header_name, header_value); else parent_class->parent_class.add_header (medium, header_name, header_value); } static void remove_header (CamelMedium *medium, const char *header_name) { process_header (medium, header_name, NULL); parent_class->parent_class.remove_header (medium, header_name); } typedef gboolean (*CamelPartFunc)(CamelMimeMessage *, CamelMimePart *, void *data); static gboolean message_foreach_part_rec (CamelMimeMessage *msg, CamelMimePart *part, CamelPartFunc callback, void *data) { CamelDataWrapper *containee; int parts, i; int go = TRUE; if (callback (msg, part, data) == FALSE) return FALSE; containee = camel_medium_get_content_object (CAMEL_MEDIUM (part)); if (containee == NULL) return go; /* using the object types is more accurate than using the mime/types */ if (CAMEL_IS_MULTIPART (containee)) { parts = camel_multipart_get_number (CAMEL_MULTIPART (containee)); for (i = 0; go && i < parts; i++) { CamelMimePart *part = camel_multipart_get_part (CAMEL_MULTIPART (containee), i); go = message_foreach_part_rec (msg, part, callback, data); } } else if (CAMEL_IS_MIME_MESSAGE (containee)) { go = message_foreach_part_rec (msg, (CamelMimePart *)containee, callback, data); } return go; } /* dont make this public yet, it might need some more thinking ... */ /* MPZ */ static void camel_mime_message_foreach_part (CamelMimeMessage *msg, CamelPartFunc callback, void *data) { message_foreach_part_rec (msg, (CamelMimePart *)msg, callback, data); } static gboolean check_8bit (CamelMimeMessage *msg, CamelMimePart *part, void *data) { CamelMimePartEncodingType encoding; int *has8bit = data; /* check this part, and stop as soon as we are done */ encoding = camel_mime_part_get_encoding (part); *has8bit = encoding == CAMEL_MIME_PART_ENCODING_8BIT || encoding == CAMEL_MIME_PART_ENCODING_BINARY; return !(*has8bit); } gboolean camel_mime_message_has_8bit_parts (CamelMimeMessage *msg) { int has8bit = FALSE; camel_mime_message_foreach_part (msg, check_8bit, &has8bit); return has8bit; } /* finds the best charset and transfer encoding for a given part */ static CamelMimePartEncodingType find_best_encoding (CamelMimePart *part, CamelBestencRequired required, CamelBestencEncoding enctype, char **charsetp) { const char *charsetin = NULL; char *charset = NULL; CamelStream *null; CamelStreamFilter *filter; CamelMimeFilterCharset *charenc = NULL; CamelMimeFilterBestenc *bestenc; int idb, idc = -1; gboolean istext; unsigned int flags, callerflags; CamelMimePartEncodingType encoding; CamelDataWrapper *content; /* we use all these weird stream things so we can do it with streams, and not have to read the whole lot into memory - although i have a feeling it would make things a fair bit simpler to do so ... */ d(printf("starting to check part\n")); content = camel_medium_get_content_object ((CamelMedium *)part); if (content == NULL) { /* charset might not be right here, but it'll get the right stuff if it is ever set */ *charsetp = NULL; return CAMEL_MIME_PART_ENCODING_DEFAULT; } istext = header_content_type_is (part->content_type, "text", "*"); if (istext) { flags = CAMEL_BESTENC_GET_CHARSET | CAMEL_BESTENC_GET_ENCODING; } else { flags = CAMEL_BESTENC_GET_ENCODING; } /* when building the message, any encoded parts are translated already */ flags |= CAMEL_BESTENC_LF_IS_CRLF; /* and get any flags the caller passed in */ callerflags = (required & CAMEL_BESTENC_NO_FROM); flags |= callerflags; /* first a null stream, so any filtering is thrown away; we only want the sideeffects */ null = (CamelStream *)camel_stream_null_new (); filter = camel_stream_filter_new_with_stream (null); /* if we're not looking for the best charset, then use the one we have */ if (istext && (required & CAMEL_BESTENC_GET_CHARSET) == 0 && (charsetin = header_content_type_param (part->content_type, "charset"))) { /* if libunicode doesn't support it, we dont really have utf8 anyway, so we dont need a converter */ charenc = camel_mime_filter_charset_new_convert ("UTF-8", charsetin); if (charenc != NULL) idc = camel_stream_filter_add (filter, (CamelMimeFilter *)charenc); charsetin = NULL; } bestenc = camel_mime_filter_bestenc_new (flags); idb = camel_stream_filter_add (filter, (CamelMimeFilter *)bestenc); d(printf("writing to checking stream\n")); camel_data_wrapper_write_to_stream (content, (CamelStream *)filter); camel_stream_filter_remove (filter, idb); if (idc != -1) { camel_stream_filter_remove (filter, idc); camel_object_unref ((CamelObject *)charenc); charenc = NULL; } if (istext) charsetin = camel_mime_filter_bestenc_get_best_charset (bestenc); d(printf("charsetin = %s\n", charsetin ? charsetin : "(null)")); /* if we have US-ASCII, or we're not doing text, we dont need to bother with the rest */ if (charsetin != NULL && (required & CAMEL_BESTENC_GET_CHARSET) != 0) { charset = g_strdup (charsetin); d(printf("have charset, trying conversion/etc\n")); /* now the 'bestenc' can has told us what the best encoding is, we can use that to create a charset conversion filter as well, and then re-add the bestenc to filter the result to find the best encoding to use as well */ charenc = camel_mime_filter_charset_new_convert ("UTF-8", charset); /* eek, libunicode doesn't undertand this charset anyway, then the 'utf8' we thought we had is really the native format, in which case, we just treat it as binary data (and take the result we have so far) */ if (charenc != NULL) { /* otherwise, try another pass, converting to the real charset */ camel_mime_filter_reset ((CamelMimeFilter *)bestenc); camel_mime_filter_bestenc_set_flags (bestenc, CAMEL_BESTENC_GET_ENCODING | CAMEL_BESTENC_LF_IS_CRLF | callerflags); camel_stream_filter_add (filter, (CamelMimeFilter *)charenc); camel_stream_filter_add (filter, (CamelMimeFilter *)bestenc); /* and write it to the new stream */ camel_data_wrapper_write_to_stream (content, (CamelStream *)filter); camel_object_unref ((CamelObject *)charenc); } } encoding = camel_mime_filter_bestenc_get_best_encoding (bestenc, enctype); camel_object_unref ((CamelObject *)filter); camel_object_unref ((CamelObject *)bestenc); camel_object_unref ((CamelObject *)null); d(printf("done, best encoding = %d\n", encoding)); if (charsetp) *charsetp = charset; else g_free (charset); return encoding; } struct _enc_data { CamelBestencRequired required; CamelBestencEncoding enctype; }; static gboolean best_encoding (CamelMimeMessage *msg, CamelMimePart *part, void *datap) { struct _enc_data *data = datap; CamelMimePartEncodingType encoding; CamelDataWrapper *wrapper; char *charset; wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); if (!wrapper) return FALSE; /* we only care about actual content objects */ if (!CAMEL_IS_MULTIPART (wrapper) && !CAMEL_IS_MIME_MESSAGE (wrapper)) { encoding = find_best_encoding (part, data->required, data->enctype, &charset); /* we always set the encoding, if we got this far. GET_CHARSET implies also GET_ENCODING */ camel_mime_part_set_encoding (part, encoding); if ((data->required & CAMEL_BESTENC_GET_CHARSET) != 0) { if (header_content_type_is (part->content_type, "text", "*")) { char *newct; /* FIXME: ick, the part content_type interface needs fixing bigtime */ header_content_type_set_param (part->content_type, "charset", charset ? charset : "us-ascii"); newct = header_content_type_format (part->content_type); if (newct) { d(printf("Setting content-type to %s\n", newct)); camel_mime_part_set_content_type (part, newct); g_free (newct); } } } } return TRUE; } void camel_mime_message_set_best_encoding (CamelMimeMessage *msg, CamelBestencRequired required, CamelBestencEncoding enctype) { struct _enc_data data; if ((required & (CAMEL_BESTENC_GET_ENCODING|CAMEL_BESTENC_GET_CHARSET)) == 0) return; data.required = required; data.enctype = enctype; camel_mime_message_foreach_part (msg, best_encoding, &data); } void camel_mime_message_encode_8bit_parts (CamelMimeMessage *mime_message) { camel_mime_message_set_best_encoding (mime_message, CAMEL_BESTENC_GET_ENCODING, CAMEL_BESTENC_7BIT); } struct _check_content_id { CamelMimePart *part; const char *content_id; }; static gboolean check_content_id (CamelMimeMessage *message, CamelMimePart *part, void *data) { struct _check_content_id *check = (struct _check_content_id *) data; const char *content_id; gboolean found; content_id = camel_mime_part_get_content_id (part); found = content_id && !strcmp (content_id, check->content_id) ? TRUE : FALSE; if (found) { check->part = part; camel_object_ref (CAMEL_OBJECT (part)); } return !found; } CamelMimePart * camel_mime_message_get_part_by_content_id (CamelMimeMessage *message, const char *id) { struct _check_content_id check; g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL); if (id == NULL) return NULL; check.content_id = id; check.part = NULL; camel_mime_message_foreach_part (message, check_content_id, &check); return check.part; } ='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/?h=gstreamer0.10-removal&id=c6fb93742e79ecc69a993f3f309092775a862692'>Update to 1.0.4 :rene2013-09-112-4/+4 | | | | | | | - better detection for bits in the radio signal - catch more corner cases in decoding of the time data The configuration file (hardware.txt) needs to be updated with this update. * - Update to 1.38sunpoet2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/XML-Compile/ChangeLog * - Update to 1.003001sunpoet2013-09-103-6/+7 | | | | | | | - Fix *_DEPENDS: add missing p5-Dist-CheckConflicts - Sort PLIST Changes: http://search.cpan.org/dist/Moo/Changes * - Update to 1.003002sunpoet2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/Role-Tiny/Changes * Fix opencv-core with libc++bapt2013-09-102-0/+273 | | | | Submitted by: theraven * Add my upstream commits to fix the build with libc++.rakuco2013-09-101-0/+245 | * - Update to 0.027sunpoet2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/Module-Build-Tiny/Changes * - Update to 3.0.3sunpoet2013-09-102-3/+3 | | | | Changes: https://github.com/guard/guard-rspec/commits/master * - Update to 0.12sunpoet2013-09-102-4/+4 | | | | Changes: http://search.cpan.org/dist/IO-Async-SSL/Changes * - Duplicate of devel/checkbashismssunpoet2013-09-104-36/+0 | | | | | Notified by: bdrewery Pointyhat to: sunpoet * Add my upstream commit that fixes the build with libc++.rakuco2013-09-101-0/+50 | * www/mitmproxy: update to 0.9.2wg2013-09-103-3/+15 | | | | | | | | | - Update to 0.9.2 Changes: https://github.com/mitmproxy/mitmproxy/blob/v0.9.2/CHANGELOG PR: ports/181949 Submitted by: Hung-Yi Chen <gaod hychen.org> (maintainer) * - convert to the new perl5 frameworkaz2013-09-1019-64/+42 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * Dropbox Uploader is a BASH script which can be used to upload, download, delete,nivit2013-09-104-0/+44 | | | | | | | list files (and more!) from Dropbox, an online file sharing, synchronization and backup service. WWW: https://github.com/andreafabrizi/Dropbox-Uploader * Update to 2.0.5martymac2013-09-102-3/+3 | * - convert to the new perl5 frameworkaz2013-09-1019-73/+43 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - convert to the new perl5 frameworkaz2013-09-1019-79/+44 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * Update to 0.24.tobez2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/Scope-Upper/Changes * - Fix fetchwen2013-09-101-3/+1 | | | | Reported by: bdrewery@ * - remove leading indefinite article from COMMENTrm2013-09-102-5/+4 | | | | | | | | - convert USE_GMAKE to USES equivalent - relax USE_PYTHON check: 2.7 is now supported - add trailing slash to WWW in pkg-descr Approved by: oliver (maintainer, by mail) * - convert to the new perl5 frameworkaz2013-09-1019-74/+43 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * pod2man in post-patch needs perl - add perl as patch dependaz2013-09-101-0/+2 | * - convert to the new perl5 frameworkaz2013-09-1019-95/+49 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * Upgrade to version 1.1.0.olgeni2013-09-103-4/+21 | * - convert to the new perl5 frameworkaz2013-09-1019-98/+51 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Fix build for upcoming HEAD changes by removing reference tobdrewery2013-09-101-2/+19 | | | | | | | | | CTL_IPPROTO_NAMES which is being removed and replacing with getprotobynumber(3) PR: ports/181488 Submitted by: jhb Approved by: maintainer timeout * - Fix this port as master port for cmigemo-dict to allow override USESaz2013-09-101-2/+1 | * - Perl required also and patch stageaz2013-09-101-0/+1 | * www/mambo: Mark BROKEN, unfetchable, MASTER_SITES DNS expiredmarino2013-09-101-0/+2 | | | | PR: ports/181557 (timed out) * sysutils/isomd5sum: Mark BROKEN, checksum mismatchmarino2013-09-101-1/+2 | | | | PR: ports/181555 (timed out) * sysutils/mktool: Mark BROKEN, unfetchable due to MASTER_SITES reorgmarino2013-09-101-6/+3 | | | | PR: ports/181554 (timed out) * net/ftelnetd: Mark BROKEN, unfetchable due to parked MASTER_SITESmarino2013-09-101-5/+3 | | | | PR: ports/181551 (timed out) * - convert to the new perl5 frameworkaz2013-09-1019-79/+44 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * databases/mird: Mark BROKEN, checksum mismatchmarino2013-09-101-6/+4 | | | | PR: ports/181549 (timed out) * cad/ldraw: Mark BROKEN, checksum mismatchmarino2013-09-101-0/+1 | | | | PR: ports/181547 (timed out) * Update to 1.70.tobez2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/Net-Domain-TLD/Changes * - Update to 0.36sunpoet2013-09-102-5/+8 | | | | | | - Fix *_DEPENDS: add missing p5-aliased Changes: http://search.cpan.org/dist/MooseX-Declare/Changes * sysutils/ciso: unbreak, de-deprecatemarino2013-09-104-7/+14 | | | | | | | | | | I mistaken thought Rodrigo was the maintainer of ciso. He straightened that out. Vasiliy, the maintainer, states that ciso in practical terms is still the latest version, and provided a patch to fix the fetch breakage. The expiration and deprecation has been removed. PR: 181558 Submitted by: blttll (Vasiliy the maintainer) * Update to 0.10(.)02.tobez2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/XML-MyXML/Changes * Update to 0.31.tobez2013-09-102-4/+4 | | | | | Changes: http://search.cpan.org/dist/Catalyst-Plugin-Static-Simple/Changes * - Update to 1.9.0culot2013-09-103-10/+43 | | | | | | | Changes: https://github.com/openstack/swift/blob/master/CHANGELOG PR: ports/180549 Submitted by: trociny@ Approved by: maintainer (timeout, >14 days) * add build-depends to perl5 to fix building error.vanilla2013-09-101-1/+2 | | | | Submitted by: Mathieu Arnold <mat at mat.cc> via email. * Update to 1.18.tobez2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/ExtUtils-Command/Changes * - convert to the new perl5 frameworkaz2013-09-1019-109/+54 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - convert to the new perl5 frameworkaz2013-09-1019-69/+45 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Update to 0.17culot2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/Future/Changes * - convert to the new perl5 frameworkaz2013-09-1019-90/+47 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Add missing capital Ssunpoet2013-09-101-1/+1 | | | | Notified by: az * - convert to the new perl5 frameworkaz2013-09-1019-74/+47 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Try to fix parallel builds (-jX) by sanitizing targets dependenciesdanfe2013-09-101-8/+9 | | | | | | | | | | | - Stop abusing ALL_TARGET for passing arguments to make(1), use it to specify the actual build target (default target would also be fine, but because of its phony dependencies, some commands would be called twice, which is not good and just asks for trouble) - Modernize LIB_DEPENDS syntax, add missing OPTIONS_DEFINE for DOCS, kill few stray empty lines and commented PORTREVISION while here Approved by: miwi, bapt (portmgr, implicit) * Update to 0.9martymac2013-09-102-3/+3 | * - convert to the new perl5 frameworkaz2013-09-1019-89/+51 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Unbreak fetching by sorting out MASTER_SITES (point it back to SF)danfe2013-09-102-28/+20 | | | | | | - Modernize Makefile header (bring it down to just two lines) - Convert USE_GMAKE and USE_PERL5_BUILD to USES, sort the knobs - Clean up port description and do-install: message, utilize ${FMT} * - Update to 5.1tabthorpe2013-09-102-3/+3 | | | | | PR: ports/181977 Submitted by: James Bailie <jimmy@mammothcheese.ca> (maintainer) * - Update 3.6tabthorpe2013-09-102-3/+3 | | | | | PR: ports/181856 Submitted by: James Bailie <jimmy@mammothcheese.ca> (maintainer) * - Update to 1.92tabthorpe2013-09-102-3/+3 | | | | | PR: ports/181805 Submitted by: James Bailie <jimmy@mammothcheese.ca> (maintainer) * - Now that misc/sword port is fixed, remove no longer needed USE_GCCdanfe2013-09-102-11/+8 | | | | | | | | - While here: drop the article from COMMENT, remove LICENSE_FILE (it was actually just vanilla GPL boilerplate), sanitize dependencies, put USES where it's normally found; tidy up port description a bit. Approved by: tabthorpe (maintainer, implicit) * - Cleanup MASTER_SITES, convert MASTER_SITE_SUBDIRdanfe2013-09-101-16/+14 | | | | | | | | | | - Tighten COMMENT line and drop the article - Fix the build against Clang and thus drop USE_GCC - Remove PKGMESSAGE, it's set automatically - Correctly pad ${CAT} ${PKGMESSAGE} - Couple of minor fixes (LIB_DEPENDS, etc.) Approved by: tabthorpe (maintainer) * - Remove net/p5-SOAP-Transport-HTTP-Placktabthorpe2013-09-105-48/+0 | | | | | | | - Duplicate of www/p5-SOAP-Transport-HTTP-Plack - This should fix the portbuild bot With hat: portmgr * - convert to the new perl5 frameworkaz2013-09-1019-74/+46 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * www/py-flexget: update to 1.1.115wg2013-09-102-3/+3 | | | | - Update to 1.1.115 * - Add USE_GCC=any to build on 10.Xtabthorpe2013-09-101-0/+1 | | | | Submitted by: pkg-fallout * math/giacxcas: update to 1.1.0wg2013-09-103-12/+38 | | | | | | | | | - Update to 1.1.0 [1] - Convert lib depends to new syntax - USES gmake PR: ports/181906 [1] Submitted by: Han Frederic <han math.jussieu.fr> (maintainer) * audio/audacity: update to 2.0.4wg2013-09-102-16/+20 | | | | | | | | | - Update to 2.0.4 [1] - Add SOXR option [1] - Convert lib depends to new syntax PR: ports/181922 [1] Submitted by: Jack Low <xxjack12xx gmail.com> (maintainer) * net/crtmpserver: update to 0.806wg2013-09-105-27/+58 | | | | | | | | | | - Update to 0.806 [1] - Convert lib depends to new syntax - Add LICENSE (GPLv3) - Fix pkg-plist PR: ports/181924 [1] Submitted by: Gavriloaie Eugen-Andrei <support rtmpd.com> (maintainer) * graphics/webp: do not depend on explicit jpeg library versionmm2013-09-101-1/+1 | | | | | | PR: ports/181270 Submitted by: myself Approved by: maintainer (timeout) * Bump some PORTREVISIONs due to graphics/webp update to 0.3.1mm2013-09-1010-4/+10 | * Update graphics/webp to 0.3.1mm2013-09-103-6/+4 | | | | | | PR: ports/181270 Submitted by: myself Approved by: maintainer (timeout) * - Fix the build with clang and libc++.rakuco2013-09-104-16/+8 | | | | | | | | | | | | | | | - Point to the new domain in WWW. - Convert Makefile header. - Get rid of files/patch-herqq.pro by passing the proper arguments in QMAKE_ARGS. fluffy is usually responsive to PRs, but I ended up asking bapt for an approval here because hupnp is a dependency of kdelibs4 and I want to reduce the likelihood of an avalanche of PRs and complaints about KDE4 not building on -CURRENT (there are other ports to fix, though). PR: ports/181974 Approved by: portmgr (bapt) * Upgrade to 1.0rc3.mandree2013-09-102-4/+4 | | | | | | | | | | | This removes the 'Incoming' map and uses a node of the same name in the 'Literature and Annotations' mind map. Node icons are now context-sensitive, and the demo maps missing from rc2 have been re-done with new content. The Changelog does not appear to be available yet, the relevant Blog entry is http://www.docear.org/2013/08/27/docear-1-0-rc3-improved-monitoring-concept-neater-gui-and-many-bug-fixes/ * - Update adblock_plus to 2.3.2bar2013-09-103-119/+70 | | | | | | - Take maintainership Approved by: flo (mentor), ale (former maintainer) * - Update Firebug to 1.12.1bar2013-09-103-113/+63 | | | | Approved by: flo (mentor) * - Revert r325962 and set MODELS as default optionbar2013-09-103-61/+36 | | | | | | - Remove DHTP option as distfile is no more fetchable Approved by: flo (mentor) * Point to the non-deprecated site in WWW.rakuco2013-09-101-1/+1 | * Update to formal 1.0 release.mandree2013-09-102-3/+3 | | | | | Blog announcement: http://blog.neil.brown.name/2013/08/wiggle-1-0/ * - Update to 0.9.8.delphij2013-09-102-7/+21 | | | | | - Override 'do-install' target so we install shared library with a version number. * Add an explicit dependency on pkgconfantoine2013-09-1026-84/+41 | | | | Approved by: portmgr (bapt) * - convert to the new perl5 frameworkaz2013-09-1019-95/+48 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Add p5-IO-SessionData 1.03sunpoet2013-09-105-0/+31 | | | | | | IO::SessionData is a supporting module for SOAP::Lite. WWW: http://search.cpan.org/dist/IO-SessionData/ * - drop depedency to makedependdinoex2013-09-101-2/+0 | | | | Submitted by: Darren Pilgrim * - Update to 0.0.31sunpoet2013-09-103-8/+8 | | | | | | | | - Convert to new LIB_DEPENDS format - Sort USES - Use single space after WWW: Changes: http://cgit.freedesktop.org/libreoffice/contrib/libvisio/log/ * - Update OSVERSION check and commentsunpoet2013-09-101-18/+15 | | | | | | | | | | | | - While I'm here: - Move LICENSE upward - Use USES=gmake - Convert to new perl5 framework - Fix spelling of FreeBSD and OpenSSL - Remove outdated OSVERSION check PR: ports/181828 Submitted by: Sergei Vyshenski <svysh.fbsd@gmail.com> (maintainer) * - Add checkbashisms 2.12.6sunpoet2013-09-104-0/+36 | | | | | | | | | Debian script that checks for bashisms WWW: http://packages.qa.debian.org/d/devscripts.html PR: ports/179188 Submitted by: Hakisho Nukama <nukama@gmail.com> * - Add gpgdir 1.9.5sunpoet2013-09-104-0/+37 | | | | | | | | | | gpgdir is a perl script that uses the CPAN GnuPG::Interface module to encrypt and decrypt directories using a gpg key specified in ~/.gpgdirrc. WWW: http://www.cipherdyne.org/gpgdir/ PR: ports/179187 Submitted by: Hakisho Nukama <nukama@gmail.com> * - Add p5-GRNOC-Config 1.0.9sunpoet2013-09-104-0/+36 | | | | | | | | | | | A module to allow everyone to access config files in a fairly standard way. Uses XML::XPath and XML::Simple to parse our XML files, and stores all configs it has access to in this module. WWW: http://www.sourceforge.net/projects/routerproxy PR: ports/178516 Submitted by: Muhammad Moinur Rahman <5u623l20@gmail.com> * - Add p5-SOAP-Transport-HTTP-Plack 0.03sunpoet2013-09-105-0/+48 | | | | | | | | | | | | | | | | SOAP::Transport::HTTP::Plack - transport for Plack [1] PSGI toolkit for SOAP::Lite module. The module is quite similar to SOAP::Transport::HTTP::Apache. Docs were stolen completely from SOAP::Transport::HTTP::Nginx. [1] http://search.cpan.org/~miyagawa/Plack/ WWW: http://search.cpan.org/dist/SOAP-Transport-HTTP-Plack/ PR: ports/172317 Submitted by: Takefu <takefu@airport.fm> * - Cleanup Makefile headersunpoet2013-09-102-10/+7 | | | | | | | | | - While I'm here: - Convert to new LIB_DEPENDS format - Convert to new perl5 framework PR: ports/177681 Submitted by: Tatsuki Makino <tatsuki_makino@hotmail.com> (maintainer) * - Update to 11.0.0.0sunpoet2013-09-103-11/+12 | | | | | | | | | | | - Convert to new options framework - While I'm here, simplify PORTDOCS installation Changes: - Uses new upstream version 11.0.0 (which does not contain any code changes) PR: ports/177681 Submitted by: Tatsuki Makino <tatsuki_makino@hotmail.com> (maintainer) * - Update to 11.0.0.0sunpoet2013-09-103-11/+12 | | | | | | | | | | | - Convert to new options framework - While I'm here, simplify PORTDOCS installation Changes: - Uses new upstream version 11.0.0 (which does not contain any code changes) PR: ports/177681 Submitted by: Tatsuki Makino <tatsuki_makino@hotmail.com> (maintainer) * - Use USES=shebangfixsunpoet2013-09-102-39/+40 | | | | - Sort *_DEPENDS and PLIST * - Update to 0.11sunpoet2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/Log-Dispatch-Dir/Changes * - Update to 0.11sunpoet2013-09-102-3/+3 | | | | Changes: http://search.cpan.org/dist/IO-Async-SSL/Changes * - Update to 2.0.8 .nox2013-09-108-32/+114 | | | | | | | | | | | | | - Add subtitle, video, and audio track scrolling to VLC's ncurses.c module. [1] - Add GME knob. (audio/libgme dependency) [2] - Fix build with clang+libc++. [3] PR: ports/181596 [1], ports/181909 [3] Submitted by: Cam Karnes <karnes.cameron@gmail.com> [1] Submitted by: pawel (on -multimedia) [2] Submitted by: "O. Hartmann" <ohartman@zedat.fu-berlin.de>, bapt via pb2 [3] Obtained from: vlc upstream git [1] * - convert to the new perl5 frameworkaz2013-09-1019-94/+51 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - convert to the new perl5 frameworkaz2013-09-1019-84/+44 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * devel/awscli: delete argparse from requirementswg2013-09-101-0/+3 | | | | | | | - Delete argparse from requirements for python >= 2.7 PR: ports/181965 Reported by: Alexey Degtyarev <alexey renatasystems.org> * Pass devel/hub on to a new maintainer.rakuco2013-09-101-1/+1 | | | | | | PR: ports/181752 Submitted by: Konstantinos Koukopoulos <koukopoulos@gmail.com> (new maintainer) Approved by: Simon Olofsson <simon@olofsson.de> (former maintainer) * - Convert to new LIB_DEPENDS format and sort themsunpoet2013-09-101-3/+3 | * - convert to the new perl5 frameworkaz2013-09-0919-89/+50 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * Update to postgreSQL 9.3.0girgen2013-09-094-40/+3 | | | | | | | | | | | | | | | | Major enhancements in PostgreSQL 9.3 include: - Add materialized views - Make simple views auto-updatable - Add many features for the JSON data type, including operators and functions to extract elements from JSON values - Implement SQL-standard LATERAL option for FROM-clause subqueries and function calls - Allow foreign data wrappers to support writes (inserts/updates/deletes) on foreign tables - Add a Postgres foreign data wrapper to allow access to other Postgres servers - Add support for event triggers - Add optional ability to checksum data pages and report corruption - Prevent non-key-field row updates from blocking foreign key checks - Greatly reduce System V shared memory requirements URL: http://www.postgresql.org/docs/9.3/static/release-9-3.html * textproc/py-sphinxcontrib-httpdomain: Sphinx domain for HTTP APIswg2013-09-095-0/+54 | | | | | | | This contrib extension, sphinxcontrib.httpdomain provides a Sphinx domain for describing RESTful HTTP APIs. WWW: http://bitbucket.org/birkenfeld/sphinx-contrib/ * - convert to the new perl5 frameworkaz2013-09-0919-96/+53 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Update to 2.1.13ashish2013-09-093-15/+6 | | | | Submitted by: damir bikmuhametov <boco at ufanet.ru> (private email) * - Add LICENSEsunpoet2013-09-091-0/+5 | | | | - Add PORTSCOUT * - Update to 0.16.4culot2013-09-092-3/+3 | | | | | PR: ports/181926 Submitted by: Christer Edwards <christer.edwards@gmail.com> (maintainer) * - Update to 2.17.26gahr2013-09-092-3/+3 | * - convert to the new perl5 frameworkaz2013-09-0919-89/+50 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Update to 2.35.0culot2013-09-092-3/+3 | | | | | | Changes: http://code.google.com/p/selenium/source/browse/py/CHANGES PR: ports/181925 Submitted by: Douglas William Thrift <douglas@douglasthrift.net> (maintainer) * Update to 1.1.0zeising2013-09-092-3/+3 | * Update to 1.0.8zeising2013-09-092-3/+3 | * Update to 1.1.3zeising2013-09-092-3/+3 | * Update to 1.0.4zeising2013-09-092-3/+3 | * Update to 1.3.3zeising2013-09-093-6/+8 | | | | | Most notable in this update is that the default xinitrc has moved from lib/X11/xinit/xinitrc to etc/X11/xinit/xinitrc. * - convert to the new perl5 frameworkaz2013-09-0919-84/+50 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - convert to the new perl5 frameworkaz2013-09-0919-100/+52 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * Introduce a new USE_CXXSTD similar to USE_CSTD to allow enforcing the C++ ↵bapt2013-09-091-0/+5 | | | | language standard to use when building a port * - Remove Author linesunpoet2013-09-091-2/+0 | * - Update to 2.132510sunpoet2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/CPAN-Meta/Changes * - Remove leading indefinite article from COMMENTsunpoet2013-09-091-3/+4 | | | | | - Remove IPV6 from OPTIONS_DEFAULT - Convert to new perl5 framework * - Install data files (airports, places, stations, zctas and zones)sunpoet2013-09-091-3/+17 | | | | | | | | | | - Use CONFLICTS_INSTALL instead of CONFLICTS - Use USES=shebangfix - Add post-install: message - Bump PORTREVISION for package change PR: ports/181955 Submitted by: hiren * - Fix make packagesunpoet2013-09-091-6/+4 | | | | | | | | - Cosmetic change PR: ports/181956 Submitted by: Takefu <takefu@airport.fm> (maintainer) Reported by: gergely.czuczy@harmless.hu * - Update to 0.9.0sunpoet2013-09-094-9/+10 | | | | | | | | - Fix Makefile header - Sort PLIST - Use single space after WWW: Changes: https://code.google.com/p/multidimalgorithm/source/browse/NEWS * - Update to 2.2.1sunpoet2013-09-092-3/+3 | | | | Changes: http://code.google.com/p/numexpr/wiki/ReleaseNotes * - Update to 2013.09.08sunpoet2013-09-092-3/+3 | * - Update to 2013.09.08sunpoet2013-09-092-3/+3 | * - Update to 20130908sunpoet2013-09-092-3/+3 | * - Update to 2013.09.08sunpoet2013-09-092-3/+3 | * - Update to 20130902sunpoet2013-09-092-3/+3 | * - Update to 20130902sunpoet2013-09-092-3/+3 | * - convert to the new perl5 frameworkaz2013-09-0919-93/+52 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * - Update to 05_20130908gahr2013-09-093-261/+4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes: * The compiler has been improved to use charvalue instead of intvalue, when characters are initialized. Thanks go to Brian Callahan, for reporting the bug. Btw.: Brian Callahan created an openBSD port for Seed7. * The makefile mk_freebsd.mk has been added to support compilation under freeBSD. Thanks go to Pietro Cerutti, for providing it. * The makefiles mk_clang.mak and mk_freebsd.mk have been improved to use the options -ffunction-sections, -fdata-sections and *Wl,--strip-debug. * The functions bStriLe2BigInt, bytesLe2BigInt, bStriBe2BigInt, bytesBe2BigInt, bStriLe, bytesLe, bStriBe and bytesBe have been added to bytedata.s7i. This functions convert between sequences of bytes and bigInteger numbers. * In bytedata.s7i the functions bytesLeAsInt and bytesBeAsInt have been renamed to bytesLe2Int respectively bytesBe2Int. * Parameter names have been added to seed7_05.s7i, graph_file.s7i, graph.s7i, reference.s7i, pac.sd7, tetg.sd7, tet.sd7 and wiz.sd7. * Checks for the Karatsuba multiplication and the functions bytesBe, bytesLe, bytesBe2BigInt and bytesLe2BigInt have been added to chkbig.sd7. * Checks for set membership in character sets have been added to chkset.sd7. * The readability of the bitset initialisation in the compiler (s7c) has been improved. * Interpreter and compiler have been improved to support the new actions BIG_FROM_BSTRI_BE, BIG_FROM_BSTRI_LE, BIG_TO_BSTRI_BE and BIG_TO_BSTRI_LE. * The functions bigFromBytesBe, bigFromBytesLe, bigFromBStriBe, bigFromBStriLe, bigToBStriBe and bigToBStriLe have been added to both, big_gmp.c and big_rtl.c. * In big_gmp.c and big_rtl.c the function bigImport has been rewritten to use bigFromBytesBe. * The readability of the function uint2_mult in int_rtl.c has been improved. * The program chkccomp.c has been improved to check for a ones complement inttype and if casting can be used to get the element of a union. * Several makefiles have been adjusted to use 'cp -p' instead of 'cp -a'. The cp command openBSD does not support -a. * The function bigRand in big_rtl.c has been improved to avoid that a random number is outside the required range. * - Update to version 0.12.3, which brings new Bright Novae plugin and fixesdanfe2013-09-093-6/+22 | | | | | | | | | of a few bugs within plugins and the search tool - Rename SOUND option to MULTIMEDIA, as it covers video as well This is likely to be the last release based on Qt 4.8, next series (0.13.x) would be based on Qt 5, which offers improved modularity, has better OpenGL support, and nice new Qt3D and QML stuff for GUI. * - convert to the new perl5 frameworkaz2013-09-0919-94/+52 | | | | | | - trim Makefile header Approved by: portmgr (bapt@, blanket) * Update to 1.16.tobez2013-09-092-5/+5 | | | | Changes: http://search.cpan.org/dist/Tree-DAG_Node/Changes * Update to 0.37.tobez2013-09-093-12/+13 | | | | Changes: http://search.cpan.org/dist/MooseX-Types/Changes * Update to 4.34.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Mojolicious/Changes * Update 0.9.4 release.ale2013-09-092-4/+3 | * Fix syntax issue in make.texi; fixes build with modern texinfojohans2013-09-091-0/+2 | | | | Reported by: omar siddique <omars1234@gmail.com> * Add an upstream commit to fix libc++-related issues.rakuco2013-09-092-1/+82 | | | | | | | | This should fix the build of unit tests in x11/kdelibs4 with clang and libc++, as reported in [1]. Bump PORTREVISION, as this changes an installed header. [1] http://lists.freebsd.org/pipermail/freebsd-ports/2013-September/085821.html * Add a ton of patches needed to get the port building with libc++.rakuco2013-09-092-0/+1075 | | | | | | | | | | | | | One of them is a patch I got into Qt some time ago, but patch-libcxx is a collection of commits to WebKit itself (and a few changes of mine) that never got downstream Qt's copy of WebKit. Some good soul with free time should work on porting qtwebkit-23 [1], which contains a much more up-to-date WebKit checkout. [1] https://blogs.kde.org/2013/07/17/qtwebkit-232-and-qtwebkit-qt-51 PR: ports/181932 * - Allow this port to build a package so users can switch withoutbdrewery2013-09-091-0/+2 | | | | | | | needing ports Reviewed by: bapt With hat: portmgr * Horde package update:mm2013-09-094-6/+6 | | | | | Horde_ActiveSync 2.7.2 -> 2.7.3 Horde_Imap_Client 2.14.0 -> 2.15.0 * Update to 0.0.8.tobez2013-09-092-3/+3 | | | | | | Changes: http://search.cpan.org/dist/File-Dir-Dumper/Changes PR: 181951 Submitted by: maintainer * Update to 1.4.1.tobez2013-09-093-4/+5 | | | | | | Changes: http://search.cpan.org/dist/NetPacket/Changes PR: 181950 Submitted by: maintainer * Update to 0.42.tobez2013-09-092-4/+5 | | | | Changes: http://search.cpan.org/dist/MooseX-Storage/Changes * Update to 0.2802.12.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/ExtUtils-CBuilder/Changes * The format for bind.address has changed, so document and alert users.crees2013-09-093-4/+17 | | | | | | | At the same time, fix some errors for logging in the rc script. PR: ports/179927 Submitted by: Alexander Yerenkow <yerenkow@gmail.com> (maintainer) * devel/py-mongoengine: add pkg-plistwg2013-09-091-0/+109 | | | | - Add pkg-plist file * Don't rely on `file -L' to follow symlinks and find type of the filesobomax2013-09-091-1/+2 | | | | | | | | | | | they point to. It only works if symlink points to the file directly and fails if there are more than one level of symlinks. Use realpath(1) to drill out the actual path to the shared lib and feed it to file(1) then. This fixes issue with cerain LIB_DEPENDS, such as databases/db42. Approved by: portmgr (bapt) * - Update to 1.2.8sunpoet2013-09-092-11/+11 | | | | | | | | | | | | - While I'm here: - Use GNU macro - Add OPTIONS_DEFINE - Convert to new perl5 framework - Simplify regex Changes: http://git.savannah.gnu.org/gitweb/?p=libidn.git;a=blob;f=NEWS PR: ports/181942 Submitted by: Hung-Yi Chen <gaod@hychen.org> (maintainer) * - Update to 0.9.2sunpoet2013-09-092-4/+4 | | | | | | Changes: https://github.com/mitmproxy/netlib/commits/master PR: ports/181941 Submitted by: Hung-Yi Chen <gaod@hychen.org> (maintainer) * Update to 0.16(.)009.tobez2013-09-094-8/+5 | | | | Changes: http://search.cpan.org/dist/DateTime-Format-Pg/Changes * Update to 0.82.tobez2013-09-093-6/+4 | | | | Changes: http://search.cpan.org/dist/Squatting/Changes * Update to 0.38.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/HTML-TagCloud/CHANGES * Update to 2.0009.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Text-Xslate/Changes * Update to 0.09.tobez2013-09-093-5/+4 | | | | Changes: http://search.cpan.org/dist/Text-Query/ChangeLog * Update to 1.669(.)004.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Text-Autoformat/Changes * Update to 0.56.tobez2013-09-093-3/+5 | | | | Changes: http://search.cpan.org/dist/Lingua-Identify/Changes * Update to 1.131650.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Geo-IPfree/Changes * Update to 0.18.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Try-Tiny/Changes * Update to 1.05.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Color-Scheme/Changes * Update to 1.9726.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Time-HiRes/Changes * Update to 2.45.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Storable/ChangeLog * Update to 0.11.tobez2013-09-093-11/+4 | | | | Changes: http://search.cpan.org/dist/MooseX-Aliases/Changes * Update to 1.26.tobez2013-09-092-3/+3 | | | | Changes: http://search.cpan.org/dist/Set-Scalar/ChangeLog * - Update to 1.3.1sunpoet2013-09-082-3/+3 | | | | Changes: https://github.com/guard/listen/blob/master/CHANGELOG.md * - Update to 0.57sunpoet2013-09-082-21/+26 | | | | Changes: http://search.cpan.org/dist/MooseX-Getopt/Changes * - Add p5-Test-Warnings 0.008sunpoet2013-09-085-0/+48 | | | | | | | | | | | | | | | | | If you've ever tried to use Test::NoWarnings to confirm there are no warnings generated by your tests, combined with the convenience of done_testing to not have to declare a test count, you'll have discovered that these two features do not play well together, as the test count will be calculated before the warnings test is run, resulting in a TAP error. (See examples/test_nowarnings.pl in this distribution for a demonstration.) This module is intended to be used as a drop-in replacement for Test::NoWarnings: it also adds an extra test, but runs this test before done_testing calculates the test count, rather than after. It does this by hooking into done_testing as well as via an END block. You can declare a plan, or not, and things will still Just Work. WWW: http://search.cpan.org/dist/Test-Warnings/ * - Update to 0.004sunpoet2013-09-082-5/+8 | | | | | | - Convert to new perl5 framework Changes: http://search.cpan.org/dist/Type-Tie/Changes * - Update to 2.044sunpoet2013-09-082-3/+4 | | | | Changes: http://search.cpan.org/dist/Config-Model-Tester/Changes * - Fix *_DEPENDS: Config::Model::Tester is a test-only dependencysunpoet2013-09-081-2/+3 | | | | - Bump PORTREVISION for dependency change * - update to 2.34.0dinoex2013-09-085-27/+27 | | | | - new option ANN for edge bundling * Update to 0.84.tobez2013-09-082-3/+3 | | | | Changes: http://search.cpan.org/dist/IPC-Cmd/CHANGES * Mark MAKE_JOBS_UNSAFEbdrewery2013-09-081-0/+2 | * Update to 0.15.tobez2013-09-082-3/+3 | | | | | | | Changes: http://search.cpan.org/dist/Directory-Scratch/Changes M p5-Directory-Scratch/Makefile M p5-Directory-Scratch/distinfo * Update to 0.10.tobez2013-09-082-3/+3 | | | | | | | Changes: http://search.cpan.org/dist/Devel-Refcount/Changes M p5-Devel-Refcount/Makefile M p5-Devel-Refcount/distinfo * devel/py-mongoengine: take maintainershipwg2013-09-081-1/+1 | | | | | | | - Take maintainership (forgot to do so in the last commit) PR: ports/181486 Approved by: maintainer (timeout) * - Add ffmpeg/libav supportdecke2013-09-084-18/+79 | | | | | | | | - Add libdvbcsa support - Convert LIB_DEPENDS to new shlib format - Cleanup CONFIGURE_ENV/CFLAGS/LDFLAGS - The tvheadend port is mature enough so remove the warnings in pkg-message - Bump PORTREVISION * Update to 0.047.tobez2013-09-082-3/+3 | | | | | | | Changes: http://search.cpan.org/dist/Data-GUID/Changes M p5-Data-GUID/Makefile M p5-Data-GUID/distinfo * Update to 1.111013.tobez2013-09-082-3/+3 | | | | Changes: http://search.cpan.org/dist/CPAN-Mini/Changes * Update to 1.2907.tobez2013-09-082-3/+3 | | | | Changes: http://search.cpan.org/dist/BSD-Resource/ChangeLog * libdvbcsa is a free implementation of the DVB Common Scrambling Algorithmdecke2013-09-08