NeoMutt  2025-09-05-55-g97fc89
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
version.c File Reference

Display version and copyright about NeoMutt. More...

#include "config.h"
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <sys/utsname.h>
#include "mutt/lib.h"
#include "config/lib.h"
#include "gui/lib.h"
#include "version.h"
#include "compress/lib.h"
#include "store/lib.h"
#include "globals.h"
#include "address/lib.h"
#include "ncrypt/lib.h"
#include <openssl/opensslv.h>
#include <gnutls/gnutls.h>
+ Include dependency graph for version.c:

Go to the source code of this file.

Functions

const char * mutt_make_version (void)
 Generate the NeoMutt version string.
 
static char * rstrip_in_place (char *s)
 Strip a trailing carriage return.
 
static void system_get (struct KeyValueArray *kva)
 Get info about system libraries.
 
static void paths_get (struct KeyValueArray *kva)
 Get compiled-in paths.
 
static void kva_clear (struct KeyValueArray *kva)
 Free the strings of a KeyValueArray.
 
struct NeoMuttVersionversion_get (void)
 Get NeoMutt version info.
 
void version_free (struct NeoMuttVersion **ptr)
 Free a NeoMuttVersion.
 
static void print_compile_options (const struct CompileOption *co, FILE *fp, bool use_ansi)
 Print a list of enabled/disabled features.
 
bool print_version (FILE *fp, bool use_ansi)
 Print system and compile info to a file.
 
bool print_copyright (void)
 Print copyright message.
 
bool feature_enabled (const char *name)
 Test if a compile-time feature is enabled.
 

Variables

static const int SCREEN_WIDTH = 80
 CLI: Width to wrap version info.
 
unsigned char cc_cflags []
 
unsigned char configure_options []
 
static const char * Copyright
 CLI Version: Authors' copyrights.
 
static const char * Thanks
 CLI Version: Thanks.
 
static const char * License
 CLI Version: License.
 
static const char * ReachingUs
 CLI Version: How to reach the NeoMutt Team.
 
static const char * Notice
 CLI Version: Warranty notice.
 
static const struct CompileOption CompOpts []
 Compile options strings for neomutt -v output.
 
static const struct CompileOption DevelOpts []
 Devel options strings for neomutt -v output.
 

Detailed Description

Display version and copyright about NeoMutt.

Authors
  • Pietro Cerutti
  • Richard Russon

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/.

Definition in file version.c.

Function Documentation

◆ mutt_make_version()

const char * mutt_make_version ( void )

Generate the NeoMutt version string.

Return values
ptrVersion string
Note
This returns a pointer to a static buffer

Definition at line 295 of file version.c.

296{
297 static char vstring[256];
298 snprintf(vstring, sizeof(vstring), "NeoMutt %s%s", PACKAGE_VERSION, GitVer);
299 return vstring;
300}
const char * GitVer
+ Here is the caller graph for this function:

◆ rstrip_in_place()

static char * rstrip_in_place ( char * s)
static

Strip a trailing carriage return.

Parameters
sString to be modified
Return values
ptrThe modified string

The string has its last carriage return set to NUL.

Definition at line 309 of file version.c.

310{
311 if (!s)
312 return NULL;
313
314 char *p = &s[strlen(s)];
315 if (p == s)
316 return s;
317 p--;
318 while ((p >= s) && ((*p == '\n') || (*p == '\r')))
319 *p-- = '\0';
320 return s;
321}
+ Here is the caller graph for this function:

◆ system_get()

static void system_get ( struct KeyValueArray * kva)
static

Get info about system libraries.

Parameters
[out]kvaArray for results

Definition at line 327 of file version.c.

