NeoMutt  2024-04-16-36-g75b6fb
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
version.h File Reference

Display version and copyright about NeoMutt. More...

#include <stdbool.h>
#include <stdio.h>
+ Include dependency graph for version.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool print_version (FILE *fp)
 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.
 

Detailed Description

Display version and copyright about NeoMutt.

Authors
  • 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.h.

Function Documentation

◆ print_version()

bool print_version ( FILE *  fp)

Print system and compile info to a file.

Parameters
fpFile to print to
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 393 of file version.c.

394{
395 if (!fp)
396 return false;
397
398 struct utsname uts = { 0 };
399 bool tty = isatty(fileno(fp));
400
401 const char *col_cyan = "";
402 const char *col_bold = "";
403 const char *col_end = "";
404
405 if (tty)
406 {
407 col_cyan = "\033[1;36m"; // Escape, cyan
408 col_bold = "\033[1m"; // Escape, bold
409 col_end = "\033[0m"; // Escape, end
410 }
411
412 fprintf(fp, "%s%s%s\n", col_cyan, mutt_make_version(), col_end);
413 fprintf(fp, "%s\n", _(Notice));
414
415 uname(&uts);
416
417 fprintf(fp, "%sSystem:%s ", col_bold, col_end);
418#ifdef SCO
419 fprintf(fp, "SCO %s", uts.release);
420#else
421 fprintf(fp, "%s %s", uts.sysname, uts.release);
422#endif
423
424 fprintf(fp, " (%s)", uts.machine);
425
426 fprintf(fp, "\n%sncurses:%s %s", col_bold, col_end, curses_version());
427#ifdef NCURSES_VERSION
428 fprintf(fp, " (compiled with %s.%d)", NCURSES_VERSION, NCURSES_VERSION_PATCH);
429#endif
430
431#ifdef _LIBICONV_VERSION
432 fprintf(fp, "\n%slibiconv:%s %d.%d", col_bold, col_end,
433 _LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 0xff);
434#endif
435
436#ifdef HAVE_LIBIDN
437 fprintf(fp, "\n%slibidn2:%s %s", col_bold, col_end, mutt_idna_print_version());
438#endif
439
440#ifdef CRYPT_BACKEND_GPGME
441 fprintf(fp, "\n%sGPGME:%s %s", col_bold, col_end, mutt_gpgme_print_version());
442#endif
443
444#ifdef USE_SSL_OPENSSL
445#ifdef LIBRESSL_VERSION_TEXT
446 fprintf(fp, "\n%sLibreSSL:%s %s", col_bold, col_end, LIBRESSL_VERSION_TEXT);
447#endif
448#ifdef OPENSSL_VERSION_TEXT
449 fprintf(fp, "\n%sOpenSSL:%s %s", col_bold, col_end, OPENSSL_VERSION_TEXT);
450#endif
451#endif
452
453#ifdef USE_SSL_GNUTLS
454 fprintf(fp, "\n%sGnuTLS:%s %s", col_bold, col_end, GNUTLS_VERSION);
455#endif
456
457#ifdef HAVE_NOTMUCH
458 fprintf(fp, "\n%slibnotmuch:%s %d.%d.%d", col_bold, col_end, LIBNOTMUCH_MAJOR_VERSION,
459 LIBNOTMUCH_MINOR_VERSION, LIBNOTMUCH_MICRO_VERSION);
460#endif
461
462#ifdef HAVE_PCRE2
463 {
464 char version[24] = { 0 };
465 pcre2_config(PCRE2_CONFIG_VERSION, version);
466 fprintf(fp, "\n%sPCRE2:%s %s", col_bold, col_end, version);
467 }
468#endif
469
470#ifdef USE_HCACHE
471 const char *backends = store_backend_list();
472 fprintf(fp, "\n%sstorage:%s %s", col_bold, col_end, backends);
473 FREE(&backends);
474#ifdef USE_HCACHE_COMPRESSION
475 backends = compress_list();
476 fprintf(fp, "\n%scompression:%s %s", col_bold, col_end, backends);
477 FREE(&backends);
478#endif
479#endif
480
482 fprintf(fp, "\n\n%sConfigure options:%s %s\n", col_bold, col_end, (char *) configure_options);
483
484 rstrip_in_place((char *) cc_cflags);
485 fprintf(fp, "\n%sCompilation CFLAGS:%s %s\n", col_bold, col_end, (char *) cc_cflags);
486
487 fprintf(fp, "\n%s%s%s\n", col_bold, _("Compile options:"), col_end);
489
490 if (DebugOpts[0].name)
491 {
492 fprintf(fp, "\n%s%s%s\n", col_bold, _("Devel options:"), col_end);
494 }
495
496 fprintf(fp, "\n");
497#ifdef DOMAIN
498 fprintf(fp, "DOMAIN=\"%s\"\n", DOMAIN);
499#endif
500#ifdef ISPELL
501 fprintf(fp, "ISPELL=\"%s\"\n", ISPELL);
502#endif
503 fprintf(fp, "MAILPATH=\"%s\"\n", MAILPATH);
504#ifdef MIXMASTER
505 fprintf(fp, "MIXMASTER=\"%s\"\n", MIXMASTER);
506#endif
507 fprintf(fp, "PKGDATADIR=\"%s\"\n", PKGDATADIR);
508 fprintf(fp, "SENDMAIL=\"%s\"\n", SENDMAIL);
509 fprintf(fp, "SYSCONFDIR=\"%s\"\n", SYSCONFDIR);
510
511 fprintf(fp, "\n");
512 fputs(_(ReachingUs), fp);
513
514 fflush(fp);
515 return !ferror(fp);
516}
#define ISPELL
Definition: config.c:39
const char * compress_list(void)
Get a list of compression backend names.
Definition: compress.c:58
const char * mutt_gpgme_print_version(void)
Get version of GPGME.
Definition: crypt_gpgme.c:4121
const char * mutt_idna_print_version(void)
Create an IDN version string.
Definition: idna.c:272
#define FREE(x)
Definition: memory.h:45
#define _(a)
Definition: message.h:28
static void print_compile_options(const struct CompileOptions *co, FILE *fp)
Print a list of enabled/disabled features.
Definition: version.c:319
static const char * ReachingUs
CLI Version: How to reach the NeoMutt Team.
Definition: version.c:104
const char * mutt_make_version(void)
Generate the NeoMutt version string.
Definition: muttlib.c:893
static const struct CompileOptions CompOpts[]
Compile options strings for neomutt -v output.
Definition: version.c:130
unsigned char configure_options[]
static const struct CompileOptions DebugOpts[]
Debug options strings for neomutt -v output.
Definition: version.c:266
unsigned char cc_cflags[]
static char * rstrip_in_place(char *s)
Strip a trailing carriage return.
Definition: version.c:371
static const char * Notice
CLI Version: Warranty notice.
Definition: version.c:111
const char * store_backend_list(void)
Get a list of backend names.
Definition: store.c:84
+ 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 525 of file version.c.

526{
527 puts(mutt_make_version());
528 puts(Copyright);
529 puts(_(Thanks));
530 puts(_(License));
531 puts(_(ReachingUs));
532
533 fflush(stdout);
534 return !ferror(stdout);
535}
static const char * Thanks
CLI Version: Thanks.
Definition: version.c:84
static const char * License
CLI Version: License.
Definition: version.c:88
static const char * Copyright
CLI Version: Authors' copyrights.
Definition: version.c:71
+ 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 "CompileOptions 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 552 of file version.c.

553{
554 if (!name)
555 return false;
556 for (int i = 0; CompOpts[i].name; i++)
557 {
558 if (mutt_str_equal(name, CompOpts[i].name))
559 {
560 return CompOpts[i].enabled;
561 }
562 }
563 return false;
564}
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:654
const char * name
Option name.
Definition: version.c:123
int enabled
0 Disabled, 1 Enabled, 2 Devel only
Definition: version.c:124
+ Here is the call graph for this function:
+ Here is the caller graph for this function: