update_all.py revision c95eb57405d3d2f0e6cfab313aa74b1bad280452
1#!/usr/bin/env python
2#
3import sys, cpp, kernel, glob, os, re, getopt, clean_header
4from defaults import *
5from utils import *
6
7def usage():
8    print """\
9  usage: %(progname)s [kernel-original-path]
10
11    this program is used to update all the auto-generated clean headers
12    used by the Bionic C library. it assumes the following:
13
14      - a set of source kernel headers is located in '../original',
15        relative to the program's directory
16
17      - the clean headers will be placed in '../arch-<arch>/asm',
18        '../common/linux', '../common/asm-generic', etc..
19""" % { "progname" : os.path.basename(sys.argv[0]) }
20    sys.exit(0)
21
22try:
23    optlist, args = getopt.getopt( sys.argv[1:], '' )
24except:
25    # unrecognized option
26    sys.stderr.write( "error: unrecognized option\n" )
27    usage()
28
29if len(optlist) > 0 or len(args) > 1:
30    usage()
31
32progdir = find_program_dir()
33
34if len(args) == 1:
35    original_dir = args[0]
36    if not os.path.isdir(original_dir):
37        panic( "Not a directory: %s\n" % original_dir )
38else:
39    original_dir = kernel_original_path
40    if not os.path.isdir(original_dir):
41        panic( "Missing directory, please specify one through command-line: %s\n" % original_dir )
42
43# find all source files in 'original'
44#
45sources = []
46for root, dirs, files in os.walk( original_dir ):
47    for file in files:
48        base, ext = os.path.splitext(file)
49        if ext == ".h":
50            sources.append( "%s/%s" % (root,file) )
51
52b = BatchFileUpdater()
53
54for arch in kernel_archs:
55    b.readDir( os.path.normpath( progdir + "/../arch-%s" % arch ) )
56
57b.readDir( os.path.normpath( progdir + "/../common" ) )
58
59#print "OLD " + repr(b.old_files)
60
61oldlen = 120
62for path in sources:
63    dst_path, newdata = clean_header.cleanupFile(path, original_dir)
64    if not dst_path:
65        continue
66
67    b.readFile( dst_path )
68    r = b.editFile( dst_path, newdata )
69    if r == 0:
70        state = "unchanged"
71    elif r == 1:
72        state = "edited"
73    else:
74        state = "added"
75
76    str = "cleaning: %-*s -> %-*s (%s)" % ( 35, "<original>" + path[len(original_dir):], 35, dst_path, state )
77    if sys.stdout.isatty():
78        print "%-*s" % (oldlen,str),
79        if (r == 0):
80            print "\r",
81        else:
82            print "\n",
83            oldlen = 0
84    else:
85        print str
86
87    oldlen = len(str)
88
89print "%-*s" % (oldlen,"Done!")
90
91b.updateGitFiles()
92
93sys.exit(0)
94