From 2b50af608e06371af87bb436c3ddf3e6d9a7c315 Mon Sep 17 00:00:00 2001
From: zooko <zooko@zooko.com>
Date: Mon, 13 Feb 2012 19:03:02 +0530
Subject: [PATCH] setup: copy in the latest version of show-tool-versions from
 the pycryptopp project (plus tweaks to query tools relevant to zfec instead
 of relevant to pycryptopp)

Ignore-this: a4044529b66fb204dcbdf8d0c826fb21

darcs-hash:f6c5ad5649aa3f33ba7934051e127209428c544f
---
 misc/build_helpers/show-tool-versions.py | 87 ++++++++++++++++--------
 1 file changed, 60 insertions(+), 27 deletions(-)

diff --git a/misc/build_helpers/show-tool-versions.py b/misc/build_helpers/show-tool-versions.py
index 3c1a196..9976ecf 100755
--- a/misc/build_helpers/show-tool-versions.py
+++ b/misc/build_helpers/show-tool-versions.py
@@ -1,17 +1,22 @@
 #! /usr/bin/env python
 
-import os, subprocess, sys, traceback
+import errno, locale, os, platform, subprocess, sys, traceback
 
-def foldlines(s):
-    return s.replace("\n", " ").replace("\r", "")
+def foldlines(s, numlines=None):
+    lines = s.split("\n")
+    if numlines is not None:
+        lines = lines[:numlines]
+    return " ".join(lines).replace("\r", "")
 
 def print_platform():
-    print
     try:
         import platform
         out = platform.platform()
         print
-        print "platform:", out.replace("\n", " ")
+        print "platform:", foldlines(out)
+        print "machine: ", platform.machine()
+        if hasattr(platform, 'linux_distribution'):
+            print "linux_distribution:", repr(platform.linux_distribution())
     except EnvironmentError:
         sys.stderr.write("Got exception using 'platform'. Exception follows\n")
         traceback.print_exc(file=sys.stderr)
@@ -19,26 +24,52 @@ def print_platform():
         pass
 
 def print_python_ver():
-    print
     print "python:", foldlines(sys.version)
     print 'maxunicode: ' + str(sys.maxunicode)
 
-def print_stdout(cmdlist, label=None):
-    print
+def print_python_encoding_settings():
+    print 'filesystem.encoding: ' + str(sys.getfilesystemencoding())
+    print 'locale.getpreferredencoding: ' + str(locale.getpreferredencoding())
+    try:
+        print 'locale.defaultlocale: ' + str(locale.getdefaultlocale())
+    except ValueError, e:
+        print 'got exception from locale.getdefaultlocale(): ', e
+    print 'locale.locale: ' + str(locale.getlocale())
+
+def print_stdout(cmdlist, label=None, numlines=None):
+    if label is None:
+        label = cmdlist[0]
     try:
         res = subprocess.Popen(cmdlist, stdin=open(os.devnull),
                                stdout=subprocess.PIPE).communicate()[0]
-        if label is None:
-            label = cmdlist[0]
+        print label + ': ' + foldlines(res, numlines)
+    except EnvironmentError, e:
+        if isinstance(e, OSError) and e.errno == errno.ENOENT:
+            print str(label) + ': ' + str(cmdlist[0]) + ': no such file or directory'
+            return
+        sys.stderr.write("\n%s: Got exception invoking '%s'. Exception follows.\n" % (label, cmdlist[0],))
+        traceback.print_exc(file=sys.stderr)
+        sys.stderr.flush()
+        pass
+
+def print_stderr(cmdlist, label=None):
+    if label is None:
+        label = cmdlist[0]
+    try:
+        res = subprocess.Popen(cmdlist, stdin=open(os.devnull),
+                               stderr=subprocess.PIPE).communicate()[1]
         print label + ': ' + foldlines(res)
-    except EnvironmentError:
-        sys.stderr.write("\nGot exception invoking '%s'. Exception follows.\n" % (cmdlist[0],))
+    except EnvironmentError, e:
+        if isinstance(e, OSError) and e.errno == errno.ENOENT:
+            print str(label) + ': ' + str(cmdlist[0]) + ': no such file or directory'
+            return
+        sys.stderr.write("\n%s: Got exception invoking '%s'. Exception follows.\n" % (label, cmdlist[0],))
         traceback.print_exc(file=sys.stderr)
         sys.stderr.flush()
         pass
 
+
 def print_as_ver():
-    print
     if os.path.exists('a.out'):
         print "WARNING: a file named a.out exists, and getting the version of the 'as' assembler writes to that filename, so I'm not attempting to get the version of 'as'."
         return
@@ -55,7 +86,6 @@ def print_as_ver():
         pass
 
 def print_setuptools_ver():
-    print
     try:
         import pkg_resources
         out = str(pkg_resources.require("setuptools"))
@@ -65,11 +95,13 @@ def print_setuptools_ver():
         traceback.print_exc(file=sys.stderr)
         sys.stderr.flush()
         pass
+    except pkg_resources.DistributionNotFound:
+        print 'setuptools: DistributionNotFound'
+        pass
 
 def print_py_pkg_ver(pkgname, modulename=None):
     if modulename is None:
         modulename = pkgname
-
     print
     try:
         import pkg_resources
@@ -81,9 +113,7 @@ def print_py_pkg_ver(pkgname, modulename=None):
         sys.stderr.flush()
         pass
     except pkg_resources.DistributionNotFound:
-        sys.stderr.write("\npkg_resources reported no %s package installed. Exception follows.\n" % (pkgname,))
-        traceback.print_exc(file=sys.stderr)
-        sys.stderr.flush()
+        print pkgname + ': DistributionNotFound'
         pass
     try:
         __import__(modulename)
@@ -98,24 +128,27 @@ def print_py_pkg_ver(pkgname, modulename=None):
             pass
 
 print_platform()
-
+print
 print_python_ver()
-
+print
+print_stdout(['locale'])
+print_python_encoding_settings()
+print
 print_stdout(['buildbot', '--version'])
-print_stdout(['cl'])
-print_stdout(['gcc', '--version'])
+print_stdout(['buildslave', '--version'])
+if 'windows' in platform.system().lower():
+    print_stderr(['cl'])
+print_stdout(['cc', '--version'], numlines=1)
+print_stdout(['gcc', '--version'], numlines=1)
+print_stdout(['git', '--version'])
 print_stdout(['darcs', '--version'])
 print_stdout(['darcs', '--exact-version'], label='darcs-exact-version')
-print_stdout(['7za'])
 print_stdout(['flappclient', '--version'])
 print_stdout(['valgrind', '--version'])
 
 print_setuptools_ver()
 
 print_py_pkg_ver('coverage')
-print_py_pkg_ver('trialcoverage')
-print_py_pkg_ver('setuptools_trial')
-print_py_pkg_ver('setuptools_darcs')
-print_py_pkg_ver('darcsver')
+print_py_pkg_ver('pyflakes')
 print_py_pkg_ver('Twisted', 'twisted')
 print_py_pkg_ver('TwistedCore', 'twisted.python')
-- 
2.45.2