Thanks for the reviews! Changes: * Uses a C txt2c instead of Python - no new build prereqs * conststrings.c depends on config.status * conststrings.c created atomically to avoid race condition under parallel make
Any other observations? I'll plan to push this otherwise. # HG changeset patch # User David Champion <d...@uchicago.edu> # Date 1350429193 18000 # Branch HEAD # Node ID 0dc5d40c97c1810159a2c3e7dbb719d1bc92d81e # Parent 70810a88ce9feb66d5c74e7ec3f2a633bd8b5312 Add compiler and configure info to mutt -v output (closes #3537) This adds txt2c.c for coding text (on stdin) to a C byte array, and adds methods in Makefile(.am) to produce constrings.c, containing these two information strings. main.c is updated to print them. diff -r 70810a88ce9f -r 0dc5d40c97c1 Makefile.am --- a/Makefile.am Sun Jul 22 11:15:30 2012 -0700 +++ b/Makefile.am Tue Oct 16 18:13:13 2012 -0500 @@ -17,7 +17,7 @@ HCVERSION = hcversion.h endif -BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h $(HCVERSION) +BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h conststrings.c $(HCVERSION) bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ mutt_SOURCES = \ @@ -94,9 +94,25 @@ mutt_dotlock.c: dotlock.c cp $(srcdir)/dotlock.c mutt_dotlock.c +txt2c: txt2c.c + $(CC) -o $@ $< + +conststrings.c: txt2c config.status + ( \ + $${CC-cc} --version || \ + $${CC-cc} -v || \ + $${CC-cc} -V || \ + echo "unknown compiler"; \ + ) 2>/dev/null | ./txt2c cc_version >conststrings_c + echo "$(CFLAGS)" | ./txt2c cc_cflags >>conststrings_c + grep ac_cs_config= config.status | \ + cut -d= -f2- | \ + sed -e 's/^"//' -e 's/"$$//' | ./txt2c configure_options >>conststrings_c + mv -f conststrings_c conststrings.c + CLEANFILES = mutt_dotlock.c keymap_alldefs.h $(BUILT_SOURCES) -DISTCLEANFILES= flea smime_keys +DISTCLEANFILES= flea smime_keys txt2c ACLOCAL_AMFLAGS = -I m4 diff -r 70810a88ce9f -r 0dc5d40c97c1 main.c --- a/main.c Sun Jul 22 11:15:30 2012 -0700 +++ b/main.c Tue Oct 16 18:13:13 2012 -0500 @@ -154,6 +154,24 @@ exit (0); } +extern const char cc_version[]; +extern const char cc_cflags[]; +extern const char configure_options[]; + +static char * +rstrip_in_place(char *s) +{ + char *p; + + p = &s[strlen(s)]; + if (p == s) + return s; + p--; + while (p >= s && (*p == '\n' || *p == '\r')) + *p-- = '\0'; + return s; +} + static void show_version (void) { struct utsname uts; @@ -193,6 +211,16 @@ printf ("\nhcache backend: %s", mutt_hcache_backend ()); #endif + puts ("\n\nCompiler:"); + rstrip_in_place((char *)cc_version); + puts (cc_version); + + rstrip_in_place((char *)configure_options); + printf ("\nConfigure options: %s\n", configure_options); + + rstrip_in_place((char *)cc_cflags); + printf ("\nCompilation CFLAGS: %s\n", cc_cflags); + puts (_("\nCompile options:")); #ifdef DOMAIN diff -r 70810a88ce9f -r 0dc5d40c97c1 muttbug.sh.in --- a/muttbug.sh.in Sun Jul 22 11:15:30 2012 -0700 +++ b/muttbug.sh.in Tue Oct 16 18:13:13 2012 -0500 @@ -248,21 +248,6 @@ # Please provide more of these if you have any. fi -echo -echo "-- Build environment information" -echo -echo "(Note: This is the build environment installed on the system" -echo "muttbug is run on. Information may or may not match the environment" -echo "used to build mutt.)" -echo -echo "- gcc version information" -echo "@CC@" -@CC@ -v 2>&1 -echo -echo "- CFLAGS" -echo @CFLAGS@ - - echo echo "-- Mutt Version Information" echo diff -r 70810a88ce9f -r 0dc5d40c97c1 txt2c.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/txt2c.c Tue Oct 16 18:13:13 2012 -0500 @@ -0,0 +1,37 @@ +#include <stdio.h> + +#define per_line 12 + +void +txt2c(char *sym, FILE *fp) +{ + unsigned char buf[per_line]; + int i; + int sz = 0; + + printf("unsigned char %s[] = {\n", sym); + while (1) { + sz = fread(buf, sizeof(unsigned char), per_line, fp); + if (sz == 0) + break; + printf("\t"); + for (i = 0; i < sz; i++) + printf("0x%02x, ", buf[i]); + printf("\n"); + } + + printf("\t0x00\n};\n"); +} + + +int +main(int argc, char *argv[]) +{ + if (argc != 2) { + fprintf(stderr, "usage: %s symbol <textfile >textfile.c\n", argv[0]); + return 2; + } + + txt2c(argv[1], stdin); + return 0; +}