# # Copyright 2016 - The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import argparse import fileinput import os import os.path import re import pprint # Parses the output of make install --dry-run and generates directives in the # form # # install['target'] = [ 'srcfile' ] # # This output is then fed into gen_android_mk which generates Android.mk. # # This process is split into two steps so the second step can later be replaced # with an Android.bp generator. class MakeInstallParser(object): '''Parses the output of make install --dry-run.''' def __init__(self, ltp_root): self.ltp_root = ltp_root def ParseFile(self, input_path): '''Parses the text output of make install --dry-run. Args: input_text: string, output of make install --dry-run Returns: string, directives in form install['target'] = [ 'srcfile' ] ''' pattern = re.compile(r'install -m \d+ "%s%s(.*)" "/opt/ltp/(.*)"' % (os.path.realpath(self.ltp_root), os.sep)) result = [] with open(input_path, 'r') as f: for line in f: line = line.strip() m = pattern.match(line) if not m: continue src, target = m.groups() # If the file isn't in the source tree, it's not a prebuilt if not os.path.isfile( os.path.realpath(self.ltp_root) + os.sep + src): continue result.append("install['%s'] = ['%s']" % (target, src)) return result def main(): arg_parser = argparse.ArgumentParser( description='Parse the LTP make install --dry-run output into a list') arg_parser.add_argument( '--ltp-root', dest='ltp_root', required=True, help='LTP Root dir') arg_parser.add_argument( '--dry-run-file', dest='input_path', required=True, help='Path to LTP make install --dry-run output file') args = arg_parser.parse_args() make_install_parser = MakeInstallParser(args.ltp_root) result = make_install_parser.ParseFile(args.input_path) print pprint.pprint(result) if __name__ == '__main__': main()