blob: 3ace8c8f30f3dcde6ef1bf3beb5d1392d28ec6e8 [file] [log] [blame]
Guido van Rossum61cfd961992-05-19 13:50:10 +00001#! /ufs/guido/bin/sgi/python
Guido van Rossum41ffccb1993-04-01 20:50:35 +00002#! /usr/local/bin/python
Guido van Rossum5378d5c1991-12-18 13:38:27 +00003# Check that all ".pyc" files exist and are up-to-date
Guido van Rossum9a6757d1992-03-30 11:15:26 +00004# Uses module 'os'
Guido van Rossum5378d5c1991-12-18 13:38:27 +00005
6import sys
Guido van Rossum9a6757d1992-03-30 11:15:26 +00007import os
Guido van Rossum5378d5c1991-12-18 13:38:27 +00008from stat import ST_MTIME
9
10def main():
11 silent = 0
12 verbose = 0
13 if sys.argv[1:]:
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000014 if sys.argv[1] == '-v':
Guido van Rossum5378d5c1991-12-18 13:38:27 +000015 verbose = 1
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000016 elif sys.argv[1] == '-s':
Guido van Rossum5378d5c1991-12-18 13:38:27 +000017 silent = 1
18 MAGIC = '\0\0\0\0'
19 try:
20 if sys.version[:5] >= '0.9.4':
21 MAGIC = '\224\224\224\0'
22 except:
23 pass
24 if not silent:
25 print 'Using MAGIC word', `MAGIC`
26 for dirname in sys.path:
27 try:
Guido van Rossum9a6757d1992-03-30 11:15:26 +000028 names = os.listdir(dirname)
29 except os.error:
Guido van Rossum5378d5c1991-12-18 13:38:27 +000030 print 'Cannot list directory', `dirname`
31 continue
32 if not silent:
33 print 'Checking', `dirname`, '...'
34 names.sort()
35 for name in names:
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000036 if name[-3:] == '.py':
Guido van Rossum9a6757d1992-03-30 11:15:26 +000037 name = os.path.join(dirname, name)
Guido van Rossum5378d5c1991-12-18 13:38:27 +000038 try:
Guido van Rossum9a6757d1992-03-30 11:15:26 +000039 st = os.stat(name)
40 except os.error:
Guido van Rossum5378d5c1991-12-18 13:38:27 +000041 print 'Cannot stat', `name`
42 continue
43 if verbose:
44 print 'Check', `name`, '...'
45 name_c = name + 'c'
46 try:
47 f = open(name_c, 'r')
48 except IOError:
49 print 'Cannot open', `name_c`
50 continue
51 magic_str = f.read(4)
52 mtime_str = f.read(4)
53 f.close()
54 if magic_str <> MAGIC:
55 print 'Bad MAGIC word in ".pyc" file',
56 print `name_c`
57 continue
58 mtime = get_long(mtime_str)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000059 if mtime == 0 or mtime == -1:
Guido van Rossum5378d5c1991-12-18 13:38:27 +000060 print 'Bad ".pyc" file', `name_c`
61 elif mtime <> st[ST_MTIME]:
62 print 'Out-of-date ".pyc" file',
63 print `name_c`
64
65def get_long(s):
66 if len(s) <> 4:
67 return -1
68 return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
69
70main()