[notmuch] [PATCH] Add SCons build files.
authorJeffrey C. Ollie <jeff@ocjtech.us>
Sun, 22 Nov 2009 13:47:10 +0000 (07:47 +1800)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:35:39 +0000 (09:35 -0800)
e6/fbe9dd333692b8df51eab871ff6906deedb120 [new file with mode: 0644]

diff --git a/e6/fbe9dd333692b8df51eab871ff6906deedb120 b/e6/fbe9dd333692b8df51eab871ff6906deedb120
new file mode 100644 (file)
index 0000000..54d43da
--- /dev/null
@@ -0,0 +1,343 @@
+Return-Path: <jeff@ocjtech.us>\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 28B3E431FBC\r
+       for <notmuch@notmuchmail.org>; Sun, 22 Nov 2009 05:47:25 -0800 (PST)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\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 gXAYGLVMsW09 for <notmuch@notmuchmail.org>;\r
+       Sun, 22 Nov 2009 05:47:23 -0800 (PST)\r
+Received: from mail-yx0-f204.google.com (mail-yx0-f204.google.com\r
+       [209.85.210.204])\r
+       by olra.theworths.org (Postfix) with ESMTP id C0824431FAE\r
+       for <notmuch@notmuchmail.org>; Sun, 22 Nov 2009 05:47:23 -0800 (PST)\r
+Received: by yxe42 with SMTP id 42so4759357yxe.22\r
+       for <notmuch@notmuchmail.org>; Sun, 22 Nov 2009 05:47:23 -0800 (PST)\r
+Received: by 10.150.5.35 with SMTP id 35mr6517765ybe.84.1258897643335;\r
+       Sun, 22 Nov 2009 05:47:23 -0800 (PST)\r
+Received: from lt26923.campus.dmacc.edu ([69.57.47.215])\r
+       by mx.google.com with ESMTPS id 13sm1625198gxk.1.2009.11.22.05.47.20\r
+       (version=TLSv1/SSLv3 cipher=RC4-MD5);\r
+       Sun, 22 Nov 2009 05:47:21 -0800 (PST)\r
+Received: from localhost ([127.0.0.1] helo=localhost.localdomain)\r
+       by lt26923.campus.dmacc.edu with esmtps (TLSv1:AES256-SHA:256)\r
+       (Exim 4.69) (envelope-from <jeff@ocjtech.us>)\r
+       id 1NCCmc-0005o7-PG; Sun, 22 Nov 2009 07:47:18 -0600\r
+From: "Jeffrey C. Ollie" <jeff@ocjtech.us>\r
+To: Not Much Mail <notmuch@notmuchmail.org>\r
+Date: Sun, 22 Nov 2009 07:47:10 -0600\r
+Message-Id: <1258897630-22282-1-git-send-email-jeff@ocjtech.us>\r
+X-Mailer: git-send-email 1.6.5.2\r
+Subject: [notmuch] [PATCH] Add SCons build files.\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.12\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: Sun, 22 Nov 2009 13:47:25 -0000\r
+\r
+The SCons build files included here *should* do everything that the\r
+current Makefiles do, plus a little bit of configuration checking.  To\r
+build/install:\r
+\r
+scons all emacs\r
+sudo scons install\r
+sudo scons install-emacs\r
+sudo scons install-desktop\r
+\r
+Various installation directories can be customized:\r
+\r
+sudo scons install DESTDIR=/tmp/buildroot prefix=/opt/notmuch\r
+\r
+See the output of 'scons -h' for a complete list of the variables that\r
+can be modified.\r
+\r
+Signed-off-by: Jeffrey C. Ollie <jeff@ocjtech.us>\r
+---\r
+ .gitignore     |    3 +\r
+ SConstruct     |  226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+ lib/SConscript |   19 +++++\r
+ 3 files changed, 248 insertions(+), 0 deletions(-)\r
+ create mode 100644 SConstruct\r
+ create mode 100644 lib/SConscript\r
+\r
+diff --git a/.gitignore b/.gitignore\r
+index 8794354..6661b3b 100644\r
+--- a/.gitignore\r
++++ b/.gitignore\r
+@@ -8,3 +8,6 @@ notmuch.1.gz\r
+ *~\r
+ .*.swp\r
+ *.elc\r
++.sconsign.dblite\r
++.sconf_temp\r
++config.log\r
+diff --git a/SConstruct b/SConstruct\r
+new file mode 100644\r
+index 0000000..8d6960d\r
+--- /dev/null\r
++++ b/SConstruct\r
+@@ -0,0 +1,226 @@\r
++# -*- mode: python; coding: utf-8 -*-\r
++\r
++import os\r
++\r
++variables = Variables('custom.py')\r
++\r
++variables.Add('DESTDIR',\r
++              'Destination directory',\r
++              '')\r
++\r
++variables.Add('prefix',\r
++              'Installation prefix',\r
++              '/usr/local')\r
++\r
++variables.Add('bindir',\r
++              'Directory that user binaries go into',\r
++              '${prefix}/bin')\r
++\r
++variables.Add('datadir',\r
++              'Directory that static data files go into',\r
++              '${prefix}/share')\r
++\r
++variables.Add('mandir',\r
++              'Directory that manual pages go into',\r
++              '${datadir}/man')\r
++\r
++variables.Add('emacs_lispdir',\r
++              'Directory that Emacs LISP files go into',\r
++              '${default_emacs_lispdir}')\r
++\r
++variables.Add('sysconfdir',\r
++              'Directory that system configuration files go into',\r
++              '/etc')\r
++\r
++variables.Add('bash_completion_dir',\r
++              'Directory that Bash completion files go into',\r
++              '${sysconfdir}/bash_completion.d')\r
++\r
++variables.Add('desktop_dir',\r
++              'Directory that desktop files go into',\r
++              '${datadir}/applications')\r
++\r
++variables.Add('gzip',\r
++              'Gzip executable',\r
++              'gzip')\r
++\r
++variables.Add('emacs',\r
++              'Emacs executable',\r
++              'emacs')\r
++\r
++def InstallPerm(env, dest, files, perm):\r
++    obj = env.Install(dest, files)\r
++    for i in obj:\r
++        env.AddPostAction(i, Chmod(str(i), perm))\r
++    return dest\r
++\r
++def InstallAsPerm(env, dest, files, perm):\r
++    obj = env.InstallAs(dest, files)\r
++    for i in obj:\r
++        env.AddPostAction(i, Chmod(str(i), perm))\r
++    return dest\r
++\r
++topenv = Environment(variables = variables,\r
++                     BUILDERS = {'InstallPerm': InstallPerm,\r
++                                 'InstallAsPerm': InstallAsPerm})\r
++\r
++topenv.Append(CPPPATH=['#/lib'])\r
++\r
++cflags = None\r
++if os.environ.has_key('CFLAGS'):\r
++    cflags = topenv.ParseFlags(os.environ['CFLAGS'])\r
++    topenv.MergeFlags(cflags)\r
++\r
++if os.environ.has_key('CXXFLAGS'):\r
++    cxxflags = topenv.ParseFlags(os.environ['CXXFLAGS'])\r
++    topenv.MergeFlags(cxxflags)\r
++\r
++if cflags is None or cxxflags is None:\r
++    optflags = topenv.ParseFlags('-O2')\r
++    topenv.MergeFlags(optflags)\r
++\r
++warnflags = topenv.ParseFlags('-Wall -Wextra -Wmissing-declarations -Wwrite-strings -Wswitch-enum')\r
++topenv.MergeFlags(warnflags)\r
++\r
++def CheckPkgConfig(context, version):\r
++    context.Message('Checking for pkg-config... ')\r
++    result = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]\r
++    context.Result(result)\r
++    return result\r
++ \r
++def CheckPkg(context, name):\r
++    context.Message('Checking for %s... ' % name)\r
++    result = context.TryAction('pkg-config --exists \'%s\'' % name)[0]\r
++    context.Result(result)\r
++    return result\r
++\r
++def CheckXapian(context):\r
++    context.Message('Checking for xapian-core... ')\r
++    for xapian_config in ['xapian-config-1.1', 'xapian-config']:\r
++        result, output = context.TryAction('%s --version > $TARGET' % xapian_config)\r
++        if result:\r
++            xapian_version = output.strip().split()[-1]\r
++            context.env['xapian_config'] = xapian_config\r
++            context.env['xapian_version'] = xapian_version\r
++            context.Result(xapian_version)\r
++            return result\r
++    context.Result(False)\r
++    return False\r
++\r
++def CheckEmacs(context):\r
++    context.Message('Checking for emacs... ')\r
++    context.env['default_emacs_lispdir'] = '${prefix}/share/emacs/site-lisp'\r
++    result = context.TryAction('pkg-config --exists emacs')\r
++    if result:\r
++        result, output = context.TryAction('pkg-config emacs --variable sitepkglispdir > $TARGET')\r
++        if result:\r
++            context.env['default_emacs_lispdir'] = output.strip()\r
++        context.Result(True)\r
++        return True\r
++    context.Result(False)\r
++    return False\r
++\r
++def CheckDesktopFileInstall(context):\r
++    context.Message('Checking for desktop-file-install... ')\r
++    result = context.TryAction('desktop-file-install -h')[0]\r
++    context.Result(result)\r
++    return result\r
++\r
++conf = Configure(topenv, custom_tests = {'CheckPkgConfig': CheckPkgConfig,\r
++                                         'CheckPkg': CheckPkg,\r
++                                         'CheckXapian': CheckXapian,\r
++                                         'CheckEmacs': CheckEmacs,\r
++                                         'CheckDesktopFileInstall': CheckDesktopFileInstall})\r
++\r
++if not conf.CheckPkgConfig('0.23'):\r
++    print 'pkg-config >= 0.23 not found.'\r
++    Exit(1)\r
++\r
++if not conf.CheckPkg('glib-2.0 >= 2.22'):\r
++    print 'glib-2.0 >= 2.22 not found'\r
++    Exit(1)\r
++\r
++if not conf.CheckPkg('gmime-2.4 >= 2.4.0'):\r
++    print 'gmime-2.4 >= 2.4.0 not found'\r
++    Exit(1)\r
++\r
++if not conf.CheckPkg('talloc >= 2.0.0'):\r
++    print 'talloc >= 2.0.0 not found'\r
++    Exit(1)\r
++\r
++if not conf.CheckXapian():\r
++    print 'xapian not found'\r
++    Exit(1)\r
++\r
++emacs = conf.CheckEmacs()\r
++\r
++valgrind = conf.CheckPkg('valgrind >= 3.5.0')\r
++\r
++desktop = conf.CheckDesktopFileInstall()\r
++\r
++if not conf.CheckFunc('strndup'):\r
++    conf.env.Append(CPPDEFINES = ['NEED_STRNDUP'])\r
++\r
++if not conf.CheckFunc('getline'):\r
++    conf.env.Append(CPPDEFINES = ['NEED_GETLINE'])\r
++\r
++topenv = conf.Finish()\r
++\r
++topenv.ParseConfig('pkg-config glib-2.0 --cflags --libs')\r
++topenv.ParseConfig('pkg-config gmime-2.4 --cflags --libs')\r
++topenv.ParseConfig('pkg-config talloc --cflags --libs')\r
++topenv.ParseConfig('${xapian_config} --cxxflags --libs')\r
++if valgrind:\r
++    topenv.ParseConfig('pkg-config valgrind --cflags')\r
++    topenv.Append(CPPDEFINES = ['HAVE_VALGRIND'])\r
++\r
++Help(variables.GenerateHelpText(topenv))\r
++\r
++Export('topenv')\r
++\r
++libnotmuch = SConscript(['lib/SConscript'])\r
++\r
++env = topenv.Clone()\r
++\r
++notmuch = env.Program('notmuch', ['debugger.c',\r
++                                  'gmime-filter-reply.c',\r
++                                  'notmuch.c',\r
++                                  'notmuch-config.c',\r
++                                  'notmuch-dump.c',\r
++                                  'notmuch-new.c',\r
++                                  'notmuch-reply.c',\r
++                                  'notmuch-restore.c',\r
++                                  'notmuch-search.c',\r
++                                  'notmuch-setup.c',\r
++                                  'notmuch-show.c',\r
++                                  'notmuch-tag.c',\r
++                                  'notmuch-time.c',\r
++                                  'query-string.c',\r
++                                  'show-message.c',\r
++                                  libnotmuch])\r
++env.Alias('all', notmuch)\r
++\r
++env.Install('${DESTDIR}${bindir}', notmuch)\r
++env.Alias('install', '${DESTDIR}${bindir}')\r
++\r
++manpage = env.Command('notmuch.1.gz', 'notmuch.1', '${gzip} -9 < $SOURCE > $TARGET')\r
++env.Alias('all', manpage)\r
++\r
++env.InstallPerm('${DESTDIR}${mandir}/man1', manpage, 0644)\r
++env.Alias('install', '${DESTDIR}${mandir}/man1')\r
++\r
++env.InstallAsPerm('${DESTDIR}${bash_completion_dir}/notmuch', 'contrib/notmuch-completion.bash', 0644)\r
++env.Alias('install', '${DESTDIR}${bash_completion_dir}')\r
++\r
++if desktop:\r
++    env.Command('${DESTDIR}${desktop_dir}/notmuch.desktop', 'notmuch.desktop', 'desktop-file-install --mode 0644 --dir ${DESTDIR}${desktop_dir} ${SOURCE}')\r
++    env.Alias('install-desktop', '${DESTDIR}${desktop_dir}')\r
++\r
++if emacs:\r
++    elisp = env.Command('notmuch.elc', 'notmuch.el', '${emacs} --no-window-system --no-site-file --no-init-file --no-splash --batch --funcall batch-byte-compile $SOURCE')\r
++    env.Alias('emacs', elisp)\r
++    env.InstallPerm('${DESTDIR}${emacs_lispdir}', elisp, 0644)\r
++    env.InstallPerm('${DESTDIR}${emacs_lispdir}', 'notmuch.el', 0644)\r
++    env.Alias('install-emacs', '${DESTDIR}${emacs_lispdir}')\r
++\r
++Default('all')\r
+diff --git a/lib/SConscript b/lib/SConscript\r
+new file mode 100644\r
+index 0000000..eb38516\r
+--- /dev/null\r
++++ b/lib/SConscript\r
+@@ -0,0 +1,19 @@\r
++# -*- mode: python; coding: utf-8 -*-\r
++\r
++Import('topenv')\r
++\r
++env = topenv.Clone()\r
++\r
++libnotmuch = env.Library('notmuch', ['libsha1.c',\r
++                                     'message-file.c',\r
++                                     'messages.c',\r
++                                     'sha1.c',\r
++                                     'tags.c',\r
++                                     'xutil.c',\r
++                                     'database.cc',\r
++                                     'index.cc',\r
++                                     'message.cc',\r
++                                     'query.cc',\r
++                                     'thread.cc'])\r
++\r
++Return('libnotmuch')\r
+-- \r
+1.6.5.2\r
+\r