11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#!/usr/bin/env python 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# this program is used to find source code that includes linux kernel headers directly 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# (e.g. with #include <linux/...> or #include <asm/...>) 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# then it lists 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectimport sys, cpp, glob, os, re, getopt 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectimport kernel 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfrom utils import * 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfrom defaults import * 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectdef usage(): 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project print """\ 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project usage: find_users.py [-v] (file|directory|@listfile)+ 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project this program is used to scan a list of files or directories for 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project sources that include kernel headers directly. the program prints 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project the list of said source files when it's done. 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project when scanning directories, only files matching the following 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project extension will be searched: .c .cpp .S .h 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project use -v to enable verbose output 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project""" 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project sys.exit(1) 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttry: 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project optlist, args = getopt.getopt( sys.argv[1:], 'v' ) 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectexcept: 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project # unrecognized option 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project print "error: unrecognized option" 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project usage() 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfor opt, arg in optlist: 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if opt == '-v': 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project kernel.verboseSearch = 1 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project kernel.verboseFind = 1 411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project else: 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project usage() 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectif len(args) < 1: 451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project usage() 461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# helper function used to walk the user files 481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectdef parse_file(path, parser): 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project parser.parseFile(path) 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# first, obtain the list of kernel files used by our clients 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# avoid parsing the 'kernel_headers' directory itself since we 541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# use this program with the Android source tree by default. 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project# 561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfparser = kernel.HeaderScanner() 571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectwalk_source_files( args, parse_file, fparser, excludes=["kernel_headers","original"] ) 581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfiles = fparser.getFiles() 591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfor f in sorted(files): 611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project print f 621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsys.exit(0) 64