328{
329 struct Buffer *buf = buf_pool_get();
330 struct KeyValue kv = { 0 };
331
332 struct utsname uts = { 0 };
333 uname(&uts);
334
335#ifdef SCO
336 buf_printf(buf, "SCO %s", uts.release);
337#else
338 buf_printf(buf, "%s %s", uts.sysname, uts.release);
339#endif
340 buf_add_printf(buf, " (%s)", uts.machine);
341
342 kv.key = mutt_str_dup("System");
343 kv.value = buf_strdup(buf);
344 ARRAY_ADD(kva, kv);
345
346 buf_strcpy(buf, curses_version());
347#ifdef NCURSES_VERSION
348 buf_add_printf(buf, " (compiled with %s.%d)", NCURSES_VERSION, NCURSES_VERSION_PATCH);
349#endif
350 kv.key = mutt_str_dup("ncurses");
351 kv.value = buf_strdup(buf);
352 ARRAY_ADD(kva, kv);
353
354#ifdef _LIBICONV_VERSION
355 buf_printf(buf, "%d.%d", _LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 0xff);
356 kv.key = mutt_str_dup("libiconv");
357 kv.value = buf_strdup(buf);
358 ARRAY_ADD(kva, kv);
359#endif
360
361#ifdef HAVE_LIBIDN
362 kv.key = mutt_str_dup("libidn2");
364 ARRAY_ADD(kva, kv);
365#endif
366
367#ifdef CRYPT_BACKEND_GPGME
368 kv.key = mutt_str_dup("GPGME");
370 ARRAY_ADD(kva, kv);
371#endif
372
373#ifdef USE_SSL_OPENSSL
374#ifdef LIBRESSL_VERSION_TEXT
375 kv.key = mutt_str_dup("LibreSSL");
376 kv.value = mutt_str_dup(LIBRESSL_VERSION_TEXT);
377#endif
378#ifdef OPENSSL_VERSION_TEXT
379 kv.key = mutt_str_dup("OpenSSL");
380 kv.value = mutt_str_dup(OPENSSL_VERSION_TEXT);
381#endif
382 ARRAY_ADD(kva, kv);
383#endif
384
385#ifdef USE_SSL_GNUTLS
386 kv.key = mutt_str_dup("GnuTLS");
387 kv.value = mutt_str_dup(GNUTLS_VERSION);
388 ARRAY_ADD(kva, kv);
389#endif
390
391#ifdef HAVE_NOTMUCH
392 buf_printf(buf, "%d.%d.%d", LIBNOTMUCH_MAJOR_VERSION,
393 LIBNOTMUCH_MINOR_VERSION, LIBNOTMUCH_MICRO_VERSION);
394 kv.key = mutt_str_dup("libnotmuch");
395 kv.value = buf_strdup(buf);
396 ARRAY_ADD(kva, kv);
397#endif
398
399#ifdef HAVE_PCRE2
400 char version[24] = { 0 };
401 pcre2_config(PCRE2_CONFIG_VERSION, version);
402 kv.key = mutt_str_dup("PCRE2");
403 kv.value = mutt_str_dup(version);
404 ARRAY_ADD(kva, kv);
405#endif
406
407 buf_pool_release(&buf);
408}
#define ARRAY_ADD(head, elem)
Add an element at the end of the array.
Definition array.h:156
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition buffer.c:161
int buf_add_printf(struct Buffer *buf, const char *fmt,...)
Format a string appending a Buffer.
Definition buffer.c:204
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition buffer.c:395
char * buf_strdup(const struct Buffer *buf)
Copy a Buffer's string.
Definition buffer.c:571
const char * mutt_gpgme_print_version(void)
Get version of GPGME.
const char * mutt_idna_print_version(void)
Create an IDN version string.
Definition idna.c:272
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition string.c:255
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
Definition pool.c:82
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
Definition pool.c:96
String manipulation buffer.
Definition buffer.h:36
Key/Value pairs.
Definition version.h:34
const char * key
Definition version.h:35
const char * value
Definition version.h:36
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ paths_get()

static void paths_get ( struct KeyValueArray * kva)
static

Get compiled-in paths.

Parameters
[out]kvaArray for results

Definition at line 414 of file version.c.

