#!/usr/bin/env python # This script generates a table of dependencies in HTML format on stdout. # It expects to be run in the tahoe-lafs-dep-eggs directory. import re, os, sys extensions = ('.egg', '.tar.bz2', '.tar.gz', '.exe') platform_aliases = [('i686','x86'), ('i386','x86'), ('i86pc','x86'), ('win32','windows-x86'), ('win-amd64','windows-x86_64'), ('amd64','x86_64')] python_versions = ((2,4), (2,5), (2,6), (2,7)) FILENAME_RE = re.compile(r'([a-zA-Z_0-9]*)-([0-9\.a-vx-z_]*)(-py[0-9\.]*)?(-.*)?') FILENAME_RE2 = re.compile(r'([a-zA-Z_0-9]*)-([0-9\.a-vx-z_]*)(win32|win-amd64)?(-py[0-9\.]*)?') matrix = {} depdir = '.' if len(sys.argv) >= 1: depdir = sys.argv[1] filenames = os.listdir(depdir) def add(d, k, v): if k in d: d[k] += [v] else: d[k] = [v] for fname in filenames: for ext in extensions: if fname.endswith(ext): m = FILENAME_RE.match(fname[:-len(ext)]) try: pkg = m.group(1) pythonver = (m.group(3) or '-py')[3:] platform = (m.group(4) or '-')[1:] except (IndexError, AttributeError, TypeError): continue if not pythonver: m = FILENAME_RE2.match(fname[:-len(ext)]) if m.group(3): try: platform = m.group(3) pythonver = (m.group(4) or '-py')[3:] except (IndexError, AttributeError, TypeError): continue for (alias, replacement) in platform_aliases: if platform.endswith(alias): platform = platform[:-len(alias)] + replacement break add(matrix, (pkg, platform), (pythonver, fname)) break print '' print '' print '' print ' ' print ' Software packages that Tahoe-LAFS depends on' print '' print '' print '

Software packages that Tahoe-LAFS depends on

' print print '

Packages that have compiled C/C++ code:

' print '' print ' ' print ' ' for pyver in python_versions: print ' ' % pyver print ' ' platform_dependent_pkgs = set() last_pkg = None for (pkg, platform) in sorted(matrix): if platform: platform_dependent_pkgs.add(pkg) row_files = sorted(matrix[(pkg, platform)]) style1 = pkg != last_pkg and 'border-top: 2px solid #000000; background-color: #FFFFF0' or 'border: 0;' style2 = pkg != last_pkg and 'border-top: 2px solid #000000; background-color: #FFFFF0' or 'background-color: #FFFFF0;' style3 = pkg != last_pkg and 'border-top: 2px solid #000000;' or '' print ' ' print ' ' % (style1, pkg != last_pkg and pkg or '',) print ' ' % (style2, platform,) for pyver in python_versions: files = [n for (v, n) in row_files if v == '%d.%d' % pyver] print ' ' % (style3, '
 '.join(['%s' % (f, f) for f in files])) print ' ' last_pkg = pkg print '
 Package  Python %d.%d 
 %s  %s  %s
' print print '

Packages that are platform-independent or source-only:

' print '' print ' ' print ' ' print ' ' print ' ' style1 = 'border-top: 2px solid #000000; background-color:#FFFFF0;' style2 = 'border-top: 2px solid #000000;' for (pkg, platform) in sorted(matrix): if pkg not in platform_dependent_pkgs: print ' ' print ' ' % (style1, pkg) files = [n for (v, n) in sorted(matrix[(pkg, platform)]) if not v] print ' ' % (style2, '
 '.join(['%s' % (f, f) for f in files])) print ' ' print '
 Package  All Python versions 
 %s  %s
' # The document does validate, but not when it is included at the bottom of a directory listing. #print '
' #print 'Valid HTML 4.01 Transitional' print ''