"""Checkversions - recursively search a directory (default: sys.prefix)
for _checkversion.py files, and run each of them. This will tell you of
new versions available for any packages you have installed."""

import os
import getopt
import sys
import pyversioncheck

CHECKNAME="_checkversion.py"

VERBOSE=1

USAGE="""Usage: checkversions [-v verboselevel] [dir ...]
Recursively examine a tree (default: sys.prefix) and for each package
with a _checkversion.py file compare the installed version against the current
version.

Values for verboselevel:
0 - Minimal output, one line per package
1 - Also print descriptions for outdated packages (default)
2 - Print information on each URL checked
3 - Check every URL for packages with multiple locations"""

def check1dir(dummy, dir, files):
    if CHECKNAME in files:
        fullname = os.path.join(dir, CHECKNAME)
        try:
            execfile(fullname)
        except:
            print '** Exception in', fullname

def walk1tree(tree):
    os.path.walk(tree, check1dir, None)

def main():
    global VERBOSE
    try:
        options, arguments = getopt.getopt(sys.argv[1:], 'v:')
    except getopt.error:
        print USAGE
        sys.exit(1)
    for o, a in options:
        if o == '-v':
            VERBOSE = int(a)
    if not arguments:
        arguments = [sys.prefix]
    for dir in arguments:
        walk1tree(dir)

if __name__ == '__main__':
    main()
