Home | History | Annotate | Download | only in tools
      1 #!/usr/bin/env python
      2 #
      3 import sys, cpp, kernel, glob, os, re, getopt, clean_header
      4 from defaults import *
      5 from utils import *
      6 
      7 def 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 
     22 try:
     23     optlist, args = getopt.getopt( sys.argv[1:], '' )
     24 except:
     25     # unrecognized option
     26     sys.stderr.write( "error: unrecognized option\n" )
     27     usage()
     28 
     29 if len(optlist) > 0 or len(args) > 1:
     30     usage()
     31 
     32 progdir = find_program_dir()
     33 
     34 if 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 )
     38 else:
     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 #
     45 sources = []
     46 for 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 
     52 b = BatchFileUpdater()
     53 
     54 for arch in kernel_archs:
     55     b.readDir( os.path.normpath( progdir + "/../arch-%s" % arch ) )
     56 
     57 b.readDir( os.path.normpath( progdir + "/../common" ) )
     58 
     59 #print "OLD " + repr(b.old_files)
     60 
     61 oldlen = 120
     62 for 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 
     89 print "%-*s" % (oldlen,"Done!")
     90 
     91 b.updateGitFiles()
     92 
     93 sys.exit(0)
     94