2012/6/24 Tomi Ollila <tomi.ollila at iki.fi>: > Some C compilers are stricter when it comes to (tentative) definition > of a variable -- in those compilers introducing variable without 'extern' > keyword always allocates new 'storage' to the variable and linking all > these modules fails due to duplicate symbols. > > This is reimplementation of Charlie Allom's patch: > id:"1336481467-66356-1-git-send-email-charlie at mediasp.com", > written originally by Ali Polatel. This version has > more accurate commit message. > --- > ?bindings/ruby/defs.h | ? 46 +++++++++++++++++++++++----------------------- > ?bindings/ruby/init.c | ? 26 ++++++++++++++++++++++++++ > ?2 files changed, 49 insertions(+), 23 deletions(-) > > diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h > index 3f9512b..fe81b3f 100644 > --- a/bindings/ruby/defs.h > +++ b/bindings/ruby/defs.h > @@ -24,31 +24,31 @@ > ?#include <notmuch.h> > ?#include <ruby.h> > > -VALUE notmuch_rb_cDatabase; > -VALUE notmuch_rb_cDirectory; > -VALUE notmuch_rb_cFileNames; > -VALUE notmuch_rb_cQuery; > -VALUE notmuch_rb_cThreads; > -VALUE notmuch_rb_cThread; > -VALUE notmuch_rb_cMessages; > -VALUE notmuch_rb_cMessage; > -VALUE notmuch_rb_cTags; > - > -VALUE notmuch_rb_eBaseError; > -VALUE notmuch_rb_eDatabaseError; > -VALUE notmuch_rb_eMemoryError; > -VALUE notmuch_rb_eReadOnlyError; > -VALUE notmuch_rb_eXapianError; > -VALUE notmuch_rb_eFileError; > -VALUE notmuch_rb_eFileNotEmailError; > -VALUE notmuch_rb_eNullPointerError; > -VALUE notmuch_rb_eTagTooLongError; > -VALUE notmuch_rb_eUnbalancedFreezeThawError; > -VALUE notmuch_rb_eUnbalancedAtomicError; > - > -ID ID_call; > -ID ID_db_create; > -ID ID_db_mode; > +extern VALUE notmuch_rb_cDatabase; > +extern VALUE notmuch_rb_cDirectory; > +extern VALUE notmuch_rb_cFileNames; > +extern VALUE notmuch_rb_cQuery; > +extern VALUE notmuch_rb_cThreads; > +extern VALUE notmuch_rb_cThread; > +extern VALUE notmuch_rb_cMessages; > +extern VALUE notmuch_rb_cMessage; > +extern VALUE notmuch_rb_cTags; > + > +extern VALUE notmuch_rb_eBaseError; > +extern VALUE notmuch_rb_eDatabaseError; > +extern VALUE notmuch_rb_eMemoryError; > +extern VALUE notmuch_rb_eReadOnlyError; > +extern VALUE notmuch_rb_eXapianError; > +extern VALUE notmuch_rb_eFileError; > +extern VALUE notmuch_rb_eFileNotEmailError; > +extern VALUE notmuch_rb_eNullPointerError; > +extern VALUE notmuch_rb_eTagTooLongError; > +extern VALUE notmuch_rb_eUnbalancedFreezeThawError; > +extern VALUE notmuch_rb_eUnbalancedAtomicError; > + > +extern ID ID_call; > +extern ID ID_db_create; > +extern ID ID_db_mode; > > ?/* RSTRING_PTR() is new in ruby-1.9 */ > ?#if !defined(RSTRING_PTR) > diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c > index 3fe60fb..f4931d3 100644 > --- a/bindings/ruby/init.c > +++ b/bindings/ruby/init.c > @@ -20,6 +20,32 @@ > > ?#include "defs.h" > > +VALUE notmuch_rb_cDatabase; > +VALUE notmuch_rb_cDirectory; > +VALUE notmuch_rb_cFileNames; > +VALUE notmuch_rb_cQuery; > +VALUE notmuch_rb_cThreads; > +VALUE notmuch_rb_cThread; > +VALUE notmuch_rb_cMessages; > +VALUE notmuch_rb_cMessage; > +VALUE notmuch_rb_cTags; > + > +VALUE notmuch_rb_eBaseError; > +VALUE notmuch_rb_eDatabaseError; > +VALUE notmuch_rb_eMemoryError; > +VALUE notmuch_rb_eReadOnlyError; > +VALUE notmuch_rb_eXapianError; > +VALUE notmuch_rb_eFileError; > +VALUE notmuch_rb_eFileNotEmailError; > +VALUE notmuch_rb_eNullPointerError; > +VALUE notmuch_rb_eTagTooLongError; > +VALUE notmuch_rb_eUnbalancedFreezeThawError; > +VALUE notmuch_rb_eUnbalancedAtomicError; > + > +ID ID_call; > +ID ID_db_create; > +ID ID_db_mode; > + > ?/* > ?* Document-module: Notmuch > ?* > -- > 1.7.1 > > _______________________________________________ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Looks highly familiar yet strangely good to me.