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;
+}


Reply via email to