--- /dev/null
+Return-Path: <tomi.ollila@iki.fi>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+ by olra.theworths.org (Postfix) with ESMTP id D2FED431FB6\r
+ for <notmuch@notmuchmail.org>; Tue, 15 May 2012 08:31:37 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none]\r
+ autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+ by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+ with ESMTP id saCyZMdBLOJt for <notmuch@notmuchmail.org>;\r
+ Tue, 15 May 2012 08:31:36 -0700 (PDT)\r
+Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34])\r
+ by olra.theworths.org (Postfix) with ESMTP id 1F566431FAE\r
+ for <notmuch@notmuchmail.org>; Tue, 15 May 2012 08:31:36 -0700 (PDT)\r
+Received: by guru.guru-group.fi (Postfix, from userid 501)\r
+ id 3D9BF100642; Tue, 15 May 2012 18:31:45 +0300 (EEST)\r
+From: Tomi Ollila <tomi.ollila@iki.fi>\r
+To: Ali Polatel <alip@exherbo.org>, Austin Clements <amdragon@mit.edu>\r
+Subject: Re: [PATCH] ruby: extern linkage portability improvement\r
+In-Reply-To:\r
+ <CADv3eywyAaqtAhzYJFjVp9xpWcPv35L1CGPYK3PK_GaDrAJOVw@mail.gmail.com>\r
+References: <1336669964-24231-1-git-send-email-tomi.ollila@iki.fi>\r
+ <20120513171917.GL11804@mit.edu>\r
+ <CADv3eywyAaqtAhzYJFjVp9xpWcPv35L1CGPYK3PK_GaDrAJOVw@mail.gmail.com>\r
+User-Agent: Notmuch/0.13~rc1+22~g672e3f0 (http://notmuchmail.org) Emacs/23.1.1\r
+ (x86_64-redhat-linux-gnu)\r
+X-Face: HhBM'cA~<r"^Xv\KRN0P{vn'Y"Kd;zg_y3S[4)KSN~s?O\"QPoL\r
+ $[Xv_BD:i/F$WiEWax}R(MPS`^UaptOGD`*/=@\1lKoVa9tnrg0TW?"r7aRtgk[F\r
+ !)g;OY^,BjTbr)Np:%c_o'jj,Z\r
+Date: Tue, 15 May 2012 18:31:45 +0300\r
+Message-ID: <m262bxlau6.fsf@guru.guru-group.fi>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=us-ascii\r
+Cc: notmuch@notmuchmail.org\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+ <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+ <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+ <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Tue, 15 May 2012 15:31:38 -0000\r
+\r
+On Tue, May 15 2012, Ali Polatel <alip@exherbo.org> wrote:\r
+\r
+> 2012/5/13 Austin Clements <amdragon@mit.edu>:\r
+>> Quoth Tomi Ollila on May 10 at .8:12 pm:\r
+>>> Some C compilers are stricter when it comes to (tentative) definition\r
+>>> of a variable -- in those compilers introducing variable without 'extern'\r
+>>> keyword always allocates new 'storage' to the variable and linking all\r
+>>> these modules fails due to duplicate symbols.\r
+>>>\r
+>>> This change uses some macro trickery to avoid writing every variable twice.\r
+>>>\r
+>>> This is reimplementation of Charlie Allom's patch:\r
+>>> id:"1336481467-66356-1-git-send-email-charlie@mediasp.com"\r
+>>>\r
+>>> combining information from other change made by Ali Polatel.\r
+>>> ---\r
+>>>\r
+>>> Charlie: could you test whether this patch actually work ? :)\r
+>>>\r
+>>> Everyone: what do you think of the "hiding extern" macro trick ?\r
+>>\r
+>> This seems like a hacky and nonstandard way to do this. .Granted, the\r
+>> standard way to do this---always declare variables extern in .h files\r
+>> and also give a non-extern definition in exactly one .c file---is more\r
+>> verbose, but nobody will be surprised or confused by it.\r
+>\r
+> I fully agree or otherwise I'd suggest using:\r
+> http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh/mac.h\r
+\r
+Yes...\r
+\r
+(Hmm, I hope no-one got confused that the trick was mine and not yours :)\r
+\r
+So, the patch you provided in github would be good...\r
+\r
+Tomi\r
+\r
+>\r
+>>> .bindings/ruby/defs.h | . 56 +++++++++++++++++++++++++++----------------------\r
+>>> .bindings/ruby/init.c | . .2 +\r
+>>> .2 files changed, 33 insertions(+), 25 deletions(-)\r
+>>>\r
+>>> diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h\r
+>>> index 85d8205..2531760 100644\r
+>>> --- a/bindings/ruby/defs.h\r
+>>> +++ b/bindings/ruby/defs.h\r
+>>> @@ -24,31 +24,37 @@\r
+>>> .#include <ruby.h>\r
+>>> .#include "notmuch.h"\r
+>>>\r
+>>> -VALUE notmuch_rb_cDatabase;\r
+>>> -VALUE notmuch_rb_cDirectory;\r
+>>> -VALUE notmuch_rb_cFileNames;\r
+>>> -VALUE notmuch_rb_cQuery;\r
+>>> -VALUE notmuch_rb_cThreads;\r
+>>> -VALUE notmuch_rb_cThread;\r
+>>> -VALUE notmuch_rb_cMessages;\r
+>>> -VALUE notmuch_rb_cMessage;\r
+>>> -VALUE notmuch_rb_cTags;\r
+>>> -\r
+>>> -VALUE notmuch_rb_eBaseError;\r
+>>> -VALUE notmuch_rb_eDatabaseError;\r
+>>> -VALUE notmuch_rb_eMemoryError;\r
+>>> -VALUE notmuch_rb_eReadOnlyError;\r
+>>> -VALUE notmuch_rb_eXapianError;\r
+>>> -VALUE notmuch_rb_eFileError;\r
+>>> -VALUE notmuch_rb_eFileNotEmailError;\r
+>>> -VALUE notmuch_rb_eNullPointerError;\r
+>>> -VALUE notmuch_rb_eTagTooLongError;\r
+>>> -VALUE notmuch_rb_eUnbalancedFreezeThawError;\r
+>>> -VALUE notmuch_rb_eUnbalancedAtomicError;\r
+>>> -\r
+>>> -ID ID_call;\r
+>>> -ID ID_db_create;\r
+>>> -ID ID_db_mode;\r
+>>> +#ifdef RUBY_INIT_C\r
+>>> +#define extern\r
+>>> +#endif\r
+>>> +\r
+>>> +extern VALUE notmuch_rb_cDatabase;\r
+>>> +extern VALUE notmuch_rb_cDirectory;\r
+>>> +extern VALUE notmuch_rb_cFileNames;\r
+>>> +extern VALUE notmuch_rb_cQuery;\r
+>>> +extern VALUE notmuch_rb_cThreads;\r
+>>> +extern VALUE notmuch_rb_cThread;\r
+>>> +extern VALUE notmuch_rb_cMessages;\r
+>>> +extern VALUE notmuch_rb_cMessage;\r
+>>> +extern VALUE notmuch_rb_cTags;\r
+>>> +\r
+>>> +extern VALUE notmuch_rb_eBaseError;\r
+>>> +extern VALUE notmuch_rb_eDatabaseError;\r
+>>> +extern VALUE notmuch_rb_eMemoryError;\r
+>>> +extern VALUE notmuch_rb_eReadOnlyError;\r
+>>> +extern VALUE notmuch_rb_eXapianError;\r
+>>> +extern VALUE notmuch_rb_eFileError;\r
+>>> +extern VALUE notmuch_rb_eFileNotEmailError;\r
+>>> +extern VALUE notmuch_rb_eNullPointerError;\r
+>>> +extern VALUE notmuch_rb_eTagTooLongError;\r
+>>> +extern VALUE notmuch_rb_eUnbalancedFreezeThawError;\r
+>>> +extern VALUE notmuch_rb_eUnbalancedAtomicError;\r
+>>> +\r
+>>> +extern ID ID_call;\r
+>>> +extern ID ID_db_create;\r
+>>> +extern ID ID_db_mode;\r
+>>> +\r
+>>> +#undef extern\r
+>>>\r
+>>> ./* RSTRING_PTR() is new in ruby-1.9 */\r
+>>> .#if !defined(RSTRING_PTR)\r
+>>> diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c\r
+>>> index 3fe60fb..b2dc7f6 100644\r
+>>> --- a/bindings/ruby/init.c\r
+>>> +++ b/bindings/ruby/init.c\r
+>>> @@ -18,7 +18,9 @@\r
+>>> . * Author: Ali Polatel <alip@exherbo.org>\r
+>>> . */\r
+>>>\r
+>>> +#define RUBY_INIT_C\r
+>>> .#include "defs.h"\r
+>>> +#undef RUBY_INIT_C\r
+>>>\r
+>>> ./*\r
+>>> . * Document-module: Notmuch\r