parent
a01919976e
commit
0a31afd672
4 changed files with 118 additions and 27 deletions
@ -0,0 +1,31 @@ |
||||
#!/usr/bin/env python3 |
||||
# Copyright 2016 The Meson development team |
||||
|
||||
# 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. |
||||
|
||||
# This class contains the basic functionality needed to run any interpreter |
||||
# or an interpreter-based tool. |
||||
|
||||
# This tool is used to manipulate an existing Meson build definition. |
||||
# |
||||
# - add a file to a target |
||||
# - remove files from a target |
||||
# - move targets |
||||
# - reindent? |
||||
|
||||
import mesonbuild.astinterpreter |
||||
|
||||
if __name__ == '__main__': |
||||
source_root = 'test cases/common/1 trivial' |
||||
ast = mesonbuild.astinterpreter.AstInterpreter(source_root, '') |
||||
ast.dump() |
@ -0,0 +1,26 @@ |
||||
# Copyright 2016 The Meson development team |
||||
|
||||
# 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. |
||||
|
||||
# This class contains the basic functionality needed to run any interpreter |
||||
# or an interpreter-based tool. |
||||
|
||||
from . import interpreterbase |
||||
|
||||
class AstInterpreter(interpreterbase.InterpreterBase): |
||||
def __init__(self, source_root, subdir): |
||||
super().__init__(source_root, subdir) |
||||
|
||||
def dump(self): |
||||
self.load_root_meson_file() |
||||
print('AST here') |
@ -0,0 +1,54 @@ |
||||
# Copyright 2016 The Meson development team |
||||
|
||||
# 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. |
||||
|
||||
# This class contains the basic functionality needed to run any interpreter |
||||
# or an interpreter-based tool. |
||||
|
||||
from . import mparser |
||||
from . import mesonlib |
||||
from . import environment |
||||
|
||||
import os |
||||
|
||||
class InterpreterException(mesonlib.MesonException): |
||||
pass |
||||
|
||||
class InvalidCode(InterpreterException): |
||||
pass |
||||
|
||||
class InvalidArguments(InterpreterException): |
||||
pass |
||||
|
||||
|
||||
|
||||
class InterpreterBase: |
||||
def __init__(self, source_root, subdir): |
||||
self.source_root = source_root |
||||
self.funcs = {} |
||||
self.subdir = subdir |
||||
|
||||
def load_root_meson_file(self): |
||||
mesonfile = os.path.join(self.source_root, self.subdir, environment.build_filename) |
||||
if not os.path.isfile(mesonfile): |
||||
raise InvalidArguments('Missing Meson file in %s' % mesonfile) |
||||
with open(mesonfile, encoding='utf8') as mf: |
||||
code = mf.read() |
||||
if len(code.strip()) == 0: |
||||
raise InvalidCode('Builder file is empty.') |
||||
assert(isinstance(code, str)) |
||||
try: |
||||
self.ast = mparser.Parser(code).parse() |
||||
except mesonlib.MesonException as me: |
||||
me.file = environment.build_filename |
||||
raise me |
Loading…
Reference in new issue