415{
416 struct KeyValue kv = { 0 };
417
418#ifdef DOMAIN
419 kv.key = mutt_str_dup("DOMAIN");
420 kv.value = mutt_str_dup(DOMAIN);
421 ARRAY_ADD(kva, kv);
422#endif
423
424#ifdef ISPELL
425 kv.key = mutt_str_dup("ISPELL");
427 ARRAY_ADD(kva, kv);
428#endif
429 kv.key = mutt_str_dup("MAILPATH");
430 kv.value = mutt_str_dup(MAILPATH);
431 ARRAY_ADD(kva, kv);
432
433 kv.key = mutt_str_dup("PKGDATADIR");
434 kv.value = mutt_str_dup(PKGDATADIR);
435 ARRAY_ADD(kva, kv);
436
437 kv.key = mutt_str_dup("SENDMAIL");
438 kv.value = mutt_str_dup(SENDMAIL);
439 ARRAY_ADD(kva, kv);
440
441 kv.key = mutt_str_dup("SYSCONFDIR");
442 kv.value = mutt_str_dup(SYSCONFDIR);
443 ARRAY_ADD(kva, kv);
444}
#define ISPELL
Definition config.c:40
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ kva_clear()

static void kva_clear ( struct KeyValueArray * kva)
static

Free the strings of a KeyValueArray.

Parameters
kvaKeyValueArray to clear
Note
KeyValueArray itself is not freed

Definition at line 452 of file version.c.

453{
454 struct KeyValue *kv = NULL;
455
456 ARRAY_FOREACH(kv, kva)
457 {
458 FREE(&kv->key);
459 FREE(&kv->value);
460 }
461
462 ARRAY_FREE(kva);
463}
#define ARRAY_FOREACH(elem, head)
Iterate over all elements of the array.
Definition array.h:214
#define ARRAY_FREE(head)
Release all memory.
Definition array.h:204
#define FREE(x)
Definition memory.h:62
+ Here is the caller graph for this function:

◆ version_get()

struct NeoMuttVersion * version_get ( void )

Get NeoMutt version info.

Return values
ptrNeoMuttVersion

Definition at line 469 of file version.c.

470{
471 struct NeoMuttVersion *ver = MUTT_MEM_CALLOC(1, struct NeoMuttVersion);
472
474
475 ARRAY_INIT(&ver->system);
476 system_get(&ver->system);
477
478#ifdef USE_HCACHE
480#ifdef USE_HCACHE_COMPRESSION
481 ver->compression = compress_list();
482#endif
483#endif
484
487
488 rstrip_in_place((char *) cc_cflags);
490
491 ver->feature = CompOpts;
492
493 if (DevelOpts[0].name)
494 ver->devel = DevelOpts;
495
496 ARRAY_INIT(&ver->paths);
497 paths_get(&ver->paths);
498
499 return ver;
500}
#define ARRAY_INIT(head)
Initialize an array.
Definition array.h:65
struct Slist * compress_list(void)
Get a list of compression backend names.
Definition compress.c:59
#define MUTT_MEM_CALLOC(n, type)
Definition memory.h:47
struct Slist * slist_parse(const char *str, uint32_t flags)
Parse a list of strings into a list.
Definition slist.c:177
struct Slist * store_backend_list(void)
Get a list of backend names.
Definition store.c:85
Version info about NeoMutt.
Definition version.h:53
struct KeyValueArray paths
Compiled-in paths.
Definition version.h:67
struct Slist * configure
Configure options.
Definition version.h:61
const char * version
Version of NeoMutt: YYYYMMDD-NUM-HASH (number of commits, git hash)
Definition version.h:54
struct Slist * compression
Compression methods, e.g. zlib.
Definition version.h:59
struct Slist * storage
Storage backends, e.g. lmdb.
Definition version.h:58
const struct CompileOption * devel
Compiled-in development features.
Definition version.h:65
const struct CompileOption * feature
Compiled-in features.
Definition version.h:64
struct Slist * compilation
Compilation CFLAGS.
Definition version.h:62
struct KeyValueArray system
System information.
Definition version.h:56
#define D_SLIST_SEP_SPACE
Slist items are space-separated.
Definition types.h:109
static const struct CompileOption DevelOpts[]
Devel options strings for neomutt -v output.
Definition version.c:249
static void paths_get(struct KeyValueArray *kva)
Get compiled-in paths.
Definition version.c:414
const char * mutt_make_version(void)
Generate the NeoMutt version string.
Definition version.c:295
unsigned char configure_options[]
static void system_get(struct KeyValueArray *kva)
Get info about system libraries.
Definition version.c:327
unsigned char cc_cflags[]
static char * rstrip_in_place(char *s)
Strip a trailing carriage return.
Definition version.c:309
static const struct CompileOption CompOpts[]
Compile options strings for neomutt -v output.
Definition version.c:118
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ version_free()

