Something went wrong. Try again.
🎥 Command line media player
Something went wrong. Try again.
3.3 kB · 95 lines
Python
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596from waflib.Build import BuildContextfrom waflib import TaskGen, Utilsfrom io import StringIOfrom TOOLS.matroska import generate_C_header, generate_C_definitionsfrom TOOLS.file2string import file2stringimport os
def __wayland_scanner_cmd__(ctx, mode, dir, src, vendored_file): return "${{WAYSCAN}} {0} < {1} > ${{TGT}}".format( mode, "${SRC}" if vendored_file else "{}/{}".format(dir, src) )
def __file2string__(ctx, **kwargs): ctx( rule = __file2string_cmd__(ctx), before = ("c",), name = os.path.basename(kwargs['target']), **kwargs )
def execf(self, fn): setattr(self, 'before', ['c']) setattr(self, 'rule', ' ') # waf doesn't print the task with no rule target = getattr(self, 'target', None) out = self.path.find_or_declare(target) tmp = StringIO() fn(tmp) out.write(tmp.getvalue()) tmp.close()
@TaskGen.feature('file2string')def f2s(self): def fn(out): source = getattr(self, 'source', None) src = self.path.find_resource(source) file2string(source, iter(src.read().splitlines(True)), out) execf(self, fn)
@TaskGen.feature('ebml_header')def ebml_header(self): execf(self, generate_C_header)
@TaskGen.feature('ebml_definitions')def ebml_definitions(self): execf(self, generate_C_definitions)
def __wayland_protocol_code__(ctx, **kwargs): protocol_is_vendored = kwargs.get("vendored_protocol", False) file_name = kwargs['protocol'] + '.xml'
if protocol_is_vendored: del kwargs['vendored_protocol'] kwargs['source'] = '{}/{}'.format(kwargs['proto_dir'], file_name)
ctx( rule = __wayland_scanner_cmd__(ctx, 'private-code', kwargs['proto_dir'], file_name, protocol_is_vendored), name = os.path.basename(kwargs['target']), **kwargs )
def __wayland_protocol_header__(ctx, **kwargs): protocol_is_vendored = kwargs.get("vendored_protocol", False) file_name = kwargs['protocol'] + '.xml'
if protocol_is_vendored: del kwargs['vendored_protocol'] kwargs['source'] = '{}/{}'.format(kwargs['proto_dir'], file_name)
ctx( rule = __wayland_scanner_cmd__(ctx, 'client-header', kwargs['proto_dir'], file_name, protocol_is_vendored), before = ('c',), name = os.path.basename(kwargs['target']), **kwargs )
@TaskGen.feature('cprogram')@TaskGen.feature('cshlib')@TaskGen.feature('cstlib')@TaskGen.feature('apply_link')@TaskGen.after_method('process_source', 'process_use', 'apply_link', 'process_uselib_local', 'propagate_uselib_vars', 'do_the_symbol_stuff')def handle_add_object(tgen): if getattr(tgen, 'add_objects', None): for input in tgen.add_objects: input_node = tgen.path.find_resource(input) if input_node is not None: tgen.link_task.inputs.append(input_node)
BuildContext.file2string = __file2string__BuildContext.wayland_protocol_code = __wayland_protocol_code__BuildContext.wayland_protocol_header = __wayland_protocol_header__