#! /usr/bin/env python
# Check that all ".pyc" files exist and are up-to-date
# Uses module 'os'

import sys
import os
from stat import ST_MTIME
import imp

def main():
    silent = 0
    verbose = 0
    if sys.argv[1:]:
        if sys.argv[1] == '-v':
            verbose = 1
        elif sys.argv[1] == '-s':
            silent = 1
    MAGIC = imp.get_magic()
    if not silent:
        print('Using MAGIC word', repr(MAGIC))
    for dirname in sys.path:
        try:
            names = os.listdir(dirname)
        except os.error:
            print('Cannot list directory', repr(dirname))
            continue
        if not silent:
            print('Checking ', repr(dirname), '...')
        names.sort()
        for name in names:
            if name[-3:] == '.py':
                name = os.path.join(dirname, name)
                try:
                    st = os.stat(name)
                except os.error:
                    print('Cannot stat', repr(name))
                    continue
                if verbose:
                    print('Check', repr(name), '...')
                name_c = name + 'c'
                try:
                    f = open(name_c, 'r')
                except IOError:
                    print('Cannot open', repr(name_c))
                    continue
                magic_str = f.read(4)
                mtime_str = f.read(4)
                f.close()
                if magic_str <> MAGIC:
                    print('Bad MAGIC word in ".pyc" file', end=' ')
                    print(repr(name_c))
                    continue
                mtime = get_long(mtime_str)
                if mtime == 0 or mtime == -1:
                    print('Bad ".pyc" file', repr(name_c))
                elif mtime <> st[ST_MTIME]:
                    print('Out-of-date ".pyc" file', end=' ')
                    print(repr(name_c))

def get_long(s):
    if len(s) <> 4:
        return -1
    return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)

if __name__ == '__main__':
    main()
