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
     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 
     20       - if ANDROID_PRODUCT_OUT is defined in your environment, you're
     21         using the Android build system, and the program will issue
     22         p4 add / edit / delete commands to update the depot for you.
     23         (you'll need to p4 submit manually though)
     24 """ % { "progname" : os.path.basename(sys.argv[0]) }
     25     sys.exit(0)
     26 
     27 try:
     28     optlist, args = getopt.getopt( sys.argv[1:], '' )
     29 except:
     30     # unrecognized option
     31     sys.stderr.write( "error: unrecognized option\n" )
     32     usage()
     33 
     34 if len(optlist) > 0 or len(args) > 0:
     35     usage()
     36 
     37 progdir = find_program_dir()
     38 original_dir = os.path.normpath( progdir + "/../original" )
     39 if not os.path.isdir( original_dir ):
     40     panic( "required directory does not exists: %s\n" % original_dir )
     41 
     42 # find all source files in 'original'
     43 #
     44 sources = []
     45 for root, dirs, files in os.walk( original_dir ):
     46     for file in files:
     47         base, ext = os.path.splitext(file)
     48         if ext == ".h":
     49             sources.append( "%s/%s" % (root,file) )
     50 
     51 b = BatchFileUpdater()
     52 
     53 for arch in kernel_archs:
     54     b.readDir( os.path.normpath( progdir + "/../arch-%s" % arch ) )
     55 
     56 b.readDir( os.path.normpath( progdir + "/../common" ) )
     57 
     58 #print "OLD " + repr(b.old_files)
     59 
     60 for path in sources:
     61     dst_path, newdata = clean_header.cleanupFile(path)
     62     if not dst_path:
     63         continue
     64 
     65     b.readFile( dst_path )
     66     r = b.editFile( dst_path, newdata )
     67     if r == 0:
     68         r = "unchanged"
     69     elif r == 1:
     70         r = "edited"
     71     else:
     72         r = "added"
     73 
     74     print "cleaning: %-*s -> %-*s (%s)" % ( 35, path, 35, dst_path, r )
     75 
     76 # We don't use Perforce anymore, but just in case, define ANDROID_USE_P4
     77 # in your environment if you think you need it.
     78 usePerforce = os.environ.has_key("ANDROID_USE_P4")
     79 
     80 if usePerforce:
     81     b.updateP4Files()
     82 else:
     83     b.updateFiles()
     84 
     85 sys.exit(0)
     86