mirror of
https://github.com/mesonbuild/meson.git
synced 2026-11-06 05:16:42 +00:00
allow nested if loop
close paren
This commit is contained in:
1 parent
af38722f89
commit
2ba2c7771f
2 files changed
+32
-17
No files matched your search
@@ -1,3 +1,4 @@
|
||||
.mypy_cache/
|
||||
/.project
|
||||
/.pydevproject
|
||||
/.settings
|
||||
|
||||
+31
-17
@@ -14,9 +14,12 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import sys, os
|
||||
from typing import List
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import re
|
||||
|
||||
|
||||
class Token:
|
||||
def __init__(self, tid, value):
|
||||
self.tid = tid
|
||||
@@ -83,7 +86,7 @@ class Lexer:
|
||||
raise RuntimeError('Lexer got confused line %d column %d' % (lineno, col))
|
||||
|
||||
class Parser:
|
||||
def __init__(self, code):
|
||||
def __init__(self, code: str):
|
||||
self.stream = Lexer().lex(code)
|
||||
self.getsym()
|
||||
|
||||
@@ -140,13 +143,13 @@ class Converter:
|
||||
'enable_testing': True,
|
||||
'include': True}
|
||||
|
||||
def __init__(self, cmake_root):
|
||||
self.cmake_root = cmake_root
|
||||
def __init__(self, cmake_root: str):
|
||||
self.cmake_root = Path(cmake_root).expanduser()
|
||||
self.indent_unit = ' '
|
||||
self.indent_level = 0
|
||||
self.options = []
|
||||
self.options = [] # type: List[tuple]
|
||||
|
||||
def convert_args(self, args, as_array=True):
|
||||
def convert_args(self, args: List[Token], as_array: bool = True):
|
||||
res = []
|
||||
if as_array:
|
||||
start = '['
|
||||
@@ -229,7 +232,18 @@ class Converter:
|
||||
line = '%s = %s\n' % (varname, self.convert_args(t.args[1:]))
|
||||
elif t.name == 'if':
|
||||
postincrement = 1
|
||||
line = 'if %s' % self.convert_args(t.args, False)
|
||||
try:
|
||||
line = 'if %s' % self.convert_args(t.args, False)
|
||||
except AttributeError: # complex if statements
|
||||
line = t.name
|
||||
for arg in t.args:
|
||||
if isinstance(arg, Token):
|
||||
line += ' ' + arg.value
|
||||
elif isinstance(arg, list):
|
||||
line += ' ('
|
||||
for a in arg:
|
||||
line += ' ' + a.value
|
||||
line += ' )'
|
||||
elif t.name == 'elseif':
|
||||
preincrement = -1
|
||||
postincrement = 1
|
||||
@@ -251,32 +265,32 @@ class Converter:
|
||||
outfile.write('\n')
|
||||
self.indent_level += postincrement
|
||||
|
||||
def convert(self, subdir=''):
|
||||
if subdir == '':
|
||||
def convert(self, subdir: Path = None):
|
||||
if not subdir:
|
||||
subdir = self.cmake_root
|
||||
cfile = os.path.join(subdir, 'CMakeLists.txt')
|
||||
cfile = Path(subdir).expanduser() / 'CMakeLists.txt'
|
||||
try:
|
||||
with open(cfile) as f:
|
||||
with cfile.open() as f:
|
||||
cmakecode = f.read()
|
||||
except FileNotFoundError:
|
||||
print('\nWarning: No CMakeLists.txt in', subdir, '\n')
|
||||
print('\nWarning: No CMakeLists.txt in', subdir, '\n', file=sys.stderr)
|
||||
return
|
||||
p = Parser(cmakecode)
|
||||
with open(os.path.join(subdir, 'meson.build'), 'w') as outfile:
|
||||
with (subdir / 'meson.build').open('w') as outfile:
|
||||
for t in p.parse():
|
||||
if t.name == 'add_subdirectory':
|
||||
# print('\nRecursing to subdir',
|
||||
# os.path.join(self.cmake_root, t.args[0].value),
|
||||
# self.cmake_root / t.args[0].value,
|
||||
# '\n')
|
||||
self.convert(os.path.join(subdir, t.args[0].value))
|
||||
self.convert(subdir / t.args[0].value)
|
||||
# print('\nReturning to', self.cmake_root, '\n')
|
||||
self.write_entry(outfile, t)
|
||||
if subdir == self.cmake_root and len(self.options) > 0:
|
||||
self.write_options()
|
||||
|
||||
def write_options(self):
|
||||
filename = os.path.join(self.cmake_root, 'meson_options.txt')
|
||||
with open(filename, 'w') as optfile:
|
||||
filename = self.cmake_root / 'meson_options.txt'
|
||||
with filename.open('w') as optfile:
|
||||
for o in self.options:
|
||||
(optname, description, default) = o
|
||||
if default is None:
|
||||
|
||||
Reference in new issue
Block a user