[notmuch] Guide for new users?
Hi, I think it will be nice if we can have a guide/tutorial like documentation for new users. For myself, I have the following questions (I am an alpine user previously, so some of the questions are not related to notmuch directly): 1. What's the most efficient way to sync mails from my gmail account to a local Maildir? I've tried offlineimap but it keeps crashing python (!) on my system (python 2.6, Mac OS X 10.6.2). 2. How to add notmuch.el into my .emacsrc? I know notmuch feels like a tool for geeks, but it will probably lower the barrier if someone can provide such a guide in a straightforward, step-by-step way. - Jiang
[notmuch] [PATCH] Mac OS X compatibility fixes
Hi Alex, On Sun, Nov 22, 2009 at 12:17 PM, Alexander Botero-Lowry wrote: >> +#ifdef __APPLE__ > Not awesome. > > This should be done in a capabilites way, for example strndup was added > to FreeBSD in 7.2 (which is this current release of the 7 line), and so > for older versions of FreeBSD strndup will be needed. getdelim() and > getline() came in FreeBSD 8, so they'll be needed for the entire 7 line. > So Instead of just assuming __APPLE__ this should be done by determing > if the symbols are generally needed. The problem is that notmuch does not have a fully functional configure process yet, Carl did mention Makefile.local, but it seems this file is not generated by configure right now. (No config.h either.) I will be happy to fix my patch if such facility (like AC_CHECK_FUNCS([getline])) exists. - Jiang
[notmuch] [PATCH] Mac OS X compatibility fixes
Add missing GNU extensions strdup() and getline(). The C library shipped with Mac OS X does not include them (though it does support some GNU extensions when _GNU_SOURCE is defined), so we have to add these two. The getline() implementation is a modified version of getdelim() from GNU Libc. --- lib/xutil.c | 99 +++ lib/xutil.h |6 +++ 2 files changed, 105 insertions(+), 0 deletions(-) diff --git a/lib/xutil.c b/lib/xutil.c index 6fa5eb0..805b236 100644 --- a/lib/xutil.c +++ b/lib/xutil.c @@ -79,6 +79,105 @@ xstrdup (const char *s) return ret; } +#ifdef __APPLE__ +/* Mac OS X don't have strndup even if _GNU_SOURCE is defined */ +char *strndup (const char *s, size_t n) +{ +size_t len = strlen (s); +char *ret; + +if (len <= n) + return strdup (s); + +ret = malloc(n + 1); +strncpy(ret, s, n); +ret[n] = '\0'; +return ret; +} + +/* getline implementation is copied from glibc. */ + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif +#ifndef SSIZE_MAX +# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) +#endif + +ssize_t getline (char **lineptr, size_t *n, FILE *fp) +{ +ssize_t result; +size_t cur_len = 0; + +if (lineptr == NULL || n == NULL || fp == NULL) +{ + errno = EINVAL; + return -1; +} + +if (*lineptr == NULL || *n == 0) +{ + *n = 120; + *lineptr = (char *) malloc (*n); + if (*lineptr == NULL) + { + result = -1; + goto end; + } +} + +for (;;) +{ + int i; + + i = getc (fp); + if (i == EOF) + { + result = -1; + break; + } + + /* Make enough space for len+1 (for final NUL) bytes. */ + if (cur_len + 1 >= *n) + { + size_t needed_max = + SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; + size_t needed = 2 * *n + 1; /* Be generous. */ + char *new_lineptr; + + if (needed_max < needed) + needed = needed_max; + if (cur_len + 1 >= needed) + { + result = -1; + goto end; + } + + new_lineptr = (char *) realloc (*lineptr, needed); + if (new_lineptr == NULL) + { + result = -1; + goto end; + } + + *lineptr = new_lineptr; + *n = needed; + } + + (*lineptr)[cur_len] = i; + cur_len++; + + if (i == '\n') + break; +} +(*lineptr)[cur_len] = '\0'; +result = cur_len ? (ssize_t) cur_len : result; + +end: +return result; +} +#endif + char * xstrndup (const char *s, size_t n) { diff --git a/lib/xutil.h b/lib/xutil.h index b973f7d..0b53f7c 100644 --- a/lib/xutil.h +++ b/lib/xutil.h @@ -25,6 +25,12 @@ #include #include +#ifdef __APPLE__ +/* Mac OS X don't have strndup and getline even if _GNU_SOURCE is defined */ +char *strndup (const char *s, size_t n); +ssize_t getline(char **lineptr, size_t *n, FILE *stream); +#endif + /* xutil.c */ void * xcalloc (size_t nmemb, size_t size); -- 1.6.4
[notmuch] Mac OS X/Darwin compatibility issues
Hi, On Wed, Nov 18, 2009 at 1:45 PM, Alexander Botero-Lowry wrote: > for getline do you mind trying #define _GNU_SOURCE 1 > before #include in the offending files? The FreeBSD man pages > mentions that as a way of enabling the GNU version of getline(). It seems even _GNU_SOURCE is defined, getline is still not present. the C lib in Mac OS X simply doesn't have it. See also [1]. - Jiang [1] http://stackoverflow.com/questions/1117108/compiling-c-code-using-gnu-c-getline-on-mac-osx
[notmuch] Mac OS X/Darwin compatibility issues
Hi, When I tried to compile notmuch under Mac OS X 10.6, several issues arisen: 1. g++ reports 'warning: command line option "-Wmissing-declarations" is valid for C/ObjC but not for C++' 2. notmuch-reply.c: In function ?address_is_users?: notmuch-reply.c:87: warning: passing argument 2 of ?notmuch_config_get_user_other_email? from incompatible pointer type That's due to the size incompatibility of 'unsigned int' and 'size_t' (size_t is uint64_t in Mac OS X). 3. Several errors about missing GNU extensions like getline() and strndup(): warning: implicit declaration of function ?getline? error: ?strndup? was not declared in this scope We can implement these with fgets() and strncpy() though. - Jiang