void version_free ( struct NeoMuttVersion ** ptr)

Free a NeoMuttVersion.

Parameters
ptrNeoMuttVersion to free

Definition at line 506 of file version.c.

507{
508 if (!ptr || !*ptr)
509 return;
510
511 struct NeoMuttVersion *ver = *ptr;
512
513 FREE(&ver->version);
514
515 kva_clear(&ver->system);
516 kva_clear(&ver->paths);
517
518 slist_free(&ver->storage);
519 slist_free(&ver->compression);
520 slist_free(&ver->configure);
521 slist_free(&ver->compilation);
522
523 FREE(ptr);
524}
void slist_free(struct Slist **ptr)
Free an Slist object.
Definition slist.c:124
static void kva_clear(struct KeyValueArray *kva)
Free the strings of a KeyValueArray.
Definition version.c:452
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ print_compile_options()

static void print_compile_options ( const struct CompileOption * co,
FILE * fp,
bool use_ansi )
static

Print a list of enabled/disabled features.

Parameters
coArray of compile options
fpfile to write to
use_ansiUse ANSI colour escape sequences

Two lists are generated and passed to this function:

  • List of features, e.g. +notmuch
  • List of devel features, e.g. window

The output is of the form: "+enabled_feature -disabled_feature" and is wrapped to SCREEN_WIDTH characters.

Definition at line 539 of file version.c.

540{
541 if (!co || !fp)
542 return;
543
544 size_t used = 2;
545 fprintf(fp, " ");
546 for (int i = 0; co[i].name; i++)
547 {
548 const size_t len = strlen(co[i].name) + 2; /* +/- and a space */
549 if ((used + len) > SCREEN_WIDTH)
550 {
551 used = 2;
552 fprintf(fp, "\n ");
553 }
554 used += len;
555 const char *fmt = "?%s ";
556 switch (co[i].enabled)
557 {
558 case 0: // Disabled
559 if (use_ansi)
560 fmt = "\033[1;31m-%s\033[0m "; // Escape, red
561 else
562 fmt = "-%s ";
563 break;
564 case 1: // Enabled
565 if (use_ansi)
566 fmt = "\033[1;32m+%s\033[0m "; // Escape, green
567 else
568 fmt = "+%s ";
569 break;
570 case 2: // Devel only
571 if (use_ansi)
572 fmt = "\033[1;36m%s\033[0m "; // Escape, cyan
573 else
574 fmt = "%s ";
575 break;
576 }
577 fprintf(fp, fmt, co[i].name);
578 }
579 fprintf(fp, "\n");
580}
const char * name
Option name.
Definition version.h:45
static const int SCREEN_WIDTH
CLI: Width to wrap version info.
Definition version.c:63
+ Here is the caller graph for this function:

◆ print_version()

bool print_version ( FILE * fp,
bool use_ansi )

Print system and compile info to a file.

Parameters
fpFile to print to
use_ansiUse ANSI colour escape sequences
Return values
trueText displayed

Print information about the current system NeoMutt is running on. Also print a list of all the compile-time information.

Definition at line 591 of file version.c.

