There are two different kinds of extensions: modules that create new

objects directly and snippets that just call into interpreter methods.
pull/787/head
Jussi Pakkanen 8 years ago
parent 24221d71cc
commit fbabe8ad85
  1. 30
      mesonbuild/interpreter.py
  2. 7
      mesonbuild/modules/__init__.py
  3. 3
      mesonbuild/modules/gnome.py
  4. 9
      mesonbuild/modules/i18n.py
  5. 3
      mesonbuild/modules/modtest.py
  6. 6
      mesonbuild/modules/pkgconfig.py
  7. 13
      mesonbuild/modules/python3.py
  8. 3
      mesonbuild/modules/qt4.py
  9. 3
      mesonbuild/modules/qt5.py
  10. 3
      mesonbuild/modules/rpm.py
  11. 7
      mesonbuild/modules/windows.py

@ -359,11 +359,11 @@ class BuildMachine(InterpreterObject):
environment.detect_cpu_family(self.compilers),
environment.detect_cpu(self.compilers),
sys.byteorder)
self.methods.update({'system' : self.system_method,
'cpu_family' : self.cpu_family_method,
'cpu' : self.cpu_method,
'endian' : self.endian_method,
})
self.methods.update({'system': self.system_method,
'cpu_family': self.cpu_family_method,
'cpu': self.cpu_method,
'endian': self.endian_method,
})
def cpu_family_method(self, args, kwargs):
return self.held_object.cpu_family
@ -392,11 +392,11 @@ class CrossMachineInfo(InterpreterObject):
cross_info['cpu_family'],
cross_info['cpu'],
cross_info['endian'])
self.methods.update({'system' : self.system_method,
'cpu' : self.cpu_method,
'cpu_family' : self.cpu_family_method,
'endian' : self.endian_method,
})
self.methods.update({'system': self.system_method,
'cpu': self.cpu_method,
'cpu_family': self.cpu_family_method,
'endian': self.endian_method,
})
def cpu_family_method(self, args, kwargs):
return self.held_object.cpu_family
@ -1011,10 +1011,12 @@ class ModuleHolder(InterpreterObject):
state.build_machine = self.interpreter.builtin['build_machine'].held_object
state.host_machine = self.interpreter.builtin['host_machine'].held_object
state.target_machine = self.interpreter.builtin['target_machine'].held_object
state.interpreter = self.interpreter
value = fn(state, args, kwargs)
if num_targets != len(self.interpreter.build.targets):
raise InterpreterException('Extension module altered internal state illegally.')
if self.held_object.is_snippet(method_name):
value = fn(self.interpreter, state, args, kwargs)
else:
value = fn(state, args, kwargs)
if num_targets != len(self.interpreter.build.targets):
raise InterpreterException('Extension module altered internal state illegally.')
return self.interpreter.module_method_callback(value)
class MesonMain(InterpreterObject):

@ -6,6 +6,13 @@ from ..mesonlib import MesonException
_found_programs = {}
class ExtensionModule:
def __init__(self):
self.snippets = set() # List of methods that operate only on the interpreter.
def is_snippet(self, funcname):
return funcname in self.snippets
def find_program(program_name, target_name):
if program_name in _found_programs:
return _found_programs[program_name]

@ -29,6 +29,7 @@ from .. import compilers
from .. import interpreter
from . import GResourceTarget, GResourceHeaderTarget, GirTarget, TypelibTarget, VapiTarget
from . import find_program, get_include_args
from . import ExtensionModule
# gresource compilation is broken due to the way
@ -57,7 +58,7 @@ def gir_has_extra_lib_arg():
pass
return _gir_has_extra_lib_arg
class GnomeModule:
class GnomeModule(ExtensionModule):
gir_dep = None
@staticmethod

@ -12,13 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
import shutil
from os import path
from .. import coredata, mesonlib, build
from ..mesonlib import MesonException
from . import ModuleReturnValue
import sys
import shutil
from . import ExtensionModule
PRESET_ARGS = {
'glib': [
@ -46,7 +47,7 @@ PRESET_ARGS = {
]
}
class I18nModule:
class I18nModule(ExtensionModule):
def merge_file(self, state, args, kwargs):
podir = kwargs.pop('po_dir', None)

@ -13,8 +13,9 @@
# limitations under the License.
from . import ModuleReturnValue
from . import ExtensionModule
class TestModule:
class TestModule(ExtensionModule):
def print_hello(self, state, args, kwargs):
print('Hello from a Meson module')

@ -12,14 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os
from .. import build
from .. import mesonlib
from .. import mlog
from . import ModuleReturnValue
from . import ExtensionModule
import os
class PkgConfigModule:
class PkgConfigModule(ExtensionModule):
def _get_lname(self, l, msg, pcfile):
# Nothing special

@ -12,13 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from .. import coredata, build
from .. import mesonlib
import os
class Python3Module:
from . import ExtensionModule
def extension_module(self, state, args, kwargs):
class Python3Module(ExtensionModule):
def __init__(self):
super().__init__()
self.snippets.add('extension_module')
def extension_module(self, interpreter, state, args, kwargs):
if 'name_prefix' in kwargs:
raise mesonlib.MesonException('Name_prefix is set automatically, specifying it is forbidden.')
if 'name_suffix' in kwargs:
@ -34,7 +37,7 @@ class Python3Module:
suffix = []
kwargs['name_prefix'] = ''
kwargs['name_suffix'] = suffix
return state.interpreter.func_shared_module(None, args, kwargs)
return interpreter.func_shared_module(None, args, kwargs)
def initialize():
return Python3Module()

@ -17,10 +17,11 @@ from .. import mlog
from .. import build
from ..mesonlib import MesonException, Popen_safe
from ..dependencies import Qt4Dependency
from . import ExtensionModule
import xml.etree.ElementTree as ET
from . import ModuleReturnValue
class Qt4Module():
class Qt4Module(ExtensionModule):
tools_detected = False
def _detect_tools(self, env):

@ -17,10 +17,11 @@ from .. import mlog
from .. import build
from ..mesonlib import MesonException, Popen_safe
from ..dependencies import Qt5Dependency
from . import ExtensionModule
import xml.etree.ElementTree as ET
from . import ModuleReturnValue
class Qt5Module():
class Qt5Module(ExtensionModule):
tools_detected = False
def _detect_tools(self, env):

@ -21,10 +21,11 @@ import datetime
from .. import mlog
from . import GirTarget, TypelibTarget
from . import ModuleReturnValue
from . import ExtensionModule
import os
class RPMModule:
class RPMModule(ExtensionModule):
def generate_spec_template(self, state, args, kwargs):
compiler_deps = set()

@ -12,14 +12,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os
from .. import mesonlib, dependencies, build
from ..mesonlib import MesonException
from . import get_include_args
from . import ModuleReturnValue
from . import ExtensionModule
import os
class WindowsModule:
class WindowsModule(ExtensionModule):
def detect_compiler(self, compilers):
for l in ('c', 'cpp'):

Loading…
Cancel
Save