diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst index 40c12721..26a8eb14 100644 --- a/doc/man1/notmuch-config.rst +++ b/doc/man1/notmuch-config.rst @@ -132,6 +132,11 @@ The available configuration items are described below. Default: ``gpg``. + **built_with.** + + Compile time feature . Current possibilities include + "compact" (see **notmuch-compact(1)**) + and "field_processor" (see **notmuch-search-terms(7)**). ENVIRONMENT =========== diff --git a/lib/Makefile.local b/lib/Makefile.local index 3a070907..36c39243 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -39,6 +39,7 @@ libnotmuch_c_srcs = \ $(dir)/message-file.c \ $(dir)/messages.c \ $(dir)/sha1.c \ + $(dir)/built-with.c \ $(dir)/tags.c libnotmuch_cxx_srcs = \ diff --git a/lib/built-with.c b/lib/built-with.c new file mode 100644 index 00000000..7ea1d7fd --- /dev/null +++ b/lib/built-with.c @@ -0,0 +1,34 @@ +/* notmuch - Not much of an email program, (just index and search) + * + * Copyright © 2016 David Bremner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/ . + * + * Author: David Bremner + */ + +#include "notmuch.h" +#include "notmuch-private.h" + +notmuch_bool_t +notmuch_built_with (const char *name) +{ + if (STRNCMP_LITERAL (name, "compact") == 0) { + return HAVE_XAPIAN_COMPACT; + } else if (STRNCMP_LITERAL (name, "field_processor") == 0) { + return HAVE_XAPIAN_FIELD_PROCESSOR; + } else { + return FALSE; + } +} diff --git a/lib/notmuch.h b/lib/notmuch.h index cb46fc05..3a092efc 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -1838,6 +1838,11 @@ notmuch_filenames_move_to_next (notmuch_filenames_t *filenames); void notmuch_filenames_destroy (notmuch_filenames_t *filenames); +/** + * interrogate the library for compile time features + */ +notmuch_bool_t +notmuch_built_with (const char *name); /* @} */ NOTMUCH_END_DECLS diff --git a/notmuch-config.c b/notmuch-config.c index d252bb25..01bb1859 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -750,6 +750,8 @@ _item_split (char *item, char **group, char **key) return 0; } +#define BUILT_WITH_PREFIX "built_with." + static int notmuch_config_command_get (notmuch_config_t *config, char *item) { @@ -773,6 +775,9 @@ notmuch_config_command_get (notmuch_config_t *config, char *item) tags = notmuch_config_get_new_tags (config, &length); for (i = 0; i < length; i++) printf ("%s\n", tags[i]); + } else if (STRNCMP_LITERAL (item, BUILT_WITH_PREFIX) == 0) { + printf ("%s\n", + notmuch_built_with (item + strlen (BUILT_WITH_PREFIX)) ? "true" : "false"); } else { char **value; size_t i, length; @@ -804,6 +809,11 @@ notmuch_config_command_set (notmuch_config_t *config, char *item, int argc, char { char *group, *key; + if (STRNCMP_LITERAL (item, BUILT_WITH_PREFIX) == 0) { + fprintf (stderr, "Error: read only option: %s\n", item); + return 1; + } + if (_item_split (item, &group, &key)) return 1; @@ -830,6 +840,18 @@ notmuch_config_command_set (notmuch_config_t *config, char *item, int argc, char return notmuch_config_save (config); } +static +void +_notmuch_config_list_built_with () +{ + printf("%scompact=%s\n", + BUILT_WITH_PREFIX, + notmuch_built_with ("compact") ? "true" : "false"); + printf("%sfield_processor=%s\n", + BUILT_WITH_PREFIX, + notmuch_built_with ("field_processor") ? "true" : "false"); +} + static int notmuch_config_command_list (notmuch_config_t *config) { @@ -865,6 +887,7 @@ notmuch_config_command_list (notmuch_config_t *config) g_strfreev (groups); + _notmuch_config_list_built_with (); return 0; } diff --git a/test/T030-config.sh b/test/T030-config.sh index f404908a..437269ff 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -44,7 +44,7 @@ test_expect_equal "$(notmuch config get foo.nonexistent)" "" test_begin_subtest "List all items" notmuch config set database.path "/canonical/path" -output=$(notmuch config list) +output=$(notmuch config list | notmuch_built_with_sanitize) test_expect_equal "$output" "\ database.path=/canonical/path user.name=Notmuch Test Suite @@ -56,7 +56,9 @@ search.exclude_tags= maildir.synchronize_flags=true crypto.gpg_path=gpg foo.string=this is another string value -foo.list=this;is another;list value;" +foo.list=this;is another;list value; +built_with.compact=something +built_with.field_processor=something" test_begin_subtest "Top level --config=FILE option" cp "${NOTMUCH_CONFIG}" alt-config diff --git a/test/T040-setup.sh b/test/T040-setup.sh index cf0c00bc..be2f0dbd 100755 --- a/test/T040-setup.sh +++ b/test/T040-setup.sh @@ -19,7 +19,7 @@ another.suite@example.com foo bar baz EOF -output=$(notmuch --config=new-notmuch-config config list) +output=$(notmuch --config=new-notmuch-config config list | notmuch_built_with_sanitize) test_expect_equal "$output" "\ database.path=/path/to/maildir user.name=Test Suite @@ -29,6 +29,8 @@ new.tags=foo;bar; new.ignore= search.exclude_tags=baz; maildir.synchronize_flags=true -crypto.gpg_path=gpg" +crypto.gpg_path=gpg +built_with.compact=something +built_with.field_processor=something" test_done diff --git a/test/test-lib.sh b/test/test-lib.sh index ac04b15a..09f87319 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -733,6 +733,12 @@ notmuch_uuid_sanitize () { sed 's/[0-9a-f]\{8\}-[0-9a-f]\{4\}-[0-9a-f]\{4\}-[0-9a-f]\{4\}-[0-9a-f]\{12\}/UUID/g' } + +notmuch_built_with_sanitize () +{ + sed 's/^built_with[.]\(.*\)=.*$/built_with.\1=something/' +} + # End of notmuch helper functions # Use test_set_prereq to tell that a particular prerequisite is available.