592{
593 if (!fp)
594 return false;
595
596 struct KeyValue *kv = NULL;
597 struct ListNode *np = NULL;
598 struct NeoMuttVersion *ver = version_get();
599
600 const char *col_cyan = "";
601 const char *col_bold = "";
602 const char *col_end = "";
603
604 if (use_ansi)
605 {
606 col_cyan = "\033[1;36m"; // Escape, cyan
607 col_bold = "\033[1m"; // Escape, bold
608 col_end = "\033[0m"; // Escape, end
609 }
610
611 fprintf(fp, "%s%s%s\n", col_cyan, ver->version, col_end);
612 fprintf(fp, "%s\n", _(Notice));
613
614 ARRAY_FOREACH(kv, &ver->system)
615 {
616 fprintf(fp, "%s%s:%s %s\n", col_bold, kv->key, col_end, kv->value);
617 }
618
619 if (ver->storage)
620 {
621 fprintf(fp, "%sstorage:%s ", col_bold, col_end);
622 STAILQ_FOREACH(np, &ver->storage->head, entries)
623 {
624 fputs(np->data, fp);
625 if (STAILQ_NEXT(np, entries))
626 fputs(", ", fp);
627 }
628 fputs("\n", fp);
629 }
630
631 if (ver->compression)
632 {
633 fprintf(fp, "%scompression:%s ", col_bold, col_end);
634 STAILQ_FOREACH(np, &ver->compression->head, entries)
635 {
636 fputs(np->data, fp);
637 if (STAILQ_NEXT(np, entries))
638 fputs(", ", fp);
639 }
640 fputs("\n", fp);
641 }
642 fputs("\n", fp);
643
644 fprintf(fp, "%sConfigure options:%s ", col_bold, col_end);
645 if (ver->configure)
646 {
647 STAILQ_FOREACH(np, &ver->configure->head, entries)
648 {
649 if (!np || !np->data)
650 continue;
651 fputs(np->data, fp);
652 if (STAILQ_NEXT(np, entries))
653 fputs(" ", fp);
654 }
655 }
656 fputs("\n\n", fp);
657
658 if (ver->compilation)
659 {
660 fprintf(fp, "%sCompilation CFLAGS:%s ", col_bold, col_end);
661 STAILQ_FOREACH(np, &ver->compilation->head, entries)
662 {
663 if (!np || !np->data)
664 continue;
665 fputs(np->data, fp);
666 if (STAILQ_NEXT(np, entries))
667 fputs(" ", fp);
668 }
669 fputs("\n\n", fp);
670 }
671
672 fprintf(fp, "%s%s%s\n", col_bold, _("Compile options:"), col_end);
673 print_compile_options(ver->feature, fp, use_ansi);
674 fputs("\n", fp);
675
676 if (ver->devel)
677 {
678 fprintf(fp, "%s%s%s\n", col_bold, _("Devel options:"), col_end);
679 print_compile_options(ver->devel, fp, use_ansi);
680 fputs("\n", fp);
681 }
682
683 ARRAY_FOREACH(kv, &ver->paths)
684 {
685 fprintf(fp, "%s%s%s=\"%s\"\n", col_bold, kv->key, col_end, kv->value);
686 }
687 fputs("\n", fp);
688
689 fputs(_(ReachingUs), fp);
690
691 version_free(&ver);
692 return true;
693}
#define _(a)
Definition message.h:28
#define STAILQ_FOREACH(var, head, field)
Definition queue.h:390
#define STAILQ_NEXT(elm, field)
Definition queue.h:439
A List node for strings.
Definition list.h:37
char * data
String.
Definition list.h:38
struct ListHead head
List containing values.
Definition slist.h:38
void version_free(struct NeoMuttVersion **ptr)
Free a NeoMuttVersion.
Definition version.c:506
static const char * ReachingUs
CLI Version: How to reach the NeoMutt Team.
Definition version.c:102
static const char * Notice
CLI Version: Warranty notice.
Definition version.c:109
struct NeoMuttVersion * version_get(void)
Get NeoMutt version info.
Definition version.c:469
static void print_compile_options(const struct CompileOption *co, FILE *fp, bool use_ansi)
Print a list of enabled/disabled features.
Definition version.c:539
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ print_copyright()

bool print_copyright ( void )

Print copyright message.

Return values
trueText displayed

Print the authors' copyright messages, the GPL license and some contact information for the NeoMutt project.

Definition at line 702 of file version.c.

703{
704 puts(mutt_make_version());
705 puts(Copyright);
706 puts(_(Thanks));
707 puts(_(License));
708 puts(_(ReachingUs));
709
710 fflush(stdout);
711 return !ferror(stdout);
712}
static const char * Thanks
CLI Version: Thanks.
Definition version.c:82
static const char * License
CLI Version: License.
Definition version.c:86
static const char * Copyright
CLI Version: Authors' copyrights.
Definition version.c:69
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ feature_enabled()

bool feature_enabled ( const char * name)

Test if a compile-time feature is enabled.

Parameters
nameCompile-time symbol of the feature
Return values
trueFeature enabled
falseFeature not enabled, or not compiled in

Many of the larger features of neomutt can be disabled at compile time. They define a symbol and use ifdef's around their code. The symbols are mirrored in "CompileOption CompOpts[]" in this file.

This function checks if one of these symbols is present in the code.

