123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import os
- from .. import build
- from .. import dependencies
- from .. import mlog
- from ..mesonlib import MesonException
- from ..interpreterbase import permittedKwargs, noKwargs
- class permittedSnippetKwargs:
- def __init__(self, permitted):
- self.permitted = permitted
- def __call__(self, f):
- def wrapped(s, interpreter, state, args, kwargs):
- for k in kwargs:
- if k not in self.permitted:
- mlog.warning('Passed invalid keyword argument "%s". This will become a hard error in the future.' % k)
- return f(s, interpreter, state, args, kwargs)
- return wrapped
- _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]
- program = dependencies.ExternalProgram(program_name)
- if not program.found():
- m = "Target {!r} can't be generated as {!r} could not be found"
- raise MesonException(m.format(target_name, program_name))
- _found_programs[program_name] = program
- return program
- def get_include_args(include_dirs, prefix='-I'):
- '''
- Expand include arguments to refer to the source and build dirs
- by using @SOURCE_ROOT@ and @BUILD_ROOT@ for later substitution
- '''
- if not include_dirs:
- return []
- dirs_str = []
- for incdirs in include_dirs:
- if hasattr(incdirs, "held_object"):
- dirs = incdirs.held_object
- else:
- dirs = incdirs
- if isinstance(dirs, str):
- dirs_str += ['%s%s' % (prefix, dirs)]
- continue
- # Should be build.IncludeDirs object.
- basedir = dirs.get_curdir()
- for d in dirs.get_incdirs():
- expdir = os.path.join(basedir, d)
- srctreedir = os.path.join('@SOURCE_ROOT@', expdir)
- buildtreedir = os.path.join('@BUILD_ROOT@', expdir)
- dirs_str += ['%s%s' % (prefix, buildtreedir),
- '%s%s' % (prefix, srctreedir)]
- for d in dirs.get_extra_build_dirs():
- dirs_str += ['%s%s' % (prefix, d)]
- return dirs_str
- class ModuleReturnValue:
- def __init__(self, return_value, new_objects):
- self.return_value = return_value
- assert(isinstance(new_objects, list))
- self.new_objects = new_objects
- class GResourceTarget(build.CustomTarget):
- def __init__(self, name, subdir, kwargs):
- super().__init__(name, subdir, kwargs)
- class GResourceHeaderTarget(build.CustomTarget):
- def __init__(self, name, subdir, kwargs):
- super().__init__(name, subdir, kwargs)
- class GirTarget(build.CustomTarget):
- def __init__(self, name, subdir, kwargs):
- super().__init__(name, subdir, kwargs)
- class TypelibTarget(build.CustomTarget):
- def __init__(self, name, subdir, kwargs):
- super().__init__(name, subdir, kwargs)
- class VapiTarget(build.CustomTarget):
- def __init__(self, name, subdir, kwargs):
- super().__init__(name, subdir, kwargs)
|