# Check that all ".pyc" files exist and are up-to-date
# Uses module 'os'

import sys
import os
from stat import ST_MTIME

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 = '\0\0\0\0'
	try:
		if sys.version[:5] >= '0.9.4':
			MAGIC = '\224\224\224\0'
	except:
		pass
	if not silent:
		print 'Using MAGIC word', `MAGIC`
	for dirname in sys.path:
		try:
			names = os.listdir(dirname)
		except os.error:
			print 'Cannot list directory', `dirname`
			continue
		if not silent:
			print 'Checking', `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', `name`
					continue
				if verbose:
					print 'Check', `name`, '...'
				name_c = name + 'c'
				try:
					f = open(name_c, 'r')
				except IOError:
					print 'Cannot open', `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',
					print `name_c`
					continue
				mtime = get_long(mtime_str)
				if mtime == 0 or mtime == -1:
					print 'Bad ".pyc" file', `name_c`
				elif mtime <> st[ST_MTIME]:
					print 'Out-of-date ".pyc" file',
					print `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)

main()