These symbols are also seen in the output of "neomutt -v".

Definition at line 729 of file version.c.

730{
731 if (!name)
732 return false;
733 for (int i = 0; CompOpts[i].name; i++)
734 {
735 if (mutt_str_equal(name, CompOpts[i].name))
736 {
737 return CompOpts[i].enabled;
738 }
739 }
740 return false;
741}
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition string.c:660
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ SCREEN_WIDTH

const int SCREEN_WIDTH = 80
static

CLI: Width to wrap version info.

Definition at line 63 of file version.c.

◆ cc_cflags

unsigned char cc_cflags[]
extern

◆ configure_options

unsigned char configure_options[]
extern

◆ Copyright

const char* Copyright
static
Initial value:
=
"Copyright (C) 2015-2025 Richard Russon <rich@flatcap.org>\n"
"Copyright (C) 2016-2025 Pietro Cerutti <gahr@gahr.ch>\n"
"Copyright (C) 2017-2019 Mehdi Abaakouk <sileht@sileht.net>\n"
"Copyright (C) 2018-2020 Federico Kircheis <federico.kircheis@gmail.com>\n"
"Copyright (C) 2017-2022 Austin Ray <austin@austinray.io>\n"
"Copyright (C) 2023-2025 Dennis Schön <mail@dennis-schoen.de>\n"
"Copyright (C) 2016-2017 Damien Riegel <damien.riegel@gmail.com>\n"
"Copyright (C) 2023 Rayford Shireman\n"
"Copyright (C) 2021-2023 David Purton <dcpurton@marshwiggle.net>\n"
"Copyright (C) 2020-2023 наб <nabijaczleweli@nabijaczleweli.xyz>\n"

CLI Version: Authors' copyrights.

Definition at line 69 of file version.c.

◆ Thanks

const char* Thanks
static
Initial value:
= N_(
"Many others not mentioned here contributed code, fixes and suggestions.\n")
#define N_(a)
Definition message.h:32

CLI Version: Thanks.

Definition at line 82 of file version.c.

◆ License

