# Makefile.config if it doesn't exist yet. And add Makefile.config to
# our global dependency list.
include Makefile.config
-Makefile.config: configure
+Makefile.config: $(srcdir)/configure
@echo ""
@echo "Note: Calling ./configure with no command-line arguments. This is often fine,"
@echo " but if you want to specify any arguments (such as an alternate prefix"
IS_GIT=$(shell if [ -d .git ] ; then echo yes ; else echo no; fi)
-VERSION:=$(shell cat version)
+VERSION:=$(shell cat ${srcdir}/version)
ifneq ($(MAKECMDGOALS),release)
ifneq ($(MAKECMDGOALS),release-message)
ifeq ($(IS_GIT),yes)
# targets in the case of parallel invocation of make (-j).
#
# We carefully ensure that our VERSION variable is passed down to any
-# sub-ordinate make invocations (which won't otherwhise know that they
+# sub-ordinate make invocations (which won't otherwise know that they
# are part of the release and need to take the version from the
# version file).
.PHONY: release
// 3rd-party imports
import "notmuch"
-//import "github.com/jteeuwen/go-pkg-ini/ini"
import "github.com/kless/goconfig/config"
type mail_addr_freq struct {
}
if cfg,err = config.ReadDefault(path.Join(home, ".notmuch-config")); err != nil {
- log.Exitf("error loading config file:",err)
+ log.Fatalf("error loading config file:",err)
}
db_path,_ := cfg.String("database", "path")
--- /dev/null
+# .gitignore for bindings/ruby
+
+# Generated files
+Makefile
+mkmf.log
+notmuch.so
# -*- makefile -*-
dir := compat
-extra_cflags += -I$(dir)
+extra_cflags += -I$(srcdir)/$(dir)
notmuch_compat_srcs :=
# The dir variable will be re-assigned to later, so we can't use it
# directly in any shell commands. Instead we save its value in other,
# private variables that we can use in the commands.
-bash_script := $(dir)/notmuch-completion.bash
-zsh_script := $(dir)/notmuch-completion.zsh
+bash_script := $(srcdir)/$(dir)/notmuch-completion.bash
+zsh_script := $(srcdir)/$(dir)/notmuch-completion.zsh
install: install-$(dir)
#! /bin/sh
+srcdir=$(dirname "$0")
+
+# For a non-srcdir configure invocation (such as ../configure), create
+# the directory structure and copy Makefiles.
+if [ "$srcdir" != "." ]; then
+
+ for dir in . $(grep "^subdirs *=" "$srcdir"/Makefile | sed -e "s/subdirs *= *//"); do
+ mkdir -p "$dir"
+ cp "$srcdir"/"$dir"/Makefile.local "$dir"
+ cp "$srcdir"/"$dir"/Makefile "$dir"
+ done
+
+ # Easiest way to get the test suite to work is to just copy the
+ # whole thing into the build directory.
+ cp -a "$srcdir"/test/* test
+
+ # Emacs only likes to generate compiled files next to the .el files
+ # by default so copy these as well (which is not ideal0.
+ cp -a "$srcdir"/emacs/*.el emacs
+fi
+
# Set several defaults (optionally specified by the user in
# environemnt variables)
CC=${CC:-gcc}
fi
printf "Checking for getline... "
-if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1
+if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1
then
printf "Yes.\n"
have_getline=1
rm -f compat/have_getline
printf "Checking for strcasestr... "
-if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1
+if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1
then
printf "Yes.\n"
have_strcasestr=1
# changes, (and this could happen by simply calling "make" if the
# configure script is updated).
+srcdir = ${srcdir}
+
+# We use vpath directives (rather than the VPATH variable) since the
+# VPATH variable matches targets as well as prerequisites, (which is
+# not useful since then a target left-over from a srcdir build would
+# cause a target to not be built in the non-srcdir build).
+#
+# Also, we don't use a single "vpath % \$(srcdir)" here because we
+# don't want the vpath to trigger for our emacs lisp compilation,
+# (unless we first find a way to convince emacs to build the .elc
+# target in a directory other than the directory of the .el
+# prerequisite). In the meantime, we're actually copying in the .el
+# files, (which is quite ugly).
+vpath %.c \$(srcdir)
+vpath %.cc \$(srcdir)
+vpath %.1 \$(srcdir)
+vpath Makefile.% \$(srcdir)
+
# The C compiler to use
CC = ${CC}
$(dir)/coolj.el
emacs_images := \
- $(dir)/notmuch-logo.png
+ $(srcdir)/$(dir)/notmuch-logo.png
-emacs_bytecode := $(subst .el,.elc,$(emacs_sources))
+emacs_bytecode = $(emacs_sources:.el=.elc)
%.elc: %.el
$(call quiet,EMACS) --directory emacs -batch -f batch-byte-compile $<
endif
dir := lib
-extra_cflags += -I$(dir) -fPIC
+extra_cflags += -I$(srcdir)/$(dir) -fPIC
libnotmuch_c_srcs = \
$(notmuch_compat_srcs) \
# but cannot be used reliably within commands, so copy its value to a
# variable that is not reused.
lib := $(dir)
-install-$(dir):
+install-$(dir): $(dir)/$(LIBNAME)
mkdir -p "$(DESTDIR)$(libdir)/"
install -m0644 "$(lib)/$(LIBNAME)" "$(DESTDIR)$(libdir)/"
ln -sf $(LIBNAME) "$(DESTDIR)$(libdir)/$(SONAME)"
ln -sf $(LIBNAME) "$(DESTDIR)$(libdir)/$(LINKER_NAME)"
mkdir -p "$(DESTDIR)$(includedir)"
- install -m0644 "$(lib)/notmuch.h" "$(DESTDIR)$(includedir)/"
+ install -m0644 "$(srcdir)/$(lib)/notmuch.h" "$(DESTDIR)$(includedir)/"
$(LIBRARY_INSTALL_POST_COMMAND)
SRCS := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs)
"%s", " ",
")", "\n",
"",
- "\n",
+ "",
};
static void
if (threads == NULL)
return 1;
+ fputs (format->results_start, stdout);
+
for (;
notmuch_threads_valid (threads);
notmuch_threads_move_to_next (threads))
{
int first_tag = 1;
- if (first_thread)
- fputs (format->results_start, stdout);
- else
+ if (! first_thread)
fputs (format->item_sep, stdout);
thread = notmuch_threads_get (threads);
notmuch_thread_destroy (thread);
}
- if (! first_thread)
- fputs (format->results_end, stdout);
+ fputs (format->results_end, stdout);
return 0;
}
if (messages == NULL)
return 1;
+ fputs (format->results_start, stdout);
+
for (;
notmuch_messages_valid (messages);
notmuch_messages_move_to_next (messages))
{
message = notmuch_messages_get (messages);
- if (first_message)
- fputs (format->results_start, stdout);
- else
+ if (! first_message)
fputs (format->item_sep, stdout);
if (output == OUTPUT_FILES) {
notmuch_messages_destroy (messages);
- if (! first_message)
- fputs (format->results_end, stdout);
+ fputs (format->results_end, stdout);
return 0;
}
if (tags == NULL)
return 1;
+ fputs (format->results_start, stdout);
+
for (;
notmuch_tags_valid (tags);
notmuch_tags_move_to_next (tags))
{
tag = notmuch_tags_get (tags);
- if (first_tag)
- fputs (format->results_start, stdout);
- else
+ if (! first_tag)
fputs (format->item_sep, stdout);
format->item_id (tags, "", tag);
if (messages)
notmuch_messages_destroy (messages);
- if (! first_tag)
- fputs (format->results_end, stdout);
+ fputs (format->results_end, stdout);
return 0;
}
\"subject\": \"json-search-utf8-body-sübjéct\",
\"tags\": [\"inbox\", \"unread\"]}]"
+test_begin_subtest "Search returning no messages"
+output=$(notmuch search --format=json "this string had better not match any messages" | notmuch_search_sanitize)
+test_expect_equal "$output" "[]"
+
test_done
search-output
search-by-folder
search-position-overlap-bug
+ search-insufficient-from-quoting
json
thread-naming
raw
--- /dev/null
+#!/bin/bash
+test_description='messages with unquoted . in name'
+. ./test-lib.sh
+
+add_message \
+ '[from]="Some.Name for Someone <bugs@quoting.com>"' \
+ '[subject]="This message needs more quoting on the From line"'
+
+add_message \
+ '[from]="\"Some.Name for Someone\" <bugs@quoting.com>"' \
+ '[subject]="This message has necessary quoting in place"'
+
+add_message \
+ '[from]="No.match Here <filler@mail.com>"' \
+ '[subject]="This message needs more quoting on the From line"'
+
+add_message \
+ '[from]="\"No.match Here\" <filler@mail.com>"' \
+ '[subject]="This message has necessary quoting in place"'
+
+
+test_begin_subtest "Search by first name"
+output=$(notmuch search from:Some.Name | notmuch_search_sanitize)
+test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread)
+thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)"
+
+test_begin_subtest "Search by last name:"
+output=$(notmuch search from:Someone | notmuch_search_sanitize)
+test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread)
+thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)"
+
+test_begin_subtest "Search by address:"
+output=$(notmuch search from:bugs@quoting.com | notmuch_search_sanitize)
+test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread)
+thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)"
+
+test_begin_subtest "Search for all messages:"
+output=$(notmuch search '*' | notmuch_search_sanitize)
+test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread)
+thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)
+thread:XXX 2001-01-05 [1/1] No.match Here; This message needs more quoting on the From line (inbox unread)
+thread:XXX 2001-01-05 [1/1] No.match Here; This message has necessary quoting in place (inbox unread)"
+
+test_done
${additional_headers}"
fi
+ # Note that in the way we're setting it above and using it below,
+ # `additional_headers' will also serve as the header / body separator
+ # (empty line in between).
-cat <<EOF >"$gen_msg_filename"
+ cat <<EOF >"$gen_msg_filename"
From: ${template[from]}
To: ${template[to]}
Message-Id: <${gen_msg_id}>