[notmuch] Guide for new users?

2009-11-22 Thread Jjgod Jiang
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

2009-11-22 Thread Jjgod Jiang
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

2009-11-22 Thread Jjgod Jiang
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

2009-11-18 Thread Jjgod Jiang
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

2009-11-18 Thread Jjgod Jiang
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