const char* License
static
Initial value:
= N_(
"This program is free software; you can redistribute it and/or modify\n"
"it under the terms of the GNU General Public License as published by\n"
"the Free Software Foundation; either version 2 of the License, or\n"
"(at your option) any later version.\n"
"\n"
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
"GNU General Public License for more details.\n"
"\n"
"You should have received a copy of the GNU General Public License\n"
"along with this program; if not, write to the Free Software\n"
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n")

CLI Version: License.

Definition at line 86 of file version.c.

◆ ReachingUs

const char* ReachingUs
static
Initial value:
= N_("To learn more about NeoMutt, visit: https://neomutt.org\n"
"If you find a bug in NeoMutt, please raise an issue at:\n"
" https://github.com/neomutt/neomutt/issues\n"
"or send an email to: <neomutt-devel@neomutt.org>\n")

CLI Version: How to reach the NeoMutt Team.

Definition at line 102 of file version.c.

◆ Notice

const char* Notice
static
Initial value:
=
N_("Copyright (C) 2015-2025 Richard Russon and friends\n"
"NeoMutt comes with ABSOLUTELY NO WARRANTY; for details type 'neomutt -vv'.\n"
"NeoMutt is free software, and you are welcome to redistribute it\n"
"under certain conditions; type 'neomutt -vv' for details.\n")

CLI Version: Warranty notice.

Definition at line 109 of file version.c.

◆ CompOpts

const struct CompileOption CompOpts[]
static

Compile options strings for neomutt -v output.

Definition at line 118 of file version.c.

118 {
119#ifdef USE_AUTOCRYPT
120 { "autocrypt", 1 },
121#else
122 { "autocrypt", 0 },
123#endif
124#ifdef USE_FCNTL
125 { "fcntl", 1 },
126#else
127 { "fcntl", 0 },
128#endif
129#ifdef USE_FLOCK
130 { "flock", 1 },
131#else
132 { "flock", 0 },
133#endif
134#ifdef USE_FMEMOPEN
135 { "fmemopen", 1 },
136#else
137 { "fmemopen", 0 },
138#endif
139#ifdef HAVE_FUTIMENS
140 { "futimens", 1 },
141#else
142 { "futimens", 0 },
143#endif
144#ifdef HAVE_GETADDRINFO
145 { "getaddrinfo", 1 },
146#else
147 { "getaddrinfo", 0 },
148#endif
149#ifdef USE_SSL_GNUTLS
150 { "gnutls", 1 },
151#else
152 { "gnutls", 0 },
153#endif
154#ifdef CRYPT_BACKEND_GPGME
155 { "gpgme", 1 },
156#else
157 { "gpgme", 0 },
158#endif
159#ifdef USE_SASL_GNU
160 { "gsasl", 1 },
161#else
162 { "gsasl", 0 },
163#endif
164#ifdef USE_GSS
165 { "gss", 1 },
166#else
167 { "gss", 0 },
168#endif
169#ifdef USE_HCACHE
170 { "hcache", 1 },
171#else
172 { "hcache", 0 },
173#endif
174#ifdef HOMESPOOL
175 { "homespool", 1 },
176#else
177 { "homespool", 0 },
178#endif
179#ifdef HAVE_LIBIDN
180 { "idn", 1 },
181#else
182 { "idn", 0 },
183#endif
184#ifdef USE_INOTIFY
185 { "inotify", 1 },
186#else
187 { "inotify", 0 },
188#endif
189#ifdef LOCALES_HACK
190 { "locales_hack", 1 },
191#else
192 { "locales_hack", 0 },
193#endif
194#ifdef USE_LUA
195 { "lua", 1 },
196#else
197 { "lua", 0 },
198#endif
199#ifdef ENABLE_NLS
200 { "nls", 1 },
201#else
202 { "nls", 0 },
203#endif
204#ifdef USE_NOTMUCH
205 { "notmuch", 1 },
206#else
207 { "notmuch", 0 },
208#endif
209#ifdef USE_SSL_OPENSSL
210 { "openssl", 1 },
211#else
212 { "openssl", 0 },
213#endif
214#ifdef HAVE_PCRE2
215 { "pcre2", 1 },
216#endif
217#ifdef CRYPT_BACKEND_CLASSIC_PGP
218 { "pgp", 1 },
219#else
220 { "pgp", 0 },
221#endif
222#ifndef HAVE_PCRE2
223 { "regex", 1 },
224#endif
225#ifdef USE_SASL_CYRUS
226 { "sasl", 1 },
227#else
228 { "sasl", 0 },
229#endif
230#ifdef CRYPT_BACKEND_CLASSIC_SMIME
231 { "smime", 1 },
232#else
233 { "smime", 0 },
234#endif
235#ifdef USE_SQLITE
236 { "sqlite", 1 },
237#else
238 { "sqlite", 0 },
239#endif
240#ifdef NEOMUTT_DIRECT_COLORS
241 { "truecolor", 1 },
242#else
243 { "truecolor", 0 },
244#endif
245 { NULL, 0 },
246};

◆ DevelOpts

const struct CompileOption DevelOpts[]
static

Devel options strings for neomutt -v output.

Definition at line 249 of file version.c.

249 {
250#ifdef USE_ASAN
251 { "asan", 2 },
252#endif
253#ifdef USE_DEBUG_BACKTRACE
254 { "backtrace", 2 },
255#endif
256#ifdef USE_DEBUG_COLOR
257 { "color", 2 },
258#endif
259#ifdef USE_DEBUG_EMAIL
260 { "email", 2 },
261#endif
262#ifdef USE_DEBUG_GRAPHVIZ
263 { "graphviz", 2 },
264#endif
265#ifdef USE_DEBUG_KEYMAP
266 { "keymap", 2 },
267#endif
268#ifdef USE_DEBUG_LOGGING
269 { "logging", 2 },
270#endif
271#ifdef USE_DEBUG_NAMES
272 { "names", 2 },
273#endif
274#ifdef USE_DEBUG_NOTIFY
275 { "notify", 2 },
276#endif
277#ifdef QUEUE_MACRO_DEBUG_TRACE
278 { "queue", 2 },
279#endif
280#ifdef USE_UBSAN
281 { "ubsan", 2 },
282#endif
283#ifdef USE_DEBUG_WINDOW
284 { "window", 2 },
285#endif
286 { NULL, 0 },
287};