Move gen-kotlin-build-file.sh to python

Kotlin common multiplatform sources support will require more
complexity in gen-kotlin-build-file.sh, move it to python instead.

Test: m checkbuild
Change-Id: I02312160ad781877f1fec971168331c0dcecf136
This commit is contained in:
Colin Cross
2020-06-25 17:12:28 -07:00
parent 8ba7d47bba
commit 9b1aa0cb86
7 changed files with 201 additions and 147 deletions

View File

@@ -19,6 +19,8 @@
import argparse
from ninja_rsp import NinjaRspFileReader
def check_action(check_type):
"""
@@ -91,74 +93,6 @@ def parse_args():
return parser.parse_args()
class NinjaRspFileReader:
"""
Reads entries from a Ninja rsp file. Ninja escapes any entries in the file that contain a
non-standard character by surrounding the whole entry with single quotes, and then replacing
any single quotes in the entry with the escape sequence '\''.
"""
def __init__(self, filename):
self.f = open(filename, 'r')
self.r = self.character_reader(self.f)
def __iter__(self):
return self
def character_reader(self, f):
"""Turns a file into a generator that returns one character at a time."""
while True:
c = f.read(1)
if c:
yield c
else:
return
def __next__(self):
entry = self.read_entry()
if entry:
return entry
else:
raise StopIteration
def read_entry(self):
c = next(self.r, "")
if not c:
return ""
elif c == "'":
return self.read_quoted_entry()
else:
entry = c
for c in self.r:
if c == " " or c == "\n":
break
entry += c
return entry
def read_quoted_entry(self):
entry = ""
for c in self.r:
if c == "'":
# Either the end of the quoted entry, or the beginning of an escape sequence, read the next
# character to find out.
c = next(self.r)
if not c or c == " " or c == "\n":
# End of the item
return entry
elif c == "\\":
# Escape sequence, expect a '
c = next(self.r)
if c != "'":
# Malformed escape sequence
raise "malformed escape sequence %s'\\%s" % (entry, c)
entry += "'"
else:
raise "malformed escape sequence %s'%s" % (entry, c)
else:
entry += c
raise "unterminated quoted entry %s" % entry
def write_project_xml(f, args):
test_attr = "test='true' " if args.test else ""