def enable_support(cc, cxx): if cxx or not cc: make_cxx_batch = TaskGen.extension(".cpp", ".cc", ".cxx", ".C", ".c++")(make_batch_fun("cxx")) if cc: make_c_batch = TaskGen.extension(".c")(make_batch_fun("c")) else: TaskGen.task_gen.mappings[".c"] = TaskGen.task_gen.mappings[".cpp"]
def enhance_lib(): """ modify existing classes and methods """ for m in meths_typos: replace(m) # catch '..' in ant_glob patterns old_ant_glob = Node.Node.ant_glob def ant_glob(self, *k, **kw): for x in k[0].split('/'): if x == '..': Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0]) return old_ant_glob(self, *k, **kw) Node.Node.ant_glob = ant_glob # catch conflicting ext_in/ext_out/before/after declarations old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2)) return ret Task.is_before = is_before # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose # so we only issue a warning def check_err_features(self): lst = self.to_list(self.features) if 'shlib' in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in ('c', 'cxx', 'd', 'fc'): if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]: Logs.error('%r features is probably missing %r' % (self, x)) TaskGen.feature('*')(check_err_features)
def _build_pdf(ctx): from waflib import TaskGen TaskGen.declare_chain( name = 'rst2latex', rule = '${RST2LATEX} ${RST2LATEX_FLAGS} ${SRC} ${TGT}', ext_in = '.rst', ext_out = '.tex' ) TaskGen.declare_chain( name = 'pdflatex', rule = '${PDFLATEX} ${PDFLATEX_FLAGS} ${SRC}; ' * 2, ext_in = '.tex', ext_out = '.pdf', shell = True ) ctx.env.RST2LATEX_FLAGS = [ '--config=' + ctx.srcnode.abspath() + '/DOCS/man/docutils.conf' ] ctx.env.PDFLATEX_FLAGS = [ '--interaction=batchmode', '--output-directory=DOCS/man/en/', '--jobname=mpv' ] ctx(source = 'DOCS/man/en/mpv.rst') _add_rst_manual_dependencies(ctx) ctx.install_files(ctx.env.DOCDIR, ['DOCS/man/en/mpv.pdf'])
def enhance_lib(): for m in meths_typos: replace(m) old_ant_glob=Node.Node.ant_glob def ant_glob(self,*k,**kw): for x in k[0].split('/'): if x=='..': Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0]) return old_ant_glob(self,*k,**kw) Node.Node.ant_glob=ant_glob old=Task.is_before def is_before(t1,t2): ret=old(t1,t2) if ret and old(t2,t1): Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2)) return ret Task.is_before=is_before def check_err_features(self): lst=self.to_list(self.features) if'shlib'in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in('c','cxx','d','fc'): if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]: Logs.error('%r features is probably missing %r'%(self,x)) TaskGen.feature('*')(check_err_features)
def enable_support(cc, cxx): if cxx or not cc: TaskGen.extension('.cpp', '.cc', '.cxx', '.C', '.c++')(make_batch_fun('cxx')) if cc: TaskGen.extension('.c')(make_batch_fun('c')) else: TaskGen.task_gen.mappings['.c'] = TaskGen.task_gen.mappings['.cpp']
def enhance_lib(): for m in meths_typos: replace(m) old_ant_glob=Node.Node.ant_glob def ant_glob(self,*k,**kw): if k: lst=Utils.to_list(k[0]) for pat in lst: if'..'in pat.split('/'): Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0]) return old_ant_glob(self,*k,**kw) Node.Node.ant_glob=ant_glob old=Task.is_before def is_before(t1,t2): ret=old(t1,t2) if ret and old(t2,t1): Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2)) return ret Task.is_before=is_before def check_err_features(self): lst=self.to_list(self.features) if'shlib'in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in('c','cxx','d','fc'): if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]: Logs.error('%r features is probably missing %r'%(self,x)) TaskGen.feature('*')(check_err_features) def check_err_order(self): if not hasattr(self,'rule'): for x in('before','after','ext_in','ext_out'): if hasattr(self,x): Logs.warn('Erroneous order constraint %r on non-rule based task generator %r'%(x,self)) else: for x in('before','after'): for y in self.to_list(getattr(self,x,[])): if not Task.classes.get(y,None): Logs.error('Erroneous order constraint %s=%r on %r'%(x,y,self)) TaskGen.feature('*')(check_err_order) old_compile=Build.BuildContext.compile def check_compile(self): check_invalid_constraints(self) try: ret=old_compile(self) finally: check_same_targets(self) return ret Build.BuildContext.compile=check_compile def getattri(self,name,default=None): if name=='append'or name=='add': raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique') elif name=='prepend': raise Errors.WafError('env.prepend does not exist: use env.prepend_value') if name in self.__slots__: return object.__getattr__(self,name,default) else: return self[name] ConfigSet.ConfigSet.__getattr__=getattri
def enhance_lib(): """ modify existing classes and methods """ for m in meths_typos: replace(m) # catch '..' in ant_glob patterns old_ant_glob = Node.Node.ant_glob def ant_glob(self, *k, **kw): for x in k[0].split('/'): if x == '..': Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0]) return old_ant_glob(self, *k, **kw) Node.Node.ant_glob = ant_glob # catch conflicting ext_in/ext_out/before/after declarations old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2)) return ret Task.is_before = is_before # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose # so we only issue a warning def check_err_features(self): lst = self.to_list(self.features) if 'shlib' in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in ('c', 'cxx', 'd', 'fc'): if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]: Logs.error('%r features is probably missing %r' % (self, x)) TaskGen.feature('*')(check_err_features) # check for @extension used with @feature/@before/@after old_compile = Build.BuildContext.compile def check_compile(self): feat = set([]) for x in list(TaskGen.feats.values()): feat.union(set(x)) for (x, y) in TaskGen.task_gen.prec.items(): feat.add(x) feat.union(set(y)) ext = set([]) for x in TaskGen.task_gen.mappings.values(): ext.add(x.__name__) invalid = ext & feat if invalid: Logs.error('The methods %r have invalid annotations: @extension <-> @feature/@before/@after' % list(invalid)) return old_compile(self) Build.BuildContext.compile = check_compile
def enhance_lib(): for m in meths_typos: replace(m) old_ant_glob=Node.Node.ant_glob def ant_glob(self,*k,**kw): if k: for x in k[0].split('/'): if x=='..': Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0]) return old_ant_glob(self,*k,**kw) Node.Node.ant_glob=ant_glob old=Task.is_before def is_before(t1,t2): ret=old(t1,t2) if ret and old(t2,t1): Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2)) return ret Task.is_before=is_before def check_err_features(self): lst=self.to_list(self.features) if'shlib'in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in('c','cxx','d','fc'): if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]: Logs.error('%r features is probably missing %r'%(self,x)) TaskGen.feature('*')(check_err_features) old_compile=Build.BuildContext.compile def check_compile(self): feat=set([]) for x in list(TaskGen.feats.values()): feat.union(set(x)) for(x,y)in TaskGen.task_gen.prec.items(): feat.add(x) feat.union(set(y)) ext=set([]) for x in TaskGen.task_gen.mappings.values(): ext.add(x.__name__) invalid=ext&feat if invalid: Logs.error('The methods %r have invalid annotations: @extension <-> @feature/@before/@after'%list(invalid)) return old_compile(self) Build.BuildContext.compile=check_compile def getattr(self,name): if name=='append'or name=='add': raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique') elif name=='prepend': raise Errors.WafError('env.prepend does not exist: use env.prepend_value') if name in self.__slots__: return object.__getattr__(self,name) else: return self[name] ConfigSet.ConfigSet.__getattr__=getattr
def build_app(bld, appname, viewname, scriptname=None): "build gui" name = appname if scriptname is None else scriptname build_startupscripts(bld, name, appname + '.' + viewname) build_bokehjs(bld, appname + '.' + viewname, scriptname) build_doc(bld, scriptname) if bld.env.PANDOC: TaskGen.declare_chain(name='markdowns', rule='${PANDOC} --toc -s ${SRC} -o ${TGT}', ext_in='.md', ext_out='.html', shell=False, reentrant=False, **bld.installpath())
def before(*k): for key, val in repl.items(): if key in k: if Logs.verbose > 1: Logs.info('before %s -> %s' % (key, val)) k.replace(key, val) return TaskGen.before_method(*k)
def __call__(self, *k, **kw): """Creates a task generator""" kw['bld'] = self ret = TaskGen.task_gen(*k, **kw) self.task_gen_cache_names = {} # reset the cache, each time self.add_to_group(ret, group=kw.get('group', None)) return ret
def after(*k): for key, val in repl.items(): if key in k: if Logs.verbose > 1: Logs.error('after %s -> %s' % (key, val)) k.replace(key, val) return TaskGen.after_method(*k)
def __call__(self, *k, **kw): # this is one way of doing it, one could use a task generator method too bld = kw['bld'] = bld_proxy(self) ret = TaskGen.task_gen(*k, **kw) self.task_gen_cache_names = {} self.add_to_group(ret, group=kw.get('group')) ret.bld = bld bld.set_key(ret.path.abspath().replace(os.sep, '') + str(ret.idx)) return ret
def _build_pdf(ctx): from waflib import TaskGen TaskGen.declare_chain( name="rst2latex", rule="${RST2LATEX} ${RST2LATEX_FLAGS} ${SRC} ${TGT}", ext_in=".rst", ext_out=".tex" ) TaskGen.declare_chain( name="pdflatex", rule="${PDFLATEX} ${PDFLATEX_FLAGS} ${SRC}; " * 2, ext_in=".tex", ext_out=".pdf", shell=True ) ctx.env.RST2LATEX_FLAGS = ["--config=" + ctx.srcnode.abspath() + "/DOCS/man/docutils.conf"] ctx.env.PDFLATEX_FLAGS = ["--interaction=batchmode", "--output-directory=DOCS/man/en/", "--jobname=mpv"] ctx(source="DOCS/man/en/mpv.rst") _add_rst_manual_dependencies(ctx) ctx.install_files(ctx.env.DOCDIR, ["DOCS/man/en/mpv.pdf"])
def enhance_lib(): for m in meths_typos: replace(m) old_ant_glob = Node.Node.ant_glob def ant_glob(self, *k, **kw): for x in k[0].split('/'): if x == '..': Logs.error( "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0]) return old_ant_glob(self, *k, **kw) Node.Node.ant_glob = ant_glob old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2)) return ret Task.is_before = is_before def check_err_features(self): lst = self.to_list(self.features) if 'shlib' in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in ('c', 'cxx', 'd', 'fc'): if not x in lst and lst and lst[0] in [ x + y for y in ('program', 'shlib', 'stlib') ]: Logs.error('%r features is probably missing %r' % (self, x)) TaskGen.feature('*')(check_err_features)
def __call__(self, *k, **kw): """ Create a task generator, adding it to the current build group. The following forms are equivalent:: def build(bld): tg = bld(a=1, b=2) def build(bld): tg = bld() tg.a = 1 tg.b = 2 """ kw['bld'] = self ret = TaskGen.task_gen(*k, **kw) self.task_gen_cache_names = {} # reset the cache, each time self.add_to_group(ret, group=kw.get('group', None)) return ret
def __call__(self, *k, **kw): """ Create a task generator and add it to the current build group. The following forms are equivalent:: def build(bld): tg = bld(a=1, b=2) def build(bld): tg = bld() tg.a = 1 tg.b = 2 def build(bld): tg = TaskGen.task_gen(a=1, b=2) bld.add_to_group(tg, None) :param group: group name to add the task generator to :type group: string """ kw['bld'] = self ret = TaskGen.task_gen(*k, **kw) self.task_gen_cache_names = {} # reset the cache, each time self.add_to_group(ret, group=kw.get('group')) return ret
def build(ctx): ctx.load('waf_customizations') ctx.load('generators.sources') ctx( features="file2string", source="TOOLS/osxbundle/mpv.app/Contents/Resources/icon.icns", target="osdep/macosx_icon.inc", ) ctx( features="file2string", source="etc/mpv-icon-8bit-16x16.png", target="video/out/x11_icon_16.inc", ) ctx( features="file2string", source="etc/mpv-icon-8bit-32x32.png", target="video/out/x11_icon_32.inc", ) ctx( features="file2string", source="etc/mpv-icon-8bit-64x64.png", target="video/out/x11_icon_64.inc", ) ctx( features="file2string", source="etc/mpv-icon-8bit-128x128.png", target="video/out/x11_icon_128.inc", ) ctx( features="file2string", source="etc/input.conf", target="input/input_conf.h", ) ctx( features="file2string", source="etc/builtin.conf", target="player/builtin_conf.inc", ) ctx( features="file2string", source="sub/osd_font.otf", target="sub/osd_font.h", ) lua_files = [ "defaults.lua", "assdraw.lua", "options.lua", "osc.lua", "ytdl_hook.lua", "stats.lua" ] for fn in lua_files: fn = "player/lua/" + fn ctx( features="file2string", source=fn, target=os.path.splitext(fn)[0] + ".inc", ) ctx( features="file2string", source="player/javascript/defaults.js", target="player/javascript/defaults.js.inc", ) if ctx.dependency_satisfied('wayland'): ctx.wayland_protocol_code(proto_dir=ctx.env.WL_PROTO_DIR, protocol="stable/xdg-shell/xdg-shell", target="video/out/wayland/xdg-shell.c") ctx.wayland_protocol_header(proto_dir=ctx.env.WL_PROTO_DIR, protocol="stable/xdg-shell/xdg-shell", target="video/out/wayland/xdg-shell.h") ctx.wayland_protocol_code( proto_dir=ctx.env.WL_PROTO_DIR, protocol="unstable/idle-inhibit/idle-inhibit-unstable-v1", target="video/out/wayland/idle-inhibit-v1.c") ctx.wayland_protocol_header( proto_dir=ctx.env.WL_PROTO_DIR, protocol="unstable/idle-inhibit/idle-inhibit-unstable-v1", target="video/out/wayland/idle-inhibit-v1.h") ctx.wayland_protocol_code(proto_dir="video/out/wayland", protocol="server-decoration", vendored_protocol=True, target="video/out/wayland/srv-decor.c") ctx.wayland_protocol_header(proto_dir="video/out/wayland", protocol="server-decoration", vendored_protocol=True, target="video/out/wayland/srv-decor.h") ctx(features="ebml_header", target="ebml_types.h") ctx(features="ebml_definitions", target="ebml_defs.c") def swift(task): src = ' '.join([x.abspath() for x in task.inputs]) bridge = ctx.path.find_node("osdep/macOS_swift_bridge.h").abspath() tgt = task.outputs[0].abspath() header = task.outputs[1].abspath() module = task.outputs[2].abspath() cmd = ('%s %s -module-name macOS_swift -emit-module-path %s ' '-import-objc-header %s -emit-objc-header-path %s -o %s %s ' '-I. -I%s') % (ctx.env.SWIFT, ctx.env.SWIFT_FLAGS, module, bridge, header, tgt, src, ctx.srcnode.abspath()) return task.exec_command(cmd) if ctx.dependency_satisfied('macos-cocoa-cb'): swift_source = [ ("osdep/macOS_mpv_helper.swift"), ("video/out/cocoa-cb/events_view.swift"), ("video/out/cocoa-cb/video_layer.swift"), ("video/out/cocoa-cb/window.swift"), ("video/out/cocoa_cb_common.swift"), ] ctx( rule=swift, source=ctx.filtered_sources(swift_source), target=('osdep/macOS_swift.o ' 'osdep/macOS_swift.h ' 'osdep/macOS_swift.swiftmodule'), before='c', ) ctx.env.append_value('LINKFLAGS', [ '-Xlinker', '-add_ast_path', '-Xlinker', '%s' % ctx.path.find_or_declare( "osdep/macOS_swift.swiftmodule").abspath() ]) if ctx.dependency_satisfied('cplayer'): main_fn_c = ctx.pick_first_matching_dep([ ("osdep/main-fn-cocoa.c", "cocoa"), ("osdep/main-fn-unix.c", "posix"), ("osdep/main-fn-win.c", "win32-desktop"), ]) getch2_c = ctx.pick_first_matching_dep([ ("osdep/terminal-unix.c", "posix"), ("osdep/terminal-win.c", "win32-desktop"), ("osdep/terminal-dummy.c"), ]) timer_c = ctx.pick_first_matching_dep([ ("osdep/timer-win2.c", "os-win32"), ("osdep/timer-darwin.c", "os-darwin"), ("osdep/timer-linux.c", "posix"), ]) ipc_c = ctx.pick_first_matching_dep([ ("input/ipc-unix.c", "posix"), ("input/ipc-win.c", "win32-desktop"), ("input/ipc-dummy.c"), ]) subprocess_c = ctx.pick_first_matching_dep([ ("osdep/subprocess-posix.c", "posix-spawn"), ("osdep/subprocess-win.c", "win32-desktop"), ("osdep/subprocess-dummy.c"), ]) sources = [ ## Audio ("audio/aframe.c"), ("audio/audio_buffer.c"), ("audio/chmap.c"), ("audio/chmap_sel.c"), ("audio/decode/ad_lavc.c"), ("audio/decode/ad_spdif.c"), ("audio/filter/af_format.c"), ("audio/filter/af_lavcac3enc.c"), ("audio/filter/af_lavrresample.c"), ("audio/filter/af_rubberband.c", "rubberband"), ("audio/filter/af_scaletempo.c"), ("audio/fmt-conversion.c"), ("audio/format.c"), ("audio/out/ao.c"), ("audio/out/ao_alsa.c", "alsa"), ("audio/out/ao_audiounit.m", "audiounit"), ("audio/out/ao_coreaudio.c", "coreaudio"), ("audio/out/ao_coreaudio_chmap.c", "audiounit"), ("audio/out/ao_coreaudio_chmap.c", "coreaudio"), ("audio/out/ao_coreaudio_exclusive.c", "coreaudio"), ("audio/out/ao_coreaudio_properties.c", "coreaudio"), ("audio/out/ao_coreaudio_utils.c", "audiounit"), ("audio/out/ao_coreaudio_utils.c", "coreaudio"), ("audio/out/ao_jack.c", "jack"), ("audio/out/ao_lavc.c"), ("audio/out/ao_null.c"), ("audio/out/ao_openal.c", "openal"), ("audio/out/ao_opensles.c", "opensles"), ("audio/out/ao_oss.c", "oss-audio"), ("audio/out/ao_pcm.c"), ("audio/out/ao_pulse.c", "pulse"), ("audio/out/ao_rsound.c", "rsound"), ("audio/out/ao_sdl.c", "sdl2"), ("audio/out/ao_sndio.c", "sndio"), ("audio/out/ao_wasapi.c", "wasapi"), ("audio/out/ao_wasapi_changenotify.c", "wasapi"), ("audio/out/ao_wasapi_utils.c", "wasapi"), ("audio/out/pull.c"), ("audio/out/push.c"), ## Core ("common/av_common.c"), ("common/av_log.c"), ("common/codecs.c"), ("common/common.c"), ("common/encode_lavc.c"), ("common/msg.c"), ("common/playlist.c"), ("common/recorder.c"), ("common/tags.c"), ("common/version.c"), ## Demuxers ("demux/codec_tags.c"), ("demux/cue.c"), ("demux/demux.c"), ("demux/demux_cue.c"), ("demux/demux_disc.c"), ("demux/demux_edl.c"), ("demux/demux_lavf.c"), ("demux/demux_libarchive.c", "libarchive"), ("demux/demux_mf.c"), ("demux/demux_mkv.c"), ("demux/demux_mkv_timeline.c"), ("demux/demux_null.c"), ("demux/demux_playlist.c"), ("demux/demux_rar.c"), ("demux/demux_raw.c"), ("demux/demux_timeline.c"), ("demux/demux_tv.c", "tv"), ("demux/ebml.c"), ("demux/packet.c"), ("demux/timeline.c"), ("filters/f_autoconvert.c"), ("filters/f_auto_filters.c"), ("filters/f_decoder_wrapper.c"), ("filters/f_demux_in.c"), ("filters/f_hwtransfer.c"), ("filters/f_lavfi.c"), ("filters/f_output_chain.c"), ("filters/f_swresample.c"), ("filters/f_swscale.c"), ("filters/f_utils.c"), ("filters/filter.c"), ("filters/frame.c"), ("filters/user_filters.c"), ## Input ("input/cmd.c"), ("input/event.c"), ("input/input.c"), ("input/ipc.c"), (ipc_c), ("input/keycodes.c"), ("input/pipe-win32.c", "win32-pipes"), ## Misc ("misc/bstr.c"), ("misc/charset_conv.c"), ("misc/dispatch.c"), ("misc/json.c"), ("misc/node.c"), ("misc/rendezvous.c"), ("misc/ring.c"), ("misc/thread_pool.c"), ## Options ("options/m_config.c"), ("options/m_option.c"), ("options/m_property.c"), ("options/options.c"), ("options/parse_commandline.c"), ("options/parse_configfile.c"), ("options/path.c"), ## Player ("player/audio.c"), ("player/client.c"), ("player/command.c"), ("player/configfiles.c"), ("player/external_files.c"), ("player/javascript.c", "javascript"), ("player/loadfile.c"), ("player/lua.c", "lua"), ("player/main.c"), ("player/misc.c"), ("player/osd.c"), ("player/playloop.c"), ("player/screenshot.c"), ("player/scripting.c"), ("player/sub.c"), ("player/video.c"), ## Streams ("stream/ai_alsa1x.c", "alsa && audio-input"), ("stream/ai_oss.c", "oss-audio && audio-input"), ("stream/ai_sndio.c", "sndio && audio-input"), ("stream/audio_in.c", "audio-input"), ("stream/cache.c"), ("stream/cache_file.c"), ("stream/cookies.c"), ("stream/dvb_tune.c", "dvbin"), ("stream/frequencies.c", "tv"), ("stream/rar.c"), ("stream/stream.c"), ("stream/stream_avdevice.c"), ("stream/stream_bluray.c", "libbluray"), ("stream/stream_cb.c"), ("stream/stream_cdda.c", "cdda"), ("stream/stream_dvb.c", "dvbin"), ("stream/stream_dvd.c", "dvdread-common"), ("stream/stream_dvd_common.c", "dvdread-common"), ("stream/stream_dvdnav.c", "dvdnav"), ("stream/stream_edl.c"), ("stream/stream_file.c"), ("stream/stream_lavf.c"), ("stream/stream_libarchive.c", "libarchive"), ("stream/stream_memory.c"), ("stream/stream_mf.c"), ("stream/stream_null.c"), ("stream/stream_rar.c"), ("stream/stream_smb.c", "libsmbclient"), ("stream/stream_tv.c", "tv"), ("stream/tv.c", "tv"), ("stream/tvi_dummy.c", "tv"), ("stream/tvi_v4l2.c", "tv-v4l2"), ## Subtitles ("sub/ass_mp.c", "libass"), ("sub/dec_sub.c"), ("sub/draw_bmp.c"), ("sub/filter_sdh.c"), ("sub/img_convert.c"), ("sub/lavc_conv.c"), ("sub/osd.c"), ("sub/osd_dummy.c", "dummy-osd"), ("sub/osd_libass.c", "libass-osd"), ("sub/sd_ass.c", "libass"), ("sub/sd_lavc.c"), ## Video ("video/csputils.c"), ("video/d3d.c", "d3d-hwaccel"), ("video/decode/vd_lavc.c"), #( "video/filter/vf_canny.c", "opencv" ), ("video/filter/vf_vector.c", "opencv"), ("video/filter/vf_vectorraster.c"), ("video/filter/refqueue.c"), ("video/filter/vf_d3d11vpp.c", "d3d-hwaccel"), ("video/filter/vf_format.c"), ("video/filter/vf_sub.c"), ("video/filter/vf_vapoursynth.c", "vapoursynth-core"), ("video/filter/vf_vavpp.c", "vaapi"), ("video/filter/vf_vdpaupp.c", "vdpau"), ("video/fmt-conversion.c"), ("video/hwdec.c"), ("video/image_loader.c"), ("video/image_writer.c"), ("video/img_format.c"), ("video/mp_image.c"), ("video/mp_image_pool.c"), ("video/out/aspect.c"), ("video/out/bitmap_packer.c"), ("video/out/cocoa/events_view.m", "cocoa"), ("video/out/cocoa/video_view.m", "cocoa"), ("video/out/cocoa/window.m", "cocoa"), ("video/out/cocoa_common.m", "cocoa"), ("video/out/d3d11/context.c", "d3d11"), ("video/out/d3d11/hwdec_d3d11va.c", "d3d11 && d3d-hwaccel"), ("video/out/d3d11/hwdec_dxva2dxgi.c", "d3d11 && d3d9-hwaccel"), ("video/out/d3d11/ra_d3d11.c", "d3d11"), ("video/out/dither.c"), ("video/out/dr_helper.c"), ("video/out/drm_atomic.c", "drm"), ("video/out/drm_common.c", "drm"), ("video/out/drm_prime.c", "drm && drmprime"), ("video/out/filter_kernels.c"), ("video/out/gpu/context.c"), ("video/out/gpu/d3d11_helpers.c", "d3d11 || egl-angle-win32"), ("video/out/gpu/hwdec.c"), ("video/out/gpu/lcms.c"), ("video/out/gpu/libmpv_gpu.c"), ("video/out/gpu/osd.c"), ("video/out/gpu/ra.c"), ("video/out/gpu/shader_cache.c"), ("video/out/gpu/spirv.c"), ("video/out/gpu/spirv_shaderc.c", "shaderc"), ("video/out/gpu/user_shaders.c"), ("video/out/gpu/utils.c"), ("video/out/gpu/video.c"), ("video/out/gpu/video_shaders.c"), ("video/out/opengl/angle_dynamic.c", "egl-angle"), ("video/out/opengl/common.c", "gl"), ("video/out/opengl/context.c", "gl"), ("video/out/opengl/context_android.c", "egl-android"), ("video/out/opengl/context_angle.c", "egl-angle-win32"), ("video/out/opengl/context_cocoa.c", "gl-cocoa"), ("video/out/opengl/context_drm_egl.c", "egl-drm"), ("video/out/opengl/context_dxinterop.c", "gl-dxinterop"), ("video/out/opengl/context_glx.c", "gl-x11"), ("video/out/opengl/context_mali_fbdev.c", "mali-fbdev"), ("video/out/opengl/context_rpi.c", "rpi"), ("video/out/opengl/context_vdpau.c", "vdpau-gl-x11"), ("video/out/opengl/context_wayland.c", "gl-wayland"), ("video/out/opengl/context_win.c", "gl-win32"), ("video/out/opengl/context_x11egl.c", "egl-x11"), ("video/out/opengl/egl_helpers.c", "egl-helpers"), ("video/out/opengl/formats.c", "gl"), ("video/out/opengl/hwdec_cuda.c", "cuda-hwaccel"), ("video/out/opengl/hwdec_d3d11egl.c", "d3d-hwaccel && egl-angle"), ("video/out/opengl/hwdec_d3d11eglrgb.c", "d3d-hwaccel && egl-angle"), ("video/out/opengl/hwdec_drmprime_drm.c", "drmprime && drm"), ("video/out/opengl/hwdec_dxva2egl.c", "d3d9-hwaccel && egl-angle"), ("video/out/opengl/hwdec_dxva2gldx.c", "gl-dxinterop-d3d9"), ("video/out/opengl/hwdec_ios.m", "ios-gl"), ("video/out/opengl/hwdec_osx.c", "videotoolbox-gl"), ("video/out/opengl/hwdec_rpi.c", "rpi"), ("video/out/opengl/hwdec_vaegl.c", "vaapi-egl"), ("video/out/opengl/hwdec_vdpau.c", "vdpau-gl-x11"), ("video/out/opengl/libmpv_gl.c", "gl"), ("video/out/opengl/ra_gl.c", "gl"), ("video/out/opengl/utils.c", "gl"), ("video/out/vo.c"), ("video/out/vo_caca.c", "caca"), ("video/out/vo_direct3d.c", "direct3d"), ("video/out/vo_drm.c", "drm"), ("video/out/vo_gpu.c"), ("video/out/vo_image.c"), ("video/out/vo_lavc.c"), ("video/out/vo_libmpv.c"), ("video/out/vo_mediacodec_embed.c", "android"), ("video/out/vo_null.c"), ("video/out/vo_rpi.c", "rpi"), ("video/out/vo_sdl.c", "sdl2"), ("video/out/vo_tct.c"), ("video/out/vo_vaapi.c", "vaapi-x11 && gpl"), ("video/out/vo_vdpau.c", "vdpau"), ("video/out/vo_x11.c", "x11"), ("video/out/vo_xv.c", "xv"), ("video/out/vo_pixelflut.c"), ("video/out/vo_pixelflut2.c"), ("video/out/vo_pixelflutudp.c"), ("video/out/vo_pixelfluteth0.c"), ("video/out/vo_pixelflutentropia.c"), ("video/out/vo_matelight.c"), ("video/out/vulkan/context.c", "vulkan"), ("video/out/vulkan/context_wayland.c", "vulkan && wayland"), ("video/out/vulkan/context_win.c", "vulkan && win32-desktop"), ("video/out/vulkan/context_xlib.c", "vulkan && x11"), ("video/out/vulkan/formats.c", "vulkan"), ("video/out/vulkan/malloc.c", "vulkan"), ("video/out/vulkan/ra_vk.c", "vulkan"), ("video/out/vulkan/spirv_nvidia.c", "vulkan"), ("video/out/vulkan/utils.c", "vulkan"), ("video/out/w32_common.c", "win32-desktop"), ("video/out/wayland/idle-inhibit-v1.c", "wayland"), ("video/out/wayland/srv-decor.c", "wayland"), ("video/out/wayland/xdg-shell.c", "wayland"), ("video/out/wayland_common.c", "wayland"), ("video/out/win32/displayconfig.c", "win32-desktop"), ("video/out/win32/droptarget.c", "win32-desktop"), ("video/out/win_state.c"), ("video/out/x11_common.c", "x11"), ("video/sws_utils.c"), ("video/vaapi.c", "vaapi"), ("video/vdpau.c", "vdpau"), ("video/vdpau_mixer.c", "vdpau"), ## osdep (getch2_c), ("osdep/io.c"), ("osdep/threads.c"), ("osdep/timer.c"), (timer_c), ("osdep/polldev.c", "posix"), ("osdep/android/posix-spawn.c", "android"), ("osdep/android/strnlen.c", "android"), ("osdep/ar/HIDRemote.m", "apple-remote"), ("osdep/glob-win.c", "glob-win32"), ("osdep/macosx_application.m", "cocoa"), ("osdep/macosx_events.m", "cocoa"), ("osdep/macosx_menubar.m", "cocoa"), ("osdep/macosx_touchbar.m", "macos-touchbar"), ("osdep/mpv.rc", "win32-executable"), ("osdep/path-macosx.m", "cocoa"), ("osdep/path-unix.c"), ("osdep/path-uwp.c", "uwp"), ("osdep/path-win.c", "win32-desktop"), ("osdep/semaphore_osx.c"), ("osdep/subprocess.c"), (subprocess_c), ("osdep/w32_keyboard.c", "os-cygwin"), ("osdep/w32_keyboard.c", "os-win32"), ("osdep/win32/pthread.c", "win32-internal-pthreads"), ("osdep/windows_utils.c", "os-cygwin"), ("osdep/windows_utils.c", "os-win32"), ## tree_allocator "ta/ta.c", "ta/ta_talloc.c", "ta/ta_utils.c" ] if ctx.dependency_satisfied('win32-executable'): from waflib import TaskGen TaskGen.declare_chain(name='windres', rule='${WINDRES} ${WINDRES_FLAGS} ${SRC} ${TGT}', ext_in='.rc', ext_out='-rc.o', color='PINK') ctx.env.WINDRES_FLAGS = [ '--include-dir={0}'.format(ctx.bldnode.abspath()), '--include-dir={0}'.format(ctx.srcnode.abspath()), '--codepage=65001' # Unicode codepage ] for node in 'osdep/mpv.exe.manifest etc/mpv-icon.ico'.split(): ctx.add_manual_dependency(ctx.path.find_node('osdep/mpv.rc'), ctx.path.find_node(node)) version = ctx.bldnode.find_node('version.h') if version: ctx.add_manual_dependency(ctx.path.find_node('osdep/mpv.rc'), version) if ctx.dependency_satisfied('cplayer') or ctx.dependency_satisfied('test'): ctx( target="objects", source=ctx.filtered_sources(sources), use=ctx.dependencies_use(), includes=_all_includes(ctx), features="c", ) syms = False if ctx.dependency_satisfied('cplugins'): syms = True ctx.load("syms") if ctx.dependency_satisfied('cplayer'): ctx( target="mpv", source=main_fn_c, use=ctx.dependencies_use() + ['objects'], add_object="osdep/macOS_swift.o", includes=_all_includes(ctx), features="c cprogram" + (" syms" if syms else ""), export_symbols_def="libmpv/mpv.def", # for syms=True install_path=ctx.env.BINDIR) for f in ['mpv.conf', 'input.conf', 'mplayer-input.conf', \ 'restore-old-bindings.conf']: ctx.install_as(os.path.join(ctx.env.DOCDIR, f), os.path.join('etc/', f)) if ctx.env.DEST_OS == 'win32': wrapctx = ctx(target="mpv", source=['osdep/win32-console-wrapper.c'], features="c cprogram", install_path=ctx.env.BINDIR) wrapctx.env.cprogram_PATTERN = "%s.com" wrapflags = ['-municode', '-mconsole'] wrapctx.env.CFLAGS = ctx.env.CFLAGS + wrapflags wrapctx.env.LAST_LINKFLAGS = ctx.env.LAST_LINKFLAGS + wrapflags if ctx.dependency_satisfied('test'): for test in ctx.path.ant_glob("test/*.c"): ctx( target=os.path.splitext(test.srcpath())[0], source=test.srcpath(), use=ctx.dependencies_use() + ['objects'], includes=_all_includes(ctx), features="c cprogram", install_path=None, ) build_shared = ctx.dependency_satisfied('libmpv-shared') build_static = ctx.dependency_satisfied('libmpv-static') if build_shared or build_static: if build_shared: waftoolsdir = os.path.join(os.path.dirname(__file__), "waftools") ctx.load("syms", tooldir=waftoolsdir) vre = '#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION\((.*), (.*)\)' libmpv_header = ctx.path.find_node("libmpv/client.h").read() major, minor = re.search(vre, libmpv_header).groups() libversion = major + '.' + minor + '.0' def _build_libmpv(shared): features = "c " if shared: features += "cshlib syms" else: features += "cstlib" libmpv_kwargs = { "target": "mpv", "source": ctx.filtered_sources(sources), "use": ctx.dependencies_use(), "add_object": "osdep/macOS_swift.o", "includes": [ctx.bldnode.abspath(), ctx.srcnode.abspath()] + \ ctx.dependencies_includes(), "features": features, "export_symbols_def": "libmpv/mpv.def", "install_path": ctx.env.LIBDIR, "install_path_implib": ctx.env.LIBDIR, } if shared and ctx.dependency_satisfied('android'): # for Android we just add the linker flag without version # as we still need the SONAME for proper linkage. # (LINKFLAGS logic taken from waf's apply_vnum in ccroot.py) v = ctx.env.SONAME_ST % 'libmpv.so' ctx.env.append_value('LINKFLAGS', v.split()) else: # for all other configurations we want SONAME to be used libmpv_kwargs["vnum"] = libversion if shared and ctx.env.DEST_OS == 'win32': libmpv_kwargs["install_path"] = ctx.env.BINDIR ctx(**libmpv_kwargs) if build_shared: _build_libmpv(True) if build_static: _build_libmpv(False) def get_deps(): res = [] for k in ctx.env.keys(): if (k.startswith("LIB_") and k != "LIB_ST") \ or (k.startswith("STLIB_") and k != "STLIB_ST" and k != "STLIB_MARKER"): for l in ctx.env[k]: if l in res: res.remove(l) res.append(l) return " ".join(["-l" + l for l in res]) ctx( target='libmpv/mpv.pc', source='libmpv/mpv.pc.in', features='subst', PREFIX=ctx.env.PREFIX, LIBDIR=ctx.env.LIBDIR, INCDIR=ctx.env.INCLUDEDIR, VERSION=libversion, PRIV_LIBS=get_deps(), ) headers = [ "client.h", "qthelper.hpp", "opengl_cb.h", "render.h", "render_gl.h", "stream_cb.h" ] for f in headers: ctx.install_as(ctx.env.INCLUDEDIR + '/mpv/' + f, 'libmpv/' + f) ctx.install_as(ctx.env.LIBDIR + '/pkgconfig/mpv.pc', 'libmpv/mpv.pc') if ctx.dependency_satisfied('html-build'): _build_html(ctx) if ctx.dependency_satisfied('manpage-build'): _build_man(ctx) if ctx.dependency_satisfied('pdf-build'): _build_pdf(ctx) if ctx.dependency_satisfied('cplayer'): if ctx.dependency_satisfied('zsh-comp'): ctx.zshcomp(target="etc/_mpv", source="TOOLS/zsh.pl") ctx.install_files(ctx.env.ZSHDIR, ['etc/_mpv']) ctx.install_files(ctx.env.DATADIR + '/applications', ['etc/mpv.desktop']) ctx.install_files(ctx.env.CONFDIR, ['etc/encoding-profiles.conf']) for size in '16x16 32x32 64x64'.split(): ctx.install_as( ctx.env.DATADIR + '/icons/hicolor/' + size + '/apps/mpv.png', 'etc/mpv-icon-8bit-' + size + '.png') ctx.install_as( ctx.env.DATADIR + '/icons/hicolor/scalable/apps/mpv.svg', 'etc/mpv-gradient.svg') ctx.install_files(ctx.env.DATADIR + '/icons/hicolor/symbolic/apps', ['etc/mpv-symbolic.svg'])
tool.process_file(infile, outfile) except fypp.FyppError as err: msg = ("%s [%s:%d]" % (err.msg, err.fname, err.span[0] + 1)) raise FyppPreprocError(msg) return 0 def scan(self): parser = FyppIncludeParser(self.generator.includes_nodes) nodes, names = parser.parse(self.inputs[0]) if Logs.verbose: Logs.debug('deps: deps for %r: %r; unresolved: %r' % (self.inputs, nodes, names)) return (nodes, names) TaskGen.feature('fypp')(Tools.ccroot.propagate_uselib_vars) TaskGen.feature('fypp')(Tools.ccroot.apply_incpaths) ################################################################################ # Helper routines ################################################################################ class FyppIncludeParser(object): '''Parser for include directives in files preprocessed by Fypp. It can not handle conditional includes. ''' # Include file pattern, opening and closing quoute must be replaced inside. INCLUDE_PATTERN = re.compile(r'^\s*#:include\s*(["\'])(?P<incfile>.+?)\1',
if not env.PROC_TNS_ADMIN: env.PROC_TNS_ADMIN = cnf.options.tns_admin if not env.PROC_CONNECTION: env.PROC_CONNECTION = cnf.options.connection cnf.find_program("proc", var="PROC", path_list=env.PROC_ORACLE + path.sep + "bin") def proc(tsk): env = tsk.env gen = tsk.generator bld = gen.bld inc_nodes = gen.to_incnodes(Utils.to_list(getattr(gen, "includes", [])) + env["INCLUDES"]) # FIXME the if-else construct will not work in python 2 cmd = ( [env.PROC] + ["SQLCHECK=SEMANTICS"] + (["SYS_INCLUDE=(" + ",".join(env.PROC_INCLUDES) + ")"] if env.PROC_INCLUDES else []) + ["INCLUDE=(" + ",".join([i.bldpath() for i in inc_nodes]) + ")"] + ["userid=" + env.PROC_CONNECTION] + ["INAME=" + tsk.inputs[0].bldpath()] + ["ONAME=" + tsk.outputs[0].bldpath()] ) exec_env = {"ORACLE_HOME": env.PROC_ORACLE, "LD_LIBRARY_PATH": env.PROC_ORACLE + path.sep + "lib"} if env.PROC_TNS_ADMIN: exec_env["TNS_ADMIN"] = env.PROC_TNS_ADMIN return tsk.exec_command(cmd, env=exec_env) TaskGen.declare_chain(name="proc", rule=proc, ext_in=".pc", ext_out=".c")
return self.create_compiled_task('c', node) class c(Task.Task): run_str = '${CC} ${ARCH_ST:ARCH} ${CFLAGS} ${CPPFLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${CC_SRC_F}${SRC} ${CC_TGT_F}${TGT}' vars = ['CCDEPS'] ext_in = ['.h'] scan = c_preproc.scan Task.classes['cc'] = cc = c class cprogram(link_task): run_str = '${LINK_CC} ${LINKFLAGS} ${CCLNK_SRC_F}${SRC} ${CCLNK_TGT_F}${TGT[0].abspath()} ${RPATH_ST:RPATH} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${FRAMEWORK_ST:FRAMEWORK} ${ARCH_ST:ARCH} ${STLIB_MARKER} ${STLIBPATH_ST:STLIBPATH} ${STLIB_ST:STLIB} ${SHLIB_MARKER} ${LIBPATH_ST:LIBPATH} ${LIB_ST:LIB}' ext_out = ['.bin'] vars = ['LINKDEPS'] inst_to = '${BINDIR}' chmod = Utils.O755 class cshlib(cprogram): inst_to = '${LIBDIR}' class cstlib(stlink_task): pass TaskGen.extension('.c')(c_hook)
def declare_chain(self, *k, **kw): """ Wraps :py:func:`waflib.TaskGen.declare_chain` for convenience """ return TaskGen.declare_chain(*k, **kw)
def build(ctx): ctx.load('waf_customizations') ctx.load('generators.sources') ctx.file2string( source="TOOLS/osxbundle/mpv.app/Contents/Resources/icon.icns", target="osdep/macosx_icon.inc") ctx.file2string(source="video/out/x11_icon.bin", target="video/out/x11_icon.inc") ctx.file2string(source="etc/input.conf", target="input/input_conf.h") ctx.file2string(source="sub/osd_font.otf", target="sub/osd_font.h") ctx.file2string(source="video/out/opengl/nnedi3_weights.bin", target="video/out/opengl/nnedi3_weights.inc") lua_files = [ "defaults.lua", "assdraw.lua", "options.lua", "osc.lua", "ytdl_hook.lua" ] for fn in lua_files: fn = "player/lua/" + fn ctx.file2string(source=fn, target=os.path.splitext(fn)[0] + ".inc") ctx.matroska_header(source="demux/ebml.c demux/demux_mkv.c", target="ebml_types.h") ctx.matroska_definitions(source="demux/ebml.c", target="ebml_defs.c") if ctx.env.DEST_OS == 'win32': main_fn_c = 'osdep/main-fn-win.c' elif ctx.dependency_satisfied('cocoa'): main_fn_c = 'osdep/main-fn-cocoa.c' else: main_fn_c = 'osdep/main-fn-unix.c' getch2_c = { 'win32': 'osdep/terminal-win.c', }.get(ctx.env.DEST_OS, "osdep/terminal-unix.c") timer_c = { 'win32': 'osdep/timer-win2.c', 'darwin': 'osdep/timer-darwin.c', }.get(ctx.env.DEST_OS, "osdep/timer-linux.c") sources = [ ## Audio ("audio/audio.c"), ("audio/audio_buffer.c"), ("audio/chmap.c"), ("audio/chmap_sel.c"), ("audio/fmt-conversion.c"), ("audio/format.c"), ("audio/mixer.c"), ("audio/decode/ad_lavc.c"), ("audio/decode/ad_spdif.c"), ("audio/decode/dec_audio.c"), ("audio/filter/af.c"), ("audio/filter/af_channels.c"), ("audio/filter/af_delay.c"), ("audio/filter/af_drc.c"), ("audio/filter/af_equalizer.c"), ("audio/filter/af_format.c"), ("audio/filter/af_lavcac3enc.c"), ("audio/filter/af_lavfi.c"), ("audio/filter/af_lavrresample.c"), ("audio/filter/af_pan.c"), ("audio/filter/af_rubberband.c", "rubberband"), ("audio/filter/af_scaletempo.c"), ("audio/filter/af_volume.c"), ("audio/filter/tools.c"), ("audio/out/ao.c"), ("audio/out/ao_alsa.c", "alsa"), ("audio/out/ao_coreaudio.c", "coreaudio"), ("audio/out/ao_coreaudio_chmap.c", "coreaudio"), ("audio/out/ao_coreaudio_exclusive.c", "coreaudio"), ("audio/out/ao_coreaudio_properties.c", "coreaudio"), ("audio/out/ao_coreaudio_utils.c", "coreaudio"), ("audio/out/ao_jack.c", "jack"), ("audio/out/ao_lavc.c", "encoding"), ("audio/out/ao_null.c"), ("audio/out/ao_openal.c", "openal"), ("audio/out/ao_oss.c", "oss-audio"), ("audio/out/ao_pcm.c"), ("audio/out/ao_pulse.c", "pulse"), ("audio/out/ao_rsound.c", "rsound"), ("audio/out/ao_sdl.c", "sdl1"), ("audio/out/ao_sdl.c", "sdl2"), ("audio/out/ao_sndio.c", "sndio"), ("audio/out/ao_wasapi.c", "wasapi"), ("audio/out/ao_wasapi_utils.c", "wasapi"), ("audio/out/ao_wasapi_changenotify.c", "wasapi"), ("audio/out/pull.c"), ("audio/out/push.c"), ## Core ("common/av_common.c"), ("common/av_log.c"), ("common/codecs.c"), ("common/encode_lavc.c", "encoding"), ("common/common.c"), ("common/tags.c"), ("common/msg.c"), ("common/playlist.c"), ("common/version.c"), ## Demuxers ("demux/codec_tags.c"), ("demux/cue.c"), ("demux/demux.c"), ("demux/demux_cue.c"), ("demux/demux_disc.c"), ("demux/demux_edl.c"), ("demux/demux_lavf.c"), ("demux/demux_libarchive.c", "libarchive"), ("demux/demux_mf.c"), ("demux/demux_mkv.c"), ("demux/demux_mkv_timeline.c"), ("demux/demux_playlist.c"), ("demux/demux_raw.c"), ("demux/demux_rar.c"), ("demux/demux_timeline.c"), ("demux/demux_tv.c", "tv"), ("demux/ebml.c"), ("demux/packet.c"), ("demux/timeline.c"), ## Input ("input/cmd_list.c"), ("input/cmd_parse.c"), ("input/event.c"), ("input/input.c"), ("input/ipc.c", "!mingw"), ("input/keycodes.c"), ("input/pipe-win32.c", "mingw"), ## Misc ("misc/bstr.c"), ("misc/charset_conv.c"), ("misc/dispatch.c"), ("misc/json.c"), ("misc/ring.c"), ("misc/rendezvous.c"), ## Options ("options/m_config.c"), ("options/m_option.c"), ("options/m_property.c"), ("options/options.c"), ("options/parse_commandline.c"), ("options/parse_configfile.c"), ("options/path.c"), ## Player ("player/audio.c"), ("player/client.c"), ("player/command.c"), ("player/configfiles.c"), ("player/external_files.c"), ("player/loadfile.c"), ("player/main.c"), ("player/misc.c"), ("player/lavfi.c"), ("player/lua.c", "lua"), ("player/osd.c"), ("player/playloop.c"), ("player/screenshot.c"), ("player/scripting.c"), ("player/sub.c"), ("player/video.c"), ## Streams ("stream/ai_alsa1x.c", "alsa"), ("stream/ai_oss.c", "oss-audio"), ("stream/ai_sndio.c", "sndio"), ("stream/audio_in.c", "audio-input"), ("stream/cache.c"), ("stream/cache_file.c"), ("stream/cookies.c"), ("stream/dvb_tune.c", "dvbin"), ("stream/frequencies.c", "tv"), ("stream/rar.c"), ("stream/stream.c"), ("stream/stream_avdevice.c"), ("stream/stream_bluray.c", "libbluray"), ("stream/stream_cdda.c", "cdda"), ("stream/stream_dvb.c", "dvbin"), ("stream/stream_dvd.c", "dvdread"), ("stream/stream_dvd_common.c", "dvdread"), ("stream/stream_dvdnav.c", "dvdnav"), ("stream/stream_edl.c"), ("stream/stream_file.c"), ("stream/stream_lavf.c"), ("stream/stream_libarchive.c", "libarchive"), ("stream/stream_memory.c"), ("stream/stream_mf.c"), ("stream/stream_null.c"), ("stream/stream_rar.c"), ("stream/stream_smb.c", "libsmbclient"), ("stream/stream_tv.c", "tv"), ("stream/tv.c", "tv"), ("stream/tvi_dummy.c", "tv"), ("stream/tvi_v4l2.c", "tv-v4l2"), ## Subtitles ("sub/ass_mp.c", "libass"), ("sub/dec_sub.c"), ("sub/draw_bmp.c"), ("sub/img_convert.c"), ("sub/lavc_conv.c"), ("sub/osd.c"), ("sub/osd_dummy.c", "dummy-osd"), ("sub/osd_libass.c", "libass-osd"), ("sub/sd_ass.c", "libass"), ("sub/sd_lavc.c"), ## Video ("video/csputils.c"), ("video/fmt-conversion.c"), ("video/gpu_memcpy.c", "sse4-intrinsics"), ("video/image_writer.c"), ("video/img_format.c"), ("video/mp_image.c"), ("video/mp_image_pool.c"), ("video/sws_utils.c"), ("video/dxva2.c", "dxva2-hwaccel"), ("video/vaapi.c", "vaapi"), ("video/vdpau.c", "vdpau"), ("video/vdpau_mixer.c", "vdpau"), ("video/decode/dec_video.c"), ("video/decode/dxva2.c", "dxva2-hwaccel"), ("video/decode/rpi.c", "rpi"), ("video/decode/vaapi.c", "vaapi-hwaccel"), ("video/decode/vd_lavc.c"), ("video/decode/videotoolbox.c", "videotoolbox-hwaccel"), ("video/decode/vdpau.c", "vdpau-hwaccel"), ("video/filter/vf.c"), ("video/filter/vf_buffer.c"), ("video/filter/vf_crop.c"), ("video/filter/vf_dlopen.c", "dlopen"), ("video/filter/vf_dsize.c"), ("video/filter/vf_eq.c"), ("video/filter/vf_expand.c"), ("video/filter/vf_flip.c"), ("video/filter/vf_format.c"), ("video/filter/vf_gradfun.c"), ("video/filter/vf_lavfi.c"), ("video/filter/vf_mirror.c"), ("video/filter/vf_noformat.c"), ("video/filter/vf_pullup.c"), ("video/filter/vf_rotate.c"), ("video/filter/vf_scale.c"), ("video/filter/vf_stereo3d.c"), ("video/filter/vf_sub.c"), ("video/filter/vf_vapoursynth.c", "vapoursynth-core"), ("video/filter/vf_vavpp.c", "vaapi"), ("video/filter/vf_vdpaupp.c", "vdpau"), ("video/filter/vf_vdpaurb.c", "vdpau"), ("video/filter/vf_yadif.c"), ("video/out/aspect.c"), ("video/out/bitmap_packer.c"), ("video/out/cocoa/video_view.m", "cocoa"), ("video/out/cocoa/events_view.m", "cocoa"), ("video/out/cocoa/window.m", "cocoa"), ("video/out/cocoa_common.m", "cocoa"), ("video/out/dither.c"), ("video/out/filter_kernels.c"), ("video/out/opengl/common.c", "gl"), ("video/out/opengl/context.c", "gl"), ("video/out/opengl/context_angle.c", "egl-angle"), ("video/out/opengl/context_cocoa.c", "gl-cocoa"), ("video/out/opengl/context_drm_egl.c", "egl-drm"), ("video/out/opengl/context_dxinterop.c", "gl-dxinterop"), ("video/out/opengl/context_rpi.c", "rpi"), ("video/out/opengl/context_wayland.c", "gl-wayland"), ("video/out/opengl/context_w32.c", "gl-win32"), ("video/out/opengl/context_x11.c", "gl-x11"), ("video/out/opengl/context_x11egl.c", "egl-x11"), ("video/out/opengl/egl_helpers.c", "egl-helpers"), ("video/out/opengl/hwdec.c", "gl"), ("video/out/opengl/hwdec_dxva2.c", "gl-win32"), ("video/out/opengl/hwdec_dxva2gldx.c", "gl-dxinterop"), ("video/out/opengl/hwdec_vaegl.c", "vaapi-egl"), ("video/out/opengl/hwdec_vaglx.c", "vaapi-glx"), ("video/out/opengl/hwdec_osx.c", "videotoolbox-gl"), ("video/out/opengl/hwdec_vdpau.c", "vdpau-gl-x11"), ("video/out/opengl/lcms.c", "gl"), ("video/out/opengl/nnedi3.c", "gl"), ("video/out/opengl/osd.c", "gl"), ("video/out/opengl/superxbr.c", "gl"), ("video/out/opengl/utils.c", "gl"), ("video/out/opengl/video.c", "gl"), ("video/out/opengl/video_shaders.c", "gl"), ("video/out/vo.c"), ("video/out/vo_caca.c", "caca"), ("video/out/vo_drm.c", "drm"), ("video/out/vo_direct3d.c", "direct3d"), ("video/out/vo_image.c"), ("video/out/vo_lavc.c", "encoding"), ("video/out/vo_rpi.c", "rpi"), ("video/out/vo_null.c"), ("video/out/vo_opengl.c", "gl"), ("video/out/vo_opengl_cb.c", "gl"), ("video/out/vo_sdl.c", "sdl2"), ("video/out/vo_vaapi.c", "vaapi-x11"), ("video/out/vo_vdpau.c", "vdpau"), ("video/out/vo_wayland.c", "wayland"), ("video/out/vo_x11.c", "x11"), ("video/out/vo_xv.c", "xv"), ("video/out/w32_common.c", "win32"), ("video/out/win32/displayconfig.c", "win32"), ("video/out/win32/exclusive_hack.c", "gl-win32"), ("video/out/wayland_common.c", "wayland"), ("video/out/wayland/buffer.c", "wayland"), ("video/out/wayland/memfile.c", "wayland"), ("video/out/win_state.c"), ("video/out/x11_common.c", "x11"), ("video/out/drm_common.c", "drm"), ## osdep (getch2_c), ("osdep/io.c"), ("osdep/timer.c"), (timer_c), ("osdep/threads.c"), ("osdep/ar/HIDRemote.m", "apple-remote"), ("osdep/macosx_application.m", "cocoa"), ("osdep/macosx_events.m", "cocoa"), ("osdep/semaphore_osx.c"), ("osdep/subprocess.c"), ("osdep/subprocess-posix.c", "posix-spawn"), ("osdep/subprocess-win.c", "os-win32"), ("osdep/path-macosx.m", "cocoa"), ("osdep/path-unix.c"), ("osdep/path-win.c", "os-win32"), ("osdep/path-win.c", "os-cygwin"), ("osdep/glob-win.c", "glob-win32-replacement"), ("osdep/w32_keyboard.c", "os-win32"), ("osdep/w32_keyboard.c", "os-cygwin"), ("osdep/windows_utils.c", "win32"), ("osdep/mpv.rc", "win32-executable"), ("osdep/win32/pthread.c", "win32-internal-pthreads"), ("osdep/android/strnlen.c", "android"), ## tree_allocator "ta/ta.c", "ta/ta_talloc.c", "ta/ta_utils.c" ] if ctx.dependency_satisfied('win32-executable'): from waflib import TaskGen TaskGen.declare_chain(name='windres', rule='${WINDRES} ${WINDRES_FLAGS} ${SRC} ${TGT}', ext_in='.rc', ext_out='-rc.o', color='PINK') ctx.env.WINDRES_FLAGS = [ '--include-dir={0}'.format(ctx.bldnode.abspath()), '--include-dir={0}'.format(ctx.srcnode.abspath()) ] for node in 'osdep/mpv.exe.manifest etc/mpv-icon.ico'.split(): ctx.add_manual_dependency(ctx.path.find_node('osdep/mpv.rc'), ctx.path.find_node(node)) version = ctx.bldnode.find_node('version.h') if version: ctx.add_manual_dependency(ctx.path.find_node('osdep/mpv.rc'), version) if ctx.dependency_satisfied('cplayer') or ctx.dependency_satisfied('test'): ctx( target="objects", source=ctx.filtered_sources(sources), use=ctx.dependencies_use(), includes=_all_includes(ctx), features="c", ) if ctx.dependency_satisfied('cplayer'): ctx(target="mpv", source=main_fn_c, use=ctx.dependencies_use() + ['objects'], includes=_all_includes(ctx), features="c cprogram", install_path=ctx.env.BINDIR) for f in ['mpv.conf', 'input.conf', 'mplayer-input.conf', \ 'restore-old-bindings.conf']: ctx.install_as(os.path.join(ctx.env.DOCDIR, f), os.path.join('etc/', f)) if ctx.env.DEST_OS == 'win32': wrapctx = ctx(target="mpv", source=['osdep/win32-console-wrapper.c'], features="c cprogram", install_path=ctx.env.BINDIR) wrapctx.env.cprogram_PATTERN = "%s.com" wrapflags = ['-municode', '-mconsole'] wrapctx.env.CFLAGS = wrapflags wrapctx.env.LAST_LINKFLAGS = wrapflags if ctx.dependency_satisfied('test'): for test in ctx.path.ant_glob("test/*.c"): ctx( target=os.path.splitext(test.srcpath())[0], source=test.srcpath(), use=ctx.dependencies_use() + ['objects'], includes=_all_includes(ctx), features="c cprogram", ) build_shared = ctx.dependency_satisfied('libmpv-shared') build_static = ctx.dependency_satisfied('libmpv-static') if build_shared or build_static: if build_shared: waftoolsdir = os.path.join(os.path.dirname(__file__), "waftools") ctx.load("syms", tooldir=waftoolsdir) vre = '^#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION\((.*), (.*)\)$' libmpv_header = ctx.path.find_node("libmpv/client.h").read() major, minor = re.search(vre, libmpv_header, re.M).groups() libversion = major + '.' + minor + '.0' def _build_libmpv(shared): features = "c " if shared: features += "cshlib syms" else: features += "cstlib" libmpv_kwargs = { "target": "mpv", "source": ctx.filtered_sources(sources), "use": ctx.dependencies_use(), "includes": [ctx.bldnode.abspath(), ctx.srcnode.abspath()] + \ ctx.dependencies_includes(), "features": features, "export_symbols_def": "libmpv/mpv.def", "install_path": ctx.env.LIBDIR, } if not ctx.dependency_satisfied('android'): # for all other configurations we want SONAME to be used libmpv_kwargs["vnum"] = libversion ctx(**libmpv_kwargs) if build_shared: _build_libmpv(True) if build_static: _build_libmpv(False) def get_deps(): res = "" for k in ctx.env.keys(): if k.startswith("LIB_") and k != "LIB_ST": res += " ".join(["-l" + x for x in ctx.env[k]]) + " " return res ctx( target='libmpv/mpv.pc', source='libmpv/mpv.pc.in', features='subst', PREFIX=ctx.env.PREFIX, LIBDIR=ctx.env.LIBDIR, INCDIR=ctx.env.INCDIR, VERSION=libversion, PRIV_LIBS=get_deps(), ) headers = ["client.h", "qthelper.hpp", "opengl_cb.h"] for f in headers: ctx.install_as(ctx.env.INCDIR + '/mpv/' + f, 'libmpv/' + f) ctx.install_as(ctx.env.LIBDIR + '/pkgconfig/mpv.pc', 'libmpv/mpv.pc') if ctx.dependency_satisfied("vf-dlopen-filters"): dlfilters = "telecine tile rectangle framestep ildetect".split() for dlfilter in dlfilters: ctx(target=dlfilter, source=[ 'TOOLS/vf_dlopen/' + dlfilter + '.c', 'TOOLS/vf_dlopen/filterutils.c' ], includes=[ctx.srcnode.abspath() + '/video/filter'], features='c cshlib', install_path=ctx.env.LIBDIR + '/mpv') if ctx.dependency_satisfied('html-build'): _build_html(ctx) if ctx.dependency_satisfied('manpage-build'): _build_man(ctx) if ctx.dependency_satisfied('pdf-build'): _build_pdf(ctx) if ctx.dependency_satisfied('cplayer'): if ctx.dependency_satisfied('zsh-comp'): ctx.zshcomp(target="etc/_mpv") ctx.install_files(ctx.env.ZSHDIR, ['etc/_mpv']) ctx.install_files(ctx.env.DATADIR + '/applications', ['etc/mpv.desktop']) if ctx.dependency_satisfied('encoding'): ctx.install_files(ctx.env.CONFDIR, ['etc/encoding-profiles.conf']) for size in '16x16 32x32 64x64'.split(): ctx.install_as( ctx.env.DATADIR + '/icons/hicolor/' + size + '/apps/mpv.png', 'etc/mpv-icon-8bit-' + size + '.png') ctx.install_as( ctx.env.DATADIR + '/icons/hicolor/scalable/apps/mpv.svg', 'etc/mpv-gradient.svg')
def declare_chain(self, *k, **kw): """ Wrapper for :py:func:`waflib.TaskGen.declare_chain` provided for convenience """ return TaskGen.declare_chain(*k, **kw)
def __call__(self, *k, **kw): kw['bld'] = self ret = TaskGen.task_gen(*k, **kw) self.task_gen_cache_names = {} self.add_to_group(ret, group=kw.get('group', None)) return ret
def declare_chain(self, *k, **kw): return TaskGen.declare_chain(*k, **kw)
name=targetName, target=targetName, basedir='classes', outdir='classes', destfile=libName, compat=compat, dir=bld.path.get_bld(), files=[libName]) jar.install_path = installPath or '${PREFIX}/lib' if have_native_sourcedir: lib = bld(features='%s %sshlib' % (nlang, nlang), includes='%s/include' % native_sourcedir, target='%s.jni-%s' % (modArgs['name'], nlang), env=env.derive(), uselib=uselib, use=uselib_local, source=bld.path.find_dir(native_sourcedir).ant_glob( 'source/*%s' % nsourceExt)) jar.targets_to_add.append(lib) lib.install_path = installPath or '${PREFIX}/lib' return jar # Tell waf to ignore any build.xml files, the 'ant' feature will take care of them. TaskGen.extension('build.xml')(Utils.nada)
#! /usr/bin/env python # encoding: utf-8 # WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file from waflib import TaskGen, Task, Utils from waflib.Tools import c_preproc from waflib.Tools.ccroot import link_task, stlink_task def cxx_hook(self, node): return self.create_compiled_task('cxx', node) TaskGen.extension('.cpp', '.cc', '.cxx', '.C', '.c++')(cxx_hook) if not '.c' in TaskGen.task_gen.mappings: TaskGen.task_gen.mappings['.c'] = TaskGen.task_gen.mappings['.cpp'] class cxx(Task.Task): run_str = '${CXX} ${ARCH_ST:ARCH} ${CXXFLAGS} ${CPPFLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${CXX_SRC_F}${SRC} ${CXX_TGT_F}${TGT}' vars = ['CXXDEPS'] ext_in = ['.h'] scan = c_preproc.scan class cxxprogram(link_task): run_str = '${LINK_CXX} ${LINKFLAGS} ${CXXLNK_SRC_F}${SRC} ${CXXLNK_TGT_F}${TGT[0].abspath()} ${RPATH_ST:RPATH} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${FRAMEWORK_ST:FRAMEWORK} ${ARCH_ST:ARCH} ${STLIB_MARKER} ${STLIBPATH_ST:STLIBPATH} ${STLIB_ST:STLIB} ${SHLIB_MARKER} ${LIBPATH_ST:LIBPATH} ${LIB_ST:LIB}' vars = ['LINKDEPS'] ext_out = ['.bin'] inst_to = '${BINDIR}' chmod = Utils.O755
#!/usr/bin/env python # encoding: utf-8 # Thomas Nagy, 2010 (ita) """ Erlang support """ from waflib import TaskGen TaskGen.declare_chain(name = 'erlc', rule = '${ERLC} ${ERLC_FLAGS} ${SRC[0].abspath()} -o ${TGT[0].name}', reentrant = False, ext_in = '.erl', ext_out = '.beam') def configure(conf): conf.find_program('erlc', var='ERLC') conf.env.ERLC_FLAGS = []
set_def('GO_PLATFORM', platform.machine()) if conf.env.GO_PLATFORM == 'x86_64': set_def('GO_COMPILER', '6g') set_def('GO_LINKER', '6l') elif conf.env.GO_PLATFORM in ('i386', 'i486', 'i586', 'i686'): set_def('GO_COMPILER', '8g') set_def('GO_LINKER', '8l') elif conf.env.GO_PLATFORM == 'arm': set_def('GO_COMPILER', '5g') set_def('GO_LINKER', '5l') set_def('GO_EXTENSION', '.5') if not (conf.env.GO_COMPILER or conf.env.GO_LINKER): raise conf.fatal('Unsupported platform ' + platform.machine()) set_def('GO_PACK', 'gopack') set_def('gopackage_PATTERN', '%s.a') set_def('CPPPATH_ST', '-I%s') set_def('GOMAKE_FLAGS', ['--quiet']) conf.find_program(conf.env.GO_COMPILER, var='GOC') conf.find_program(conf.env.GO_LINKER, var='GOL') conf.find_program(conf.env.GO_PACK, var='GOP') conf.find_program('cgo', var='CGO') TaskGen.feature('go')(process_use) TaskGen.feature('go')(propagate_uselib_vars)
#!/usr/bin/env python # encoding: utf-8 # Ali Sabil, 2007 from waflib import TaskGen TaskGen.declare_chain( name='gob2', rule='${GOB2} -o ${TGT[0].bld_dir()} ${GOB2FLAGS} ${SRC}', ext_in='.gob', ext_out='.c') def configure(conf): conf.find_program('gob2', var='GOB2') conf.env['GOB2FLAGS'] = ''
def build(ctx): ctx.load('waf_customizations') ctx.load('generators.sources') ctx.file2string( source = "TOOLS/osxbundle/mpv.app/Contents/Resources/icon.icns", target = "osdep/macosx_icon.inc") ctx.file2string( source = "video/out/x11_icon.bin", target = "video/out/x11_icon.inc") ctx.file2string( source = "etc/input.conf", target = "input/input_conf.h") ctx.file2string( source = "sub/osd_font.otf", target = "sub/osd_font.h") ctx.file2string( source = "video/out/opengl/nnedi3_weights.bin", target = "video/out/opengl/nnedi3_weights.inc") lua_files = ["defaults.lua", "assdraw.lua", "options.lua", "osc.lua", "ytdl_hook.lua"] for fn in lua_files: fn = "player/lua/" + fn ctx.file2string(source = fn, target = os.path.splitext(fn)[0] + ".inc") ctx.matroska_header( source = "demux/ebml.c demux/demux_mkv.c", target = "ebml_types.h") ctx.matroska_definitions( source = "demux/ebml.c", target = "ebml_defs.c") if ctx.env.DEST_OS == 'win32': main_fn_c = 'osdep/main-fn-win.c' elif ctx.dependency_satisfied('cocoa'): main_fn_c = 'osdep/main-fn-cocoa.c' else: main_fn_c = 'osdep/main-fn-unix.c' getch2_c = { 'win32': 'osdep/terminal-win.c', }.get(ctx.env.DEST_OS, "osdep/terminal-unix.c") timer_c = { 'win32': 'osdep/timer-win2.c', 'darwin': 'osdep/timer-darwin.c', }.get(ctx.env.DEST_OS, "osdep/timer-linux.c") sources = [ ## Audio ( "audio/audio.c" ), ( "audio/audio_buffer.c" ), ( "audio/chmap.c" ), ( "audio/chmap_sel.c" ), ( "audio/fmt-conversion.c" ), ( "audio/format.c" ), ( "audio/mixer.c" ), ( "audio/decode/ad_lavc.c" ), ( "audio/decode/ad_spdif.c" ), ( "audio/decode/dec_audio.c" ), ( "audio/filter/af.c" ), ( "audio/filter/af_channels.c" ), ( "audio/filter/af_delay.c" ), ( "audio/filter/af_drc.c" ), ( "audio/filter/af_equalizer.c" ), ( "audio/filter/af_format.c" ), ( "audio/filter/af_lavcac3enc.c" ), ( "audio/filter/af_lavfi.c", "libavfilter" ), ( "audio/filter/af_lavrresample.c" ), ( "audio/filter/af_pan.c" ), ( "audio/filter/af_rubberband.c", "rubberband" ), ( "audio/filter/af_scaletempo.c" ), ( "audio/filter/af_volume.c" ), ( "audio/filter/tools.c" ), ( "audio/out/ao.c" ), ( "audio/out/ao_alsa.c", "alsa" ), ( "audio/out/ao_coreaudio.c", "coreaudio" ), ( "audio/out/ao_coreaudio_chmap.c", "coreaudio" ), ( "audio/out/ao_coreaudio_exclusive.c", "coreaudio" ), ( "audio/out/ao_coreaudio_properties.c", "coreaudio" ), ( "audio/out/ao_coreaudio_utils.c", "coreaudio" ), ( "audio/out/ao_dsound.c", "dsound" ), ( "audio/out/ao_jack.c", "jack" ), ( "audio/out/ao_lavc.c", "encoding" ), ( "audio/out/ao_null.c" ), ( "audio/out/ao_openal.c", "openal" ), ( "audio/out/ao_oss.c", "oss-audio" ), ( "audio/out/ao_pcm.c" ), ( "audio/out/ao_pulse.c", "pulse" ), ( "audio/out/ao_rsound.c", "rsound" ), ( "audio/out/ao_sdl.c", "sdl1" ), ( "audio/out/ao_sdl.c", "sdl2" ), ( "audio/out/ao_sndio.c", "sndio" ), ( "audio/out/ao_wasapi.c", "wasapi" ), ( "audio/out/ao_wasapi_utils.c", "wasapi" ), ( "audio/out/ao_wasapi_changenotify.c", "wasapi" ), ( "audio/out/pull.c" ), ( "audio/out/push.c" ), ## Core ( "common/av_common.c" ), ( "common/av_log.c" ), ( "common/codecs.c" ), ( "common/encode_lavc.c", "encoding" ), ( "common/common.c" ), ( "common/tags.c" ), ( "common/msg.c" ), ( "common/playlist.c" ), ( "common/version.c" ), ## Demuxers ( "demux/codec_tags.c" ), ( "demux/cue.c" ), ( "demux/demux.c" ), ( "demux/demux_cue.c" ), ( "demux/demux_disc.c" ), ( "demux/demux_edl.c" ), ( "demux/demux_lavf.c" ), ( "demux/demux_libarchive.c", "libarchive" ), ( "demux/demux_mf.c" ), ( "demux/demux_mkv.c" ), ( "demux/demux_mkv_timeline.c" ), ( "demux/demux_playlist.c" ), ( "demux/demux_raw.c" ), ( "demux/demux_rar.c" ), ( "demux/demux_subreader.c" ), ( "demux/demux_tv.c", "tv" ), ( "demux/ebml.c" ), ( "demux/packet.c" ), ( "demux/timeline.c" ), ## Input ( "input/cmd_list.c" ), ( "input/cmd_parse.c" ), ( "input/event.c" ), ( "input/input.c" ), ( "input/ipc.c", "!mingw" ), ( "input/keycodes.c" ), ( "input/pipe-win32.c", "waio" ), ## Misc ( "misc/bstr.c" ), ( "misc/charset_conv.c" ), ( "misc/dispatch.c" ), ( "misc/json.c" ), ( "misc/ring.c" ), ( "misc/rendezvous.c" ), ## Options ( "options/m_config.c" ), ( "options/m_option.c" ), ( "options/m_property.c" ), ( "options/options.c" ), ( "options/parse_commandline.c" ), ( "options/parse_configfile.c" ), ( "options/path.c" ), ## Player ( "player/audio.c" ), ( "player/client.c" ), ( "player/command.c" ), ( "player/configfiles.c" ), ( "player/external_files.c" ), ( "player/loadfile.c" ), ( "player/main.c" ), ( "player/misc.c" ), ( "player/lua.c", "lua" ), ( "player/osd.c" ), ( "player/playloop.c" ), ( "player/screenshot.c" ), ( "player/scripting.c" ), ( "player/sub.c" ), ( "player/video.c" ), ## Streams ( "stream/ai_alsa1x.c", "alsa" ), ( "stream/ai_oss.c", "oss-audio" ), ( "stream/ai_sndio.c", "sndio" ), ( "stream/audio_in.c", "audio-input" ), ( "stream/cache.c" ), ( "stream/cache_file.c" ), ( "stream/cookies.c" ), ( "stream/dvb_tune.c", "dvbin" ), ( "stream/frequencies.c", "tv" ), ( "stream/rar.c" ), ( "stream/stream.c" ), ( "stream/stream_avdevice.c" ), ( "stream/stream_bluray.c", "libbluray" ), ( "stream/stream_cdda.c", "cdda" ), ( "stream/stream_dvb.c", "dvbin" ), ( "stream/stream_dvd.c", "dvdread" ), ( "stream/stream_dvd_common.c", "dvdread" ), ( "stream/stream_dvdnav.c", "dvdnav" ), ( "stream/stream_edl.c" ), ( "stream/stream_file.c" ), ( "stream/stream_lavf.c" ), ( "stream/stream_libarchive.c", "libarchive" ), ( "stream/stream_memory.c" ), ( "stream/stream_mf.c" ), ( "stream/stream_null.c" ), ( "stream/stream_pvr.c", "pvr" ), ( "stream/stream_rar.c" ), ( "stream/stream_smb.c", "libsmbclient" ), ( "stream/stream_tv.c", "tv" ), ( "stream/tv.c", "tv" ), ( "stream/tvi_dummy.c", "tv" ), ( "stream/tvi_v4l2.c", "tv-v4l2"), ## Subtitles ( "sub/ass_mp.c", "libass"), ( "sub/dec_sub.c" ), ( "sub/draw_bmp.c" ), ( "sub/img_convert.c" ), ( "sub/osd.c" ), ( "sub/osd_dummy.c", "dummy-osd" ), ( "sub/osd_libass.c", "libass-osd" ), ( "sub/sd_ass.c", "libass" ), ( "sub/sd_lavc.c" ), ( "sub/sd_lavc_conv.c" ), ( "sub/sd_lavf_srt.c" ), ( "sub/sd_microdvd.c" ), ( "sub/sd_movtext.c" ), ( "sub/sd_srt.c" ), ## Video ( "video/csputils.c" ), ( "video/fmt-conversion.c" ), ( "video/gpu_memcpy.c", "sse4-intrinsics" ), ( "video/image_writer.c" ), ( "video/img_format.c" ), ( "video/mp_image.c" ), ( "video/mp_image_pool.c" ), ( "video/sws_utils.c" ), ( "video/vaapi.c", "vaapi" ), ( "video/vdpau.c", "vdpau" ), ( "video/vdpau_mixer.c", "vdpau" ), ( "video/decode/dec_video.c"), ( "video/decode/dxva2.c", "dxva2-hwaccel" ), ( "video/decode/rpi.c", "rpi" ), ( "video/decode/vaapi.c", "vaapi-hwaccel" ), ( "video/decode/vd_lavc.c" ), ( "video/decode/videotoolbox.c", "videotoolbox-hwaccel" ), ( "video/decode/vdpau.c", "vdpau-hwaccel" ), ( "video/filter/vf.c" ), ( "video/filter/vf_buffer.c" ), ( "video/filter/vf_crop.c" ), ( "video/filter/vf_canny.c", "opencv" ), ( "video/filter/vf_vector.c", "opencv" ), ( "video/filter/vf_vectorraster.c" ), ( "video/filter/vf_dlopen.c", "dlopen" ), ( "video/filter/vf_dsize.c" ), ( "video/filter/vf_eq.c" ), ( "video/filter/vf_expand.c" ), ( "video/filter/vf_flip.c" ), ( "video/filter/vf_format.c" ), ( "video/filter/vf_gradfun.c", "libavfilter"), ( "video/filter/vf_lavfi.c", "libavfilter"), ( "video/filter/vf_mirror.c", "libavfilter"), ( "video/filter/vf_noformat.c" ), ( "video/filter/vf_pullup.c", "libavfilter"), ( "video/filter/vf_rotate.c", "libavfilter"), ( "video/filter/vf_scale.c" ), ( "video/filter/vf_stereo3d.c", "libavfilter"), ( "video/filter/vf_sub.c" ), ( "video/filter/vf_vapoursynth.c", "vapoursynth-core" ), ( "video/filter/vf_vavpp.c", "vaapi"), ( "video/filter/vf_vdpaupp.c", "vdpau" ), ( "video/filter/vf_vdpaurb.c", "vdpau" ), ( "video/filter/vf_yadif.c", "libavfilter"), ( "video/out/aspect.c" ), ( "video/out/bitmap_packer.c" ), ( "video/out/cocoa/video_view.m", "cocoa" ), ( "video/out/cocoa/events_view.m", "cocoa" ), ( "video/out/cocoa/window.m", "cocoa" ), ( "video/out/cocoa_common.m", "cocoa" ), ( "video/out/dither.c" ), ( "video/out/filter_kernels.c" ), ( "video/out/opengl/cocoa.c", "gl-cocoa" ), ( "video/out/opengl/common.c", "gl" ), ( "video/out/opengl/rpi.c", "rpi" ), ( "video/out/opengl/hwdec.c", "gl" ), ( "video/out/opengl/hwdec_dxva2.c", "gl-win32" ), ( "video/out/opengl/hwdec_vaegl.c", "vaapi-egl" ), ( "video/out/opengl/hwdec_vaglx.c", "vaapi-glx" ), ( "video/out/opengl/hwdec_osx.c", "videotoolbox-gl" ), ( "video/out/opengl/hwdec_vdpau.c", "vdpau-gl-x11" ), ( "video/out/opengl/lcms.c", "gl" ), ( "video/out/opengl/nnedi3.c", "gl" ), ( "video/out/opengl/osd.c", "gl" ), ( "video/out/opengl/superxbr.c", "gl" ), ( "video/out/opengl/utils.c", "gl" ), ( "video/out/opengl/video.c", "gl" ), ( "video/out/opengl/video_shaders.c", "gl" ), ( "video/out/opengl/w32.c", "gl-win32" ), ( "video/out/opengl/wayland.c", "gl-wayland" ), ( "video/out/opengl/x11.c", "gl-x11" ), ( "video/out/opengl/x11egl.c", "egl-x11" ), ( "video/out/opengl/drm_egl.c", "egl-drm" ), ( "video/out/vo.c" ), ( "video/out/vo_caca.c", "caca" ), ( "video/out/vo_drm.c", "drm" ), ( "video/out/vo_direct3d.c", "direct3d" ), ( "video/out/vo_image.c" ), ( "video/out/vo_lavc.c", "encoding" ), ( "video/out/vo_rpi.c", "rpi" ), ( "video/out/vo_null.c" ), ( "video/out/vo_opengl.c", "gl" ), ( "video/out/vo_opengl_cb.c", "gl" ), ( "video/out/vo_sdl.c", "sdl2" ), ( "video/out/vo_vaapi.c", "vaapi-x11" ), ( "video/out/vo_vdpau.c", "vdpau" ), ( "video/out/vo_wayland.c", "wayland" ), ( "video/out/vo_x11.c" , "x11" ), ( "video/out/vo_xv.c", "xv" ), ( "video/out/vo_tkkr.c" ), ( "video/out/w32_common.c", "win32" ), ( "video/out/win32/displayconfig.c", "win32" ), ( "video/out/wayland_common.c", "wayland" ), ( "video/out/wayland/buffer.c", "wayland" ), ( "video/out/wayland/memfile.c", "wayland" ), ( "video/out/win_state.c"), ( "video/out/x11_common.c", "x11" ), ( "video/out/drm_common.c", "drm" ), ## osdep ( getch2_c ), ( "osdep/io.c" ), ( "osdep/timer.c" ), ( timer_c ), ( "osdep/threads.c" ), ( "osdep/ar/HIDRemote.m", "apple-remote" ), ( "osdep/macosx_application.m", "cocoa" ), ( "osdep/macosx_events.m", "cocoa" ), ( "osdep/semaphore_osx.c" ), ( "osdep/subprocess.c" ), ( "osdep/subprocess-posix.c", "posix-spawn" ), ( "osdep/subprocess-win.c", "os-win32" ), ( "osdep/path-macosx.m", "cocoa" ), ( "osdep/path-unix.c"), ( "osdep/path-win.c", "os-win32" ), ( "osdep/path-win.c", "os-cygwin" ), ( "osdep/glob-win.c", "glob-win32-replacement" ), ( "osdep/w32_keyboard.c", "os-win32" ), ( "osdep/w32_keyboard.c", "os-cygwin" ), ( "osdep/mpv.rc", "win32-executable" ), ( "osdep/win32/pthread.c", "win32-internal-pthreads"), ## tree_allocator "ta/ta.c", "ta/ta_talloc.c", "ta/ta_utils.c" ] if ctx.dependency_satisfied('win32-executable'): from waflib import TaskGen TaskGen.declare_chain( name = 'windres', rule = '${WINDRES} ${WINDRES_FLAGS} ${SRC} ${TGT}', ext_in = '.rc', ext_out = '-rc.o', color = 'PINK') ctx.env.WINDRES_FLAGS = [ '--include-dir={0}'.format(ctx.bldnode.abspath()), '--include-dir={0}'.format(ctx.srcnode.abspath()) ] for node in 'osdep/mpv.exe.manifest etc/mpv-icon.ico'.split(): ctx.add_manual_dependency( ctx.path.find_node('osdep/mpv.rc'), ctx.path.find_node(node)) version = ctx.bldnode.find_node('version.h') if version: ctx.add_manual_dependency( ctx.path.find_node('osdep/mpv.rc'), version) if ctx.dependency_satisfied('cplayer') or ctx.dependency_satisfied('test'): ctx( target = "objects", source = ctx.filtered_sources(sources), use = ctx.dependencies_use(), includes = _all_includes(ctx), features = "c", ) if ctx.dependency_satisfied('cplayer'): ctx( target = "mpv", source = main_fn_c, use = ctx.dependencies_use() + ['objects'], includes = _all_includes(ctx), features = "c cprogram", install_path = ctx.env.BINDIR ) for f in ['example.conf', 'input.conf', 'mplayer-input.conf', \ 'restore-old-bindings.conf']: ctx.install_as(os.path.join(ctx.env.DOCDIR, f), os.path.join('etc/', f)) if ctx.env.DEST_OS == 'win32': wrapctx = ctx( target = "mpv", source = ['osdep/win32-console-wrapper.c'], features = "c cprogram", install_path = ctx.env.BINDIR ) wrapctx.env.cprogram_PATTERN = "%s.com" wrapflags = ['-municode', '-mconsole'] wrapctx.env.CFLAGS = wrapflags wrapctx.env.LAST_LINKFLAGS = wrapflags if ctx.dependency_satisfied('test'): for test in ctx.path.ant_glob("test/*.c"): ctx( target = os.path.splitext(test.srcpath())[0], source = test.srcpath(), use = ctx.dependencies_use() + ['objects'], includes = _all_includes(ctx), features = "c cprogram", ) build_shared = ctx.dependency_satisfied('libmpv-shared') build_static = ctx.dependency_satisfied('libmpv-static') if build_shared or build_static: if build_shared: waftoolsdir = os.path.join(os.path.dirname(__file__), "waftools") ctx.load("syms", tooldir=waftoolsdir) vre = '^#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION\((.*), (.*)\)$' libmpv_header = ctx.path.find_node("libmpv/client.h").read() major, minor = re.search(vre, libmpv_header, re.M).groups() libversion = major + '.' + minor + '.0' def _build_libmpv(shared): features = "c " if shared: features += "cshlib syms" else: features += "cstlib" ctx( target = "mpv", source = ctx.filtered_sources(sources), use = ctx.dependencies_use(), includes = [ctx.bldnode.abspath(), ctx.srcnode.abspath()] + \ ctx.dependencies_includes(), features = features, export_symbols_def = "libmpv/mpv.def", install_path = ctx.env.LIBDIR, vnum = libversion, ) if build_shared: _build_libmpv(True) if build_static: _build_libmpv(False) def get_deps(): res = "" for k in ctx.env.keys(): if k.startswith("LIB_") and k != "LIB_ST": res += " ".join(["-l" + x for x in ctx.env[k]]) + " " return res ctx( target = 'libmpv/mpv.pc', source = 'libmpv/mpv.pc.in', features = 'subst', PREFIX = ctx.env.PREFIX, LIBDIR = ctx.env.LIBDIR, INCDIR = ctx.env.INCDIR, VERSION = libversion, PRIV_LIBS = get_deps(), ) headers = ["client.h", "qthelper.hpp", "opengl_cb.h"] for f in headers: ctx.install_as(ctx.env.INCDIR + '/mpv/' + f, 'libmpv/' + f) ctx.install_as(ctx.env.LIBDIR + '/pkgconfig/mpv.pc', 'libmpv/mpv.pc') if ctx.dependency_satisfied("vf-dlopen-filters"): dlfilters = "telecine tile rectangle framestep ildetect".split() for dlfilter in dlfilters: ctx( target = dlfilter, source = ['TOOLS/vf_dlopen/'+dlfilter+'.c', 'TOOLS/vf_dlopen/filterutils.c'], includes = [ctx.srcnode.abspath() + '/video/filter'], features = 'c cshlib', install_path = ctx.env.LIBDIR + '/mpv' ) if ctx.dependency_satisfied('manpage-build'): _build_man(ctx) if ctx.dependency_satisfied('pdf-build'): _build_pdf(ctx) if ctx.dependency_satisfied('cplayer'): if ctx.dependency_satisfied('zsh-comp'): ctx.zshcomp(target = "etc/_mpv") ctx.install_files( ctx.env.ZSHDIR, ['etc/_mpv']) ctx.install_files( ctx.env.DATADIR + '/applications', ['etc/mpv.desktop'] ) ctx.install_files(ctx.env.CONFDIR, ['etc/encoding-profiles.conf'] ) for size in '16x16 32x32 64x64'.split(): ctx.install_as( ctx.env.DATADIR + '/icons/hicolor/' + size + '/apps/mpv.png', 'etc/mpv-icon-8bit-' + size + '.png')
def proc(tsk): env = tsk.env gen = tsk.generator inc_nodes = gen.to_incnodes( Utils.to_list(getattr(gen, "includes", [])) + env["INCLUDES"]) cmd = ([env.PROC] + ["SQLCHECK=SEMANTICS"] + (["SYS_INCLUDE=(" + ",".join(env.PROC_INCLUDES) + ")"] if env.PROC_INCLUDES else []) + ["INCLUDE=(" + ",".join([i.bldpath() for i in inc_nodes]) + ")"] + ["userid=" + env.PROC_CONNECTION] + ["INAME=" + tsk.inputs[0].bldpath()] + ["ONAME=" + tsk.outputs[0].bldpath()]) exec_env = { "ORACLE_HOME": env.PROC_ORACLE, "LD_LIBRARY_PATH": env.PROC_ORACLE + path.sep + "lib", } if env.PROC_TNS_ADMIN: exec_env["TNS_ADMIN"] = env.PROC_TNS_ADMIN return tsk.exec_command(cmd, env=exec_env) TaskGen.declare_chain( name="proc", rule=proc, ext_in=".pc", ext_out=".c", )
def proc(tsk): env = tsk.env gen = tsk.generator inc_nodes = gen.to_incnodes( Utils.to_list(getattr(gen, 'includes', [])) + env['INCLUDES']) # FIXME the if-else construct will not work in python 2 cmd = ([env.PROC] + ['SQLCHECK=SEMANTICS'] + (['SYS_INCLUDE=(' + ','.join(env.PROC_INCLUDES) + ')'] if env.PROC_INCLUDES else []) + ['INCLUDE=(' + ','.join([i.bldpath() for i in inc_nodes]) + ')'] + ['userid=' + env.PROC_CONNECTION] + ['INAME=' + tsk.inputs[0].bldpath()] + ['ONAME=' + tsk.outputs[0].bldpath()]) exec_env = { 'ORACLE_HOME': env.PROC_ORACLE, 'LD_LIBRARY_PATH': env.PROC_ORACLE + path.sep + 'lib', } if env.PROC_TNS_ADMIN: exec_env['TNS_ADMIN'] = env.PROC_TNS_ADMIN return tsk.exec_command(cmd, env=exec_env) TaskGen.declare_chain( name='proc', rule=proc, ext_in='.pc', ext_out='.c', )
def __call__(self, *k, **kw): kw["bld"] = self ret = TaskGen.task_gen(*k, **kw) self.task_gen_cache_names = {} self.add_to_group(ret, group=kw.get("group", None)) return ret
def after(*k): k = [repl.get(key, key) for key in k] return TaskGen.after_method(*k)
#! /usr/bin/env python # encoding: utf-8 # WARNING! All changes made to this file will be lost! from waflib import TaskGen,Utils TaskGen.declare_chain(name='luac',rule='${LUAC} -s -o ${TGT} ${SRC}',ext_in='.lua',ext_out='.luac',reentrant=False) def init_lua(self): self.default_chmod=Utils.O755 def configure(conf): conf.find_program('luac',var='LUAC') TaskGen.feature('lua')(init_lua)
def enhance_lib(): """ Modifies existing classes and methods to enable error verification """ for m in meths_typos: replace(m) # catch '..' in ant_glob patterns def ant_glob(self, *k, **kw): if k: lst = Utils.to_list(k[0]) for pat in lst: sp = pat.split('/') if '..' in sp: Logs.error( "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'", k[0]) if '.' in sp: Logs.error( "In ant_glob pattern %r: '.' means 'one dot', not 'current directory'", k[0]) if kw.get('remove', True): try: if self.is_child_of(self.ctx.bldnode) and not kw.get('quiet'): Logs.error( 'Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)', self) except AttributeError: pass return self.old_ant_glob(*k, **kw) Node.Node.old_ant_glob = Node.Node.ant_glob Node.Node.ant_glob = ant_glob # catch conflicting ext_in/ext_out/before/after declarations old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error('Contradictory order constraints in classes %r %r', t1, t2) return ret Task.is_before = is_before # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose # so we only issue a warning def check_err_features(self): lst = self.to_list(self.features) if 'shlib' in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in ('c', 'cxx', 'd', 'fc'): if not x in lst and lst and lst[0] in [ x + y for y in ('program', 'shlib', 'stlib') ]: Logs.error('%r features is probably missing %r', self, x) TaskGen.feature('*')(check_err_features) # check for erroneous order constraints def check_err_order(self): if not hasattr(self, 'rule') and not 'subst' in Utils.to_list( self.features): for x in ('before', 'after', 'ext_in', 'ext_out'): if hasattr(self, x): Logs.warn( 'Erroneous order constraint %r on non-rule based task generator %r', x, self) else: for x in ('before', 'after'): for y in self.to_list(getattr(self, x, [])): if not Task.classes.get(y): Logs.error( 'Erroneous order constraint %s=%r on %r (no such class)', x, y, self) TaskGen.feature('*')(check_err_order) # check for @extension used with @feature/@before_method/@after_method def check_compile(self): check_invalid_constraints(self) try: ret = self.orig_compile() finally: check_same_targets(self) return ret Build.BuildContext.orig_compile = Build.BuildContext.compile Build.BuildContext.compile = check_compile # check for invalid build groups #914 def use_rec(self, name, **kw): try: y = self.bld.get_tgen_by_name(name) except Errors.WafError: pass else: idx = self.bld.get_group_idx(self) odx = self.bld.get_group_idx(y) if odx > idx: msg = "Invalid 'use' across build groups:" if Logs.verbose > 1: msg += '\n target %r\n uses:\n %r' % (self, y) else: msg += " %r uses %r (try 'waf -v -v' for the full error)" % ( self.name, name) raise Errors.WafError(msg) self.orig_use_rec(name, **kw) TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec TaskGen.task_gen.use_rec = use_rec # check for env.append def _getattr(self, name, default=None): if name == 'append' or name == 'add': raise Errors.WafError( 'env.append and env.add do not exist: use env.append_value/env.append_unique' ) elif name == 'prepend': raise Errors.WafError( 'env.prepend does not exist: use env.prepend_value') if name in self.__slots__: return super(ConfigSet.ConfigSet, self).__getattr__(name, default) else: return self[name] ConfigSet.ConfigSet.__getattr__ = _getattr
#! /usr/bin/env python # encoding: utf-8 # WARNING! Do not edit! http://waf.googlecode.com/svn/docs/wafbook/single.html#_obtaining_the_waf_file from waflib import TaskGen,Task,Utils from waflib.Tools import c_preproc from waflib.Tools.ccroot import link_task,stlink_task def c_hook(self,node): return self.create_compiled_task('c',node) class c(Task.Task): run_str='${CC} ${ARCH_ST:ARCH} ${CFLAGS} ${CPPFLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${CC_SRC_F}${SRC} ${CC_TGT_F}${TGT}' vars=['CCDEPS'] ext_in=['.h'] scan=c_preproc.scan Task.classes['cc']=cc=c class cprogram(link_task): run_str='${LINK_CC} ${CCLNK_SRC_F}${SRC} ${CCLNK_TGT_F}${TGT[0].abspath()} ${RPATH_ST:RPATH} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${FRAMEWORK_ST:FRAMEWORK} ${ARCH_ST:ARCH} ${STLIB_MARKER} ${STLIBPATH_ST:STLIBPATH} ${STLIB_ST:STLIB} ${SHLIB_MARKER} ${LIBPATH_ST:LIBPATH} ${LIB_ST:LIB} ${LINKFLAGS}' ext_out=['.bin'] vars=['LINKDEPS'] inst_to='${BINDIR}' chmod=Utils.O755 class cshlib(cprogram): inst_to='${LIBDIR}' class cstlib(stlink_task): pass TaskGen.extension('.c')(c_hook)
def enhance_lib(): for m in meths_typos: replace(m) def ant_glob(self, *k, **kw): if k: lst = Utils.to_list(k[0]) for pat in lst: if '..' in pat.split('/'): Logs.error( "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0]) if kw.get('remove', True): try: if self.is_child_of( self.ctx.bldnode) and not kw.get('quiet', False): Logs.error( 'Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)' % self) except AttributeError: pass return self.old_ant_glob(*k, **kw) Node.Node.old_ant_glob = Node.Node.ant_glob Node.Node.ant_glob = ant_glob old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2)) return ret Task.is_before = is_before def check_err_features(self): lst = self.to_list(self.features) if 'shlib' in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in ('c', 'cxx', 'd', 'fc'): if not x in lst and lst and lst[0] in [ x + y for y in ('program', 'shlib', 'stlib') ]: Logs.error('%r features is probably missing %r' % (self, x)) TaskGen.feature('*')(check_err_features) def check_err_order(self): if not hasattr(self, 'rule') and not 'subst' in Utils.to_list( self.features): for x in ('before', 'after', 'ext_in', 'ext_out'): if hasattr(self, x): Logs.warn( 'Erroneous order constraint %r on non-rule based task generator %r' % (x, self)) else: for x in ('before', 'after'): for y in self.to_list(getattr(self, x, [])): if not Task.classes.get(y, None): Logs.error( 'Erroneous order constraint %s=%r on %r (no such class)' % (x, y, self)) TaskGen.feature('*')(check_err_order) def check_compile(self): check_invalid_constraints(self) try: ret = self.orig_compile() finally: check_same_targets(self) return ret Build.BuildContext.orig_compile = Build.BuildContext.compile Build.BuildContext.compile = check_compile def use_rec(self, name, **kw): try: y = self.bld.get_tgen_by_name(name) except Errors.WafError: pass else: idx = self.bld.get_group_idx(self) odx = self.bld.get_group_idx(y) if odx > idx: msg = "Invalid 'use' across build groups:" if Logs.verbose > 1: msg += '\n target %r\n uses:\n %r' % (self, y) else: msg += " %r uses %r (try 'waf -v -v' for the full error)" % ( self.name, name) raise Errors.WafError(msg) self.orig_use_rec(name, **kw) TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec TaskGen.task_gen.use_rec = use_rec def getattri(self, name, default=None): if name == 'append' or name == 'add': raise Errors.WafError( 'env.append and env.add do not exist: use env.append_value/env.append_unique' ) elif name == 'prepend': raise Errors.WafError( 'env.prepend does not exist: use env.prepend_value') if name in self.__slots__: return object.__getattr__(self, name, default) else: return self[name] ConfigSet.ConfigSet.__getattr__ = getattri
tsk.last_cmd = lst = [] lst.extend(to_list(env.FLEX)) lst.extend(to_list(env.FLEXFLAGS)) inputs = [a.path_from(tsk.get_cwd()) for a in tsk.inputs] if env.FLEX_MSYS: inputs = [x.replace(os.sep, '/') for x in inputs] lst.extend(inputs) lst = [x for x in lst if x] txt = bld.cmd_and_log(lst, cwd=tsk.get_cwd(), env=env.env or None, quiet=0) tsk.outputs[0].write(txt.replace('\r\n', '\n').replace('\r', '\n')) # issue #1207 TaskGen.declare_chain( name='flex', rule=flexfun, # issue #854 ext_in='.l', decider=decide_ext, ) for y in (Build.BuildContext, Build.CleanContext, Build.InstallContext, Build.UninstallContext, Build.ListContext): class tmp(y): variant = 'default' def abspath(self, env=None): if env and hasattr(self, 'children'): return self.get_bld().abspath() return self.old_abspath()
def before(*k): k = [repl.get(key, key) for key in k] return TaskGen.before_method(*k)
def enhance_lib(): """ modify existing classes and methods """ for m in meths_typos: replace(m) # catch '..' in ant_glob patterns def ant_glob(self, *k, **kw): if k: lst=Utils.to_list(k[0]) for pat in lst: if '..' in pat.split('/'): Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0]) if kw.get('remove', True): try: if self.is_child_of(self.ctx.bldnode) and not kw.get('quiet', False): Logs.error('Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)' % self) except AttributeError: pass return self.old_ant_glob(*k, **kw) Node.Node.old_ant_glob = Node.Node.ant_glob Node.Node.ant_glob = ant_glob # catch conflicting ext_in/ext_out/before/after declarations old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2)) return ret Task.is_before = is_before # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose # so we only issue a warning def check_err_features(self): lst = self.to_list(self.features) if 'shlib' in lst: Logs.error('feature shlib -> cshlib, dshlib or cxxshlib') for x in ('c', 'cxx', 'd', 'fc'): if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]: Logs.error('%r features is probably missing %r' % (self, x)) TaskGen.feature('*')(check_err_features) # check for erroneous order constraints def check_err_order(self): if not hasattr(self, 'rule') and not 'subst' in Utils.to_list(self.features): for x in ('before', 'after', 'ext_in', 'ext_out'): if hasattr(self, x): Logs.warn('Erroneous order constraint %r on non-rule based task generator %r' % (x, self)) else: for x in ('before', 'after'): for y in self.to_list(getattr(self, x, [])): if not Task.classes.get(y, None): Logs.error('Erroneous order constraint %s=%r on %r (no such class)' % (x, y, self)) TaskGen.feature('*')(check_err_order) # check for @extension used with @feature/@before_method/@after_method def check_compile(self): check_invalid_constraints(self) try: ret = self.orig_compile() finally: check_same_targets(self) return ret Build.BuildContext.orig_compile = Build.BuildContext.compile Build.BuildContext.compile = check_compile # check for invalid build groups #914 def use_rec(self, name, **kw): try: y = self.bld.get_tgen_by_name(name) except Errors.WafError: pass else: idx = self.bld.get_group_idx(self) odx = self.bld.get_group_idx(y) if odx > idx: msg = "Invalid 'use' across build groups:" if Logs.verbose > 1: msg += '\n target %r\n uses:\n %r' % (self, y) else: msg += " %r uses %r (try 'waf -v -v' for the full error)" % (self.name, name) raise Errors.WafError(msg) self.orig_use_rec(name, **kw) TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec TaskGen.task_gen.use_rec = use_rec # check for env.append def getattri(self, name, default=None): if name == 'append' or name == 'add': raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique') elif name == 'prepend': raise Errors.WafError('env.prepend does not exist: use env.prepend_value') if name in self.__slots__: return object.__getattr__(self, name, default) else: return self[name] ConfigSet.ConfigSet.__getattr__ = getattri
setattr(task_gen, func.__name__, func) for fun_name in k: if not fun_name in task_gen.prec[func.__name__]: task_gen.prec[func.__name__].append(fun_name) fix_fun_doc(func) append_doc(func, 'after', k) return func return deco after.__doc__ = TaskGen.after.__doc__ TaskGen.after = after # replay existing methods TaskGen.taskgen_method(TaskGen.to_nodes) TaskGen.feature('*')(TaskGen.process_source) TaskGen.feature('*')(TaskGen.process_rule) TaskGen.before('process_source')(TaskGen.process_rule) TaskGen.feature('seq')(TaskGen.sequence_order) TaskGen.extension('.pc.in')(TaskGen.add_pcfile) TaskGen.feature('subst')(TaskGen.process_subst) TaskGen.before('process_source', 'process_rule')(TaskGen.process_subst) from waflib.Task import Task Task.__dict__[ 'post_run'].__doc__ = "Update the cache files (executed by threads). Override in subclasses." from waflib import Configure, Build confmeths = []
test.atstr = atstr test.filename = filename test.ut_exec = exec_list + param from waflib.TaskGen import feature, after_method, before_method, task_gen feature('systest')(make_systest) after_method('apply_link')(make_systest) # ASM hooks for the gcc compiler def s_hook(self, node): return self.create_compiled_task('c', node) TaskGen.extension('.S')(s_hook) MKPROM = Task.task_factory('MKPROM', func='${MKPROM} ${_MKPROMFLAGS} -o ${TGT} ${SRC}', color='YELLOW') MKPROM_TSKS = list() def make_prom(self): """Create mkprom task""" elf = self.target if hasattr(self, 'promflags'): promflags = Utils.to_list(self.promflags) if hasattr(self, 'prom'): promname = self.prom
def enhance_lib(): """ Modifies existing classes and methods to enable error verification """ for m in meths_typos: replace(m) # catch '..' in ant_glob patterns def ant_glob(self, *k, **kw): if k: lst = Utils.to_list(k[0]) for pat in lst: sp = pat.split("/") if ".." in sp: Logs.error( "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'", k[0], ) if "." in sp: Logs.error( "In ant_glob pattern %r: '.' means 'one dot', not 'current directory'", k[0], ) return self.old_ant_glob(*k, **kw) Node.Node.old_ant_glob = Node.Node.ant_glob Node.Node.ant_glob = ant_glob # catch ant_glob on build folders def ant_iter( self, accept=None, maxdepth=25, pats=[], dir=False, src=True, remove=True, quiet=False, ): if remove: try: if self.is_child_of(self.ctx.bldnode) and not quiet: quiet = True Logs.error( "Calling ant_glob on build folders (%r) is dangerous: add quiet=True / remove=False", self, ) except AttributeError: pass return self.old_ant_iter(accept, maxdepth, pats, dir, src, remove, quiet) Node.Node.old_ant_iter = Node.Node.ant_iter Node.Node.ant_iter = ant_iter # catch conflicting ext_in/ext_out/before/after declarations old = Task.is_before def is_before(t1, t2): ret = old(t1, t2) if ret and old(t2, t1): Logs.error("Contradictory order constraints in classes %r %r", t1, t2) return ret Task.is_before = is_before # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose # so we only issue a warning def check_err_features(self): lst = self.to_list(self.features) if "shlib" in lst: Logs.error("feature shlib -> cshlib, dshlib or cxxshlib") for x in ("c", "cxx", "d", "fc"): if (not x in lst and lst and lst[0] in [x + y for y in ("program", "shlib", "stlib")]): Logs.error("%r features is probably missing %r", self, x) TaskGen.feature("*")(check_err_features) # check for erroneous order constraints def check_err_order(self): if not hasattr(self, "rule") and not "subst" in Utils.to_list( self.features): for x in ("before", "after", "ext_in", "ext_out"): if hasattr(self, x): Logs.warn( "Erroneous order constraint %r on non-rule based task generator %r", x, self, ) else: for x in ("before", "after"): for y in self.to_list(getattr(self, x, [])): if not Task.classes.get(y): Logs.error( "Erroneous order constraint %s=%r on %r (no such class)", x, y, self, ) TaskGen.feature("*")(check_err_order) # check for @extension used with @feature/@before_method/@after_method def check_compile(self): check_invalid_constraints(self) try: ret = self.orig_compile() finally: check_same_targets(self) return ret Build.BuildContext.orig_compile = Build.BuildContext.compile Build.BuildContext.compile = check_compile # check for invalid build groups #914 def use_rec(self, name, **kw): try: y = self.bld.get_tgen_by_name(name) except Errors.WafError: pass else: idx = self.bld.get_group_idx(self) odx = self.bld.get_group_idx(y) if odx > idx: msg = "Invalid 'use' across build groups:" if Logs.verbose > 1: msg += f"\n target {self!r}\n uses:\n {y!r}" else: msg += f" {self.name!r} uses {name!r} (try 'waf -v -v' for the full error)" raise Errors.WafError(msg) self.orig_use_rec(name, **kw) TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec TaskGen.task_gen.use_rec = use_rec # check for env.append def _getattr(self, name, default=None): if name == "append" or name == "add": raise Errors.WafError( "env.append and env.add do not exist: use env.append_value/env.append_unique" ) elif name == "prepend": raise Errors.WafError( "env.prepend does not exist: use env.prepend_value") if name in self.__slots__: return super(ConfigSet.ConfigSet, self).__getattr__(name, default) else: return self[name] ConfigSet.ConfigSet.__getattr__ = _getattr
shaderFile = open(src, "r") headerFile = open(tgt, "w") headerFile.write("namespace oak {\n") # deduce variable name from filename split = os.path.splitext(os.path.basename(src)) variableName = split[0] + split[1].upper()[1:] headerFile.write("const char *" + variableName + "String = \"") for line in shaderFile: # escape '\' and '"' line = line.replace("\\", "\\\\") line = line.replace("\"", "\\\"") # content, with \n between lines headerFile.write(line.strip() + "\\n") headerFile.write("\";\n") headerFile.write("} // oak namespace\n") shaderFile.close() headerFile.close() return 0 from waflib import TaskGen TaskGen.declare_chain(name = "vertex_shader", rule = build_shader, ext_in = ".vs", ext_out = ".vs.h") TaskGen.declare_chain(name = "fragment_shader", rule = build_shader, ext_in = ".fs", ext_out = ".fs.h")
env = tsk.env gen = tsk.generator bld = gen.bld inc_nodes = gen.to_incnodes( Utils.to_list(getattr(gen, 'includes', [])) + env['INCLUDES']) # FIXME the if-else construct will not work in python 2 cmd = ([env.PROC] + ['SQLCHECK=SEMANTICS'] + (['SYS_INCLUDE=(' + ','.join(env.PROC_INCLUDES) + ')'] if env.PROC_INCLUDES else []) + ['INCLUDE=(' + ','.join([i.bldpath() for i in inc_nodes]) + ')'] + ['userid=' + env.PROC_CONNECTION] + ['INAME=' + tsk.inputs[0].bldpath()] + ['ONAME=' + tsk.outputs[0].bldpath()]) exec_env = { 'ORACLE_HOME': env.PROC_ORACLE, 'LD_LIBRARY_PATH': env.PROC_ORACLE + path.sep + 'lib', } if env.PROC_TNS_ADMIN: exec_env['TNS_ADMIN'] = env.PROC_TNS_ADMIN return tsk.exec_command(cmd, env=exec_env) TaskGen.declare_chain( name='proc', rule=proc, ext_in='.pc', ext_out='.c', reentrant=True, )
def build(ctx): ctx.load('waf_customizations') ctx.load('generators.sources') ctx.file2string( source = "TOOLS/osxbundle/mpv.app/Contents/Resources/icon.icns", target = "osdep/macosx_icon.inc") ctx.file2string( source = "video/out/x11_icon.bin", target = "video/out/x11_icon.inc") ctx.file2string( source = "etc/input.conf", target = "input/input_conf.h") ctx.file2string( source = "video/out/gl_video_shaders.glsl", target = "video/out/gl_video_shaders.h") ctx.file2string( source = "sub/osd_font.otf", target = "sub/osd_font.h") ctx.file2string( source = "player/lua/defaults.lua", target = "player/lua/defaults.inc") ctx.file2string( source = "player/lua/assdraw.lua", target = "player/lua/assdraw.inc") ctx.file2string( source = "player/lua/osc.lua", target = "player/lua/osc.inc") ctx.matroska_header( source = "demux/ebml.c demux/demux_mkv.c", target = "ebml_types.h") ctx.matroska_definitions( source = "demux/ebml.c", target = "ebml_defs.c") getch2_c = { 'win32': 'osdep/terminal-win.c', }.get(ctx.env.DEST_OS, "osdep/terminal-unix.c") timer_c = { 'win32': 'osdep/timer-win2.c', 'darwin': 'osdep/timer-darwin.c', }.get(ctx.env.DEST_OS, "osdep/timer-linux.c") sources = [ ## Audio ( "audio/audio.c" ), ( "audio/audio_buffer.c" ), ( "audio/chmap.c" ), ( "audio/chmap_sel.c" ), ( "audio/fmt-conversion.c" ), ( "audio/format.c" ), ( "audio/mixer.c" ), ( "audio/decode/ad_lavc.c" ), ( "audio/decode/ad_mpg123.c", "mpg123" ), ( "audio/decode/ad_spdif.c" ), ( "audio/decode/dec_audio.c" ), ( "audio/filter/af.c" ), ( "audio/filter/af_bs2b.c", "libbs2b" ), ( "audio/filter/af_center.c" ), ( "audio/filter/af_channels.c" ), ( "audio/filter/af_convert24.c" ), ( "audio/filter/af_convertsignendian.c" ), ( "audio/filter/af_delay.c" ), ( "audio/filter/af_drc.c" ), ( "audio/filter/af_dummy.c" ), ( "audio/filter/af_equalizer.c" ), ( "audio/filter/af_export.c", "sys-mman-h" ), ( "audio/filter/af_extrastereo.c" ), ( "audio/filter/af_format.c" ), ( "audio/filter/af_hrtf.c" ), ( "audio/filter/af_karaoke.c" ), ( "audio/filter/af_ladspa.c", "ladspa" ), ( "audio/filter/af_lavcac3enc.c" ), ( "audio/filter/af_lavfi.c", "libavfilter" ), ( "audio/filter/af_lavrresample.c" ), ( "audio/filter/af_pan.c" ), ( "audio/filter/af_scaletempo.c" ), ( "audio/filter/af_sinesuppress.c" ), ( "audio/filter/af_sub.c" ), ( "audio/filter/af_surround.c" ), ( "audio/filter/af_sweep.c" ), ( "audio/filter/af_volume.c" ), ( "audio/filter/filter.c" ), ( "audio/filter/tools.c" ), ( "audio/filter/window.c" ), ( "audio/out/ao.c" ), ( "audio/out/ao_alsa.c", "alsa" ), ( "audio/out/ao_coreaudio.c", "coreaudio" ), ( "audio/out/ao_coreaudio_properties.c", "coreaudio" ), ( "audio/out/ao_coreaudio_utils.c", "coreaudio" ), ( "audio/out/ao_dsound.c", "dsound" ), ( "audio/out/ao_jack.c", "jack" ), ( "audio/out/ao_lavc.c", "encoding" ), ( "audio/out/ao_null.c" ), ( "audio/out/ao_openal.c", "openal" ), ( "audio/out/ao_oss.c", "oss-audio" ), ( "audio/out/ao_pcm.c" ), ( "audio/out/ao_portaudio.c", "portaudio" ), ( "audio/out/ao_pulse.c", "pulse" ), ( "audio/out/ao_rsound.c", "rsound" ), ( "audio/out/ao_sdl.c", "sdl1" ), ( "audio/out/ao_sdl.c", "sdl2" ), ( "audio/out/ao_sndio.c", "sndio" ), ( "audio/out/ao_wasapi.c", "wasapi" ), ( "audio/out/ao_wasapi_utils.c", "wasapi" ), ( "audio/out/pull.c" ), ( "audio/out/push.c" ), ## Bstr ( "bstr/bstr.c" ), ## Core ( "common/av_common.c" ), ( "common/av_log.c" ), ( "common/av_opts.c" ), ( "common/codecs.c" ), ( "common/encode_lavc.c", "encoding" ), ( "common/common.c" ), ( "common/tags.c" ), ( "common/msg.c" ), ( "common/playlist.c" ), ( "common/version.c" ), ## Demuxers ( "demux/codec_tags.c" ), ( "demux/demux.c" ), ( "demux/demux_cue.c" ), ( "demux/demux_edl.c" ), ( "demux/demux_lavf.c" ), ( "demux/demux_libass.c", "libass"), ( "demux/demux_mf.c" ), ( "demux/demux_mkv.c" ), ( "demux/demux_playlist.c" ), ( "demux/demux_raw.c" ), ( "demux/demux_subreader.c" ), ( "demux/ebml.c" ), ( "demux/mf.c" ), ## Input ( "input/cmd_list.c" ), ( "input/cmd_parse.c" ), ( "input/event.c" ), ( "input/input.c" ), ( "input/keycodes.c" ), ( "input/joystick.c", "joystick" ), ( "input/lirc.c", "lirc" ), ## Misc ( "misc/charset_conv.c" ), ( "misc/dispatch.c" ), ( "misc/ring.c" ), ## Options ( "options/m_config.c" ), ( "options/m_option.c" ), ( "options/m_property.c" ), ( "options/options.c" ), ( "options/parse_commandline.c" ), ( "options/parse_configfile.c" ), ( "options/path.c" ), ## Player ( "player/audio.c" ), ( "player/client.c" ), ( "player/command.c" ), ( "player/configfiles.c" ), ( "player/discnav.c" ), ( "player/loadfile.c" ), ( "player/main.c" ), ( "player/misc.c" ), ( "player/lua.c", "lua" ), ( "player/osd.c" ), ( "player/playloop.c" ), ( "player/screenshot.c" ), ( "player/sub.c" ), ( "player/timeline/tl_cue.c" ), ( "player/timeline/tl_mpv_edl.c" ), ( "player/timeline/tl_matroska.c" ), ( "player/video.c" ), ## Streams ( "stream/ai_alsa1x.c", "alsa" ), ( "stream/ai_oss.c", "oss-audio" ), ( "stream/ai_sndio.c", "sndio" ), ( "stream/audio_in.c", "audio-input" ), ( "stream/cache.c" ), ( "stream/cookies.c" ), ( "stream/dvb_tune.c", "dvbin" ), ( "stream/frequencies.c", "tv" ), ( "stream/rar.c" ), ( "stream/stream.c" ), ( "stream/stream_avdevice.c" ), ( "stream/stream_bluray.c", "libbluray" ), ( "stream/stream_cdda.c", "cdda" ), ( "stream/stream_dvb.c", "dvbin" ), ( "stream/stream_dvd.c", "dvdread" ), ( "stream/stream_dvd_common.c", "dvdread" ), ( "stream/stream_dvdnav.c", "dvdnav" ), ( "stream/stream_edl.c" ), ( "stream/stream_file.c" ), ( "stream/stream_lavf.c" ), ( "stream/stream_memory.c" ), ( "stream/stream_mf.c" ), ( "stream/stream_null.c" ), ( "stream/stream_pvr.c", "pvr" ), ( "stream/stream_rar.c" ), ( "stream/stream_smb.c", "libsmbclient" ), ( "stream/stream_tv.c", "tv" ), ( "stream/stream_vcd.c", "vcd" ), ( "stream/tv.c", "tv" ), ( "stream/tvi_dummy.c", "tv" ), ( "stream/tvi_v4l2.c", "tv-v4l2"), ( "stream/resolve/resolve_quvi.c", "libquvi4" ), ( "stream/resolve/resolve_quvi9.c", "libquvi9" ), ## Subtitles ( "sub/ass_mp.c", "libass"), ( "sub/dec_sub.c" ), ( "sub/draw_bmp.c" ), ( "sub/find_subfiles.c" ), ( "sub/img_convert.c" ), ( "sub/osd.c" ), ( "sub/osd_dummy.c", "dummy-osd" ), ( "sub/osd_libass.c", "libass-osd" ), ( "sub/sd_ass.c", "libass" ), ( "sub/sd_lavc.c" ), ( "sub/sd_lavc_conv.c" ), ( "sub/sd_lavf_srt.c" ), ( "sub/sd_microdvd.c" ), ( "sub/sd_movtext.c" ), ( "sub/sd_srt.c" ), ## Video ( "video/csputils.c" ), ( "video/fmt-conversion.c" ), ( "video/image_writer.c" ), ( "video/img_format.c" ), ( "video/mp_image.c" ), ( "video/mp_image_pool.c" ), ( "video/sws_utils.c" ), ( "video/vaapi.c", "vaapi" ), ( "video/vdpau.c", "vdpau" ), ( "video/vdpau_mixer.c", "vdpau" ), ( "video/decode/dec_video.c"), ( "video/decode/vaapi.c", "vaapi-hwaccel" ), ( "video/decode/vd_lavc.c" ), ( "video/decode/vda.c", "vda-hwaccel" ), ( "video/decode/vdpau.c", "vdpau-hwaccel" ), ( "video/filter/pullup.c" ), ( "video/filter/vf.c" ), ( "video/filter/vf_crop.c" ), ( "video/filter/vf_delogo.c" ), ( "video/filter/vf_divtc.c" ), ( "video/filter/vf_dlopen.c", "dlopen" ), ( "video/filter/vf_dsize.c" ), ( "video/filter/vf_eq.c" ), ( "video/filter/vf_expand.c" ), ( "video/filter/vf_flip.c" ), ( "video/filter/vf_format.c" ), ( "video/filter/vf_gradfun.c" ), ( "video/filter/vf_hqdn3d.c" ), ( "video/filter/vf_ilpack.c" ), ( "video/filter/vf_lavfi.c", "libavfilter"), ( "video/filter/vf_mirror.c" ), ( "video/filter/vf_noformat.c" ), ( "video/filter/vf_noise.c" ), ( "video/filter/vf_phase.c" ), ( "video/filter/vf_pp.c", "libpostproc" ), ( "video/filter/vf_pullup.c" ), ( "video/filter/vf_rotate.c" ), ( "video/filter/vf_scale.c" ), ( "video/filter/vf_screenshot.c" ), ( "video/filter/vf_softpulldown.c" ), ( "video/filter/vf_stereo3d.c" ), ( "video/filter/vf_sub.c" ), ( "video/filter/vf_swapuv.c" ), ( "video/filter/vf_unsharp.c" ), ( "video/filter/vf_vapoursynth.c", "vapoursynth" ), ( "video/filter/vf_vavpp.c", "vaapi-vpp"), ( "video/filter/vf_vdpaupp.c", "vdpau" ), ( "video/filter/vf_yadif.c" ), ( "video/out/aspect.c" ), ( "video/out/bitmap_packer.c" ), ( "video/out/cocoa/additions.m", "cocoa" ), ( "video/out/cocoa/view.m", "cocoa" ), ( "video/out/cocoa/window.m", "cocoa" ), ( "video/out/cocoa_common.m", "cocoa" ), ( "video/out/dither.c" ), ( "video/out/filter_kernels.c" ), ( "video/out/gl_cocoa.c", "gl-cocoa" ), ( "video/out/gl_common.c", "gl" ), ( "video/out/gl_hwdec_vaglx.c", "vaapi-glx" ), ( "video/out/gl_hwdec_vda.c", "vda-gl" ), ( "video/out/gl_hwdec_vdpau.c", "vdpau-gl-x11" ), ( "video/out/gl_lcms.c", "gl" ), ( "video/out/gl_osd.c", "gl" ), ( "video/out/gl_video.c", "gl" ), ( "video/out/gl_w32.c", "gl-win32" ), ( "video/out/gl_wayland.c", "gl-wayland" ), ( "video/out/gl_x11.c", "gl-x11" ), ( "video/out/pnm_loader.c", "gl" ), ( "video/out/vo.c" ), ( "video/out/vo_caca.c", "caca" ), ( "video/out/vo_corevideo.c", "corevideo"), ( "video/out/vo_direct3d.c", "direct3d" ), ( "video/out/vo_image.c" ), ( "video/out/vo_lavc.c", "encoding" ), ( "video/out/vo_null.c" ), ( "video/out/vo_opengl.c", "gl" ), ( "video/out/vo_opengl_old.c", "gl" ), ( "video/out/vo_sdl.c", "sdl2" ), ( "video/out/vo_vaapi.c", "vaapi" ), ( "video/out/vo_vdpau.c", "vdpau" ), ( "video/out/vo_wayland.c", "wayland" ), ( "video/out/vo_x11.c" , "x11" ), ( "video/out/vo_xv.c", "xv" ), ( "video/out/w32_common.c", "gdi" ), ( "video/out/wayland_common.c", "wayland" ), ( "video/out/win_state.c"), ( "video/out/x11_common.c", "x11" ), ## osdep ( getch2_c ), ( "osdep/io.c" ), ( "osdep/numcores.c"), ( "osdep/timer.c" ), ( timer_c ), ( "osdep/threads.c" ), ( "osdep/ar/HIDRemote.m", "cocoa" ), ( "osdep/macosx_application.m", "cocoa" ), ( "osdep/macosx_events.m", "cocoa" ), ( "osdep/path-macosx.m", "cocoa" ), ( "osdep/path-win.c", "os-win32" ), ( "osdep/path-win.c", "os-cygwin" ), ( "osdep/glob-win.c", "glob-win32-replacement" ), ( "osdep/priority.c", "priority" ), ( "osdep/w32_keyboard.c", "os-win32" ), ( "osdep/w32_keyboard.c", "os-cygwin" ), ( "osdep/mpv.rc", "win32-executable" ), ## tree_allocator "ta/ta.c", "ta/ta_talloc.c", "ta/ta_utils.c" ] if ctx.dependency_satisfied('win32-executable'): from waflib import TaskGen TaskGen.declare_chain( name = 'windres', rule = '${WINDRES} ${WINDRES_FLAGS} ${SRC} ${TGT}', ext_in = '.rc', ext_out = '-rc.o', color = 'PINK') ctx.env.WINDRES_FLAGS = [ '--include-dir={0}'.format(ctx.bldnode.abspath()), '--include-dir={0}'.format(ctx.srcnode.abspath()) ] for node in 'osdep/mpv.exe.manifest etc/mpv-icon.ico'.split(): ctx.add_manual_dependency( ctx.path.find_node('osdep/mpv.rc'), ctx.path.find_node(node)) cprog_kwargs = {} if ctx.dependency_satisfied('macosx-bundle'): import os basepath = 'TOOLS/osxbundle/mpv.app/Contents' cprog_kwargs['mac_app'] = True cprog_kwargs['mac_plist'] = os.path.join(basepath, 'Info.plist') resources_glob = os.path.join(basepath, 'Resources', '*') resources_nodes = ctx.srcnode.ant_glob(resources_glob) resources = [node.srcpath() for node in resources_nodes] cprog_kwargs['mac_resources'] = resources for resource in resources: res_basename = os.path.basename(resource) install_name = '/mpv.app/Contents/Resources/' + res_basename ctx.install_as(ctx.env.BINDIR + install_name, resource) ctx( target = "mpv", source = ctx.filtered_sources(sources) + ["player/main_fn.c"], use = ctx.dependencies_use(), includes = [ctx.bldnode.abspath(), ctx.srcnode.abspath()] + \ ctx.dependencies_includes(), features = "c cprogram", install_path = ctx.env.BINDIR, **cprog_kwargs ) if ctx.dependency_satisfied('libmpv-shared'): ctx.load("syms") vnum = int(re.search('^#define MPV_CLIENT_API_VERSION 0x(.*)UL$', ctx.path.find_node("libmpv/client.h").read(), re.M) .group(1), 16) libversion = (str(vnum >> 24) + '.' + str((vnum >> 16) & 0xff) + '.' + str(vnum & 0xffff)) ctx( target = "mpv", source = ctx.filtered_sources(sources), use = ctx.dependencies_use(), includes = [ctx.bldnode.abspath(), ctx.srcnode.abspath()] + \ ctx.dependencies_includes(), features = "c cshlib syms", export_symbols_regex = 'mpv_.*', install_path = ctx.env.LIBDIR, vnum = libversion, ) ctx( target = 'libmpv/mpv.pc', source = 'libmpv/mpv.pc.in', features = 'subst', PREFIX = ctx.env.PREFIX, LIBDIR = ctx.env.LIBDIR, INCDIR = ctx.env.INCDIR, VERSION = libversion, ) headers = ["client.h"] for f in headers: ctx.install_as(ctx.env.INCDIR + '/mpv/' + f, 'libmpv/' + f) ctx.install_as(ctx.env.LIBDIR + '/pkgconfig/mpv.pc', 'libmpv/mpv.pc') if ctx.dependency_satisfied('client-api-examples'): # This assumes all examples are single-file (as examples should be) for f in ["simple"]: ctx( target = f, source = "DOCS/client_api_examples/" + f + ".c", includes = [ctx.bldnode.abspath(), ctx.srcnode.abspath()], use = "mpv", features = "c cprogram", ) if ctx.env.DEST_OS == 'win32': wrapctx = ctx( target = "mpv", source = ['osdep/win32-console-wrapper.c'], features = "c cprogram", install_path = ctx.env.BINDIR ) wrapctx.env.cprogram_PATTERN = "%s.com" wrapflags = ['-municode', '-mconsole'] wrapctx.env.CFLAGS = wrapflags wrapctx.env.LAST_LINKFLAGS = wrapflags if ctx.dependency_satisfied('macosx-bundle'): from waflib import Utils ctx.install_files(ctx.env.BINDIR, 'mpv', chmod=Utils.O755) if ctx.dependency_satisfied("vf-dlopen-filters"): dlfilters = "showqscale telecine tile rectangle framestep \ ildetect".split() for dlfilter in dlfilters: ctx( target = dlfilter, source = ['TOOLS/vf_dlopen/'+dlfilter+'.c', 'TOOLS/vf_dlopen/filterutils.c'], includes = [ctx.srcnode.abspath() + '/video/filter'], features = 'c cshlib', install_path = ctx.env.LIBDIR + '/mpv' ) if ctx.dependency_satisfied('manpage-build'): _build_man(ctx) if ctx.dependency_satisfied('pdf-build'): _build_pdf(ctx) ctx.install_files( ctx.env.DATADIR + '/applications', ['etc/mpv.desktop'] ) ctx.install_files(ctx.env.CONFDIR, ['etc/encoding-profiles.conf'] ) for size in '16x16 32x32 64x64'.split(): ctx.install_as( ctx.env.DATADIR + '/icons/hicolor/' + size + '/apps/mpv.png', 'etc/mpv-icon-8bit-' + size + '.png')
def build(ctx): ctx.load("waf_customizations") ctx.load("generators.sources") ctx.file2string(source="video/out/x11_icon.bin", target="video/out/x11_icon.inc") ctx.file2string(source="etc/input.conf", target="input/input_conf.h") ctx.file2string(source="video/out/gl_video_shaders.glsl", target="video/out/gl_video_shaders.h") ctx.file2string(source="sub/osd_font.otf", target="sub/osd_font.h") ctx.file2string(source="player/lua/defaults.lua", target="player/lua/defaults.inc") ctx.file2string(source="player/lua/assdraw.lua", target="player/lua/assdraw.inc") ctx.file2string(source="player/lua/osc.lua", target="player/lua/osc.inc") ctx.matroska_header(source="demux/ebml.c demux/demux_mkv.c", target="ebml_types.h") ctx.matroska_definitions(source="demux/ebml.c", target="ebml_defs.c") getch2_c = {"win32": "osdep/terminal-win.c"}.get(ctx.env.DEST_OS, "osdep/terminal-unix.c") timer_c = {"win32": "osdep/timer-win2.c", "darwin": "osdep/timer-darwin.c"}.get( ctx.env.DEST_OS, "osdep/timer-linux.c" ) sources = [ ## Audio ("audio/audio.c"), ("audio/audio_buffer.c"), ("audio/chmap.c"), ("audio/chmap_sel.c"), ("audio/fmt-conversion.c"), ("audio/format.c"), ("audio/mixer.c"), ("audio/reorder_ch.c"), ("audio/decode/ad_lavc.c"), ("audio/decode/ad_mpg123.c", "mpg123"), ("audio/decode/ad_spdif.c"), ("audio/decode/dec_audio.c"), ("audio/filter/af.c"), ("audio/filter/af_bs2b.c", "libbs2b"), ("audio/filter/af_center.c"), ("audio/filter/af_channels.c"), ("audio/filter/af_convert24.c"), ("audio/filter/af_convertsignendian.c"), ("audio/filter/af_delay.c"), ("audio/filter/af_drc.c"), ("audio/filter/af_dummy.c"), ("audio/filter/af_equalizer.c"), ("audio/filter/af_export.c", "sys-mman-h"), ("audio/filter/af_extrastereo.c"), ("audio/filter/af_format.c"), ("audio/filter/af_hrtf.c"), ("audio/filter/af_karaoke.c"), ("audio/filter/af_ladspa.c", "ladspa"), ("audio/filter/af_lavcac3enc.c"), ("audio/filter/af_lavfi.c", "af-lavfi"), ("audio/filter/af_lavrresample.c"), ("audio/filter/af_pan.c"), ("audio/filter/af_scaletempo.c"), ("audio/filter/af_sinesuppress.c"), ("audio/filter/af_sub.c"), ("audio/filter/af_surround.c"), ("audio/filter/af_sweep.c"), ("audio/filter/af_volume.c"), ("audio/filter/filter.c"), ("audio/filter/tools.c"), ("audio/filter/window.c"), ("audio/out/ao.c"), ("audio/out/ao_alsa.c", "alsa"), ("audio/out/ao_coreaudio.c", "coreaudio"), ("audio/out/ao_coreaudio_properties.c", "coreaudio"), ("audio/out/ao_coreaudio_utils.c", "coreaudio"), ("audio/out/ao_dsound.c", "dsound"), ("audio/out/ao_jack.c", "jack"), ("audio/out/ao_lavc.c", "encoding"), ("audio/out/ao_null.c"), ("audio/out/ao_openal.c", "openal"), ("audio/out/ao_oss.c", "oss-audio"), ("audio/out/ao_pcm.c"), ("audio/out/ao_portaudio.c", "portaudio"), ("audio/out/ao_pulse.c", "pulse"), ("audio/out/ao_rsound.c", "rsound"), ("audio/out/ao_sdl.c", "sdl"), ("audio/out/ao_sdl.c", "sdl2"), ("audio/out/ao_sndio.c", "sndio"), ("audio/out/ao_wasapi.c", "wasapi"), ## Bstr ("bstr/bstr.c"), ## Core ("common/asxparser.c"), ("common/av_common.c"), ("common/av_log.c"), ("common/av_opts.c"), ("common/codecs.c"), ("common/cpudetect.c"), ("common/encode_lavc.c", "encoding"), ("common/common.c"), ("common/msg.c"), ("common/playlist.c"), ("common/playlist_parser.c"), ("common/version.c"), ## Demuxers ("demux/codec_tags.c"), ("demux/demux.c"), ("demux/demux_cue.c"), ("demux/demux_edl.c"), ("demux/demux_lavf.c"), ("demux/demux_libass.c", "libass"), ("demux/demux_mf.c"), ("demux/demux_mkv.c"), ("demux/demux_playlist.c"), ("demux/demux_raw.c"), ("demux/demux_subreader.c"), ("demux/ebml.c"), ("demux/mf.c"), ## Input ("input/cmd_list.c"), ("input/cmd_parse.c"), ("input/input.c"), ("input/keycodes.c"), ("input/joystick.c", "joystick"), ("input/lirc.c", "lirc"), ## Misc ("misc/ring.c"), ("misc/charset_conv.c"), ## Options ("options/m_config.c"), ("options/m_option.c"), ("options/m_property.c"), ("options/options.c"), ("options/parse_commandline.c"), ("options/parse_configfile.c"), ("options/path.c"), ## Player ("player/audio.c"), ("player/command.c"), ("player/configfiles.c"), ("player/dvdnav.c"), ("player/loadfile.c"), ("player/main.c"), ("player/misc.c"), ("player/lua.c", "lua"), ("player/osd.c"), ("player/playloop.c"), ("player/screenshot.c"), ("player/sub.c"), ("player/timeline/tl_cue.c"), ("player/timeline/tl_mpv_edl.c"), ("player/timeline/tl_matroska.c"), ("player/video.c"), ## Streams ("stream/ai_alsa1x.c", "alsa"), ("stream/ai_oss.c", "oss-audio"), ("stream/ai_sndio.c", "sndio"), ("stream/audio_in.c", "audio-input"), ("stream/cache.c"), ("stream/cdinfo.c", "cdda"), ("stream/cookies.c"), ("stream/dvb_tune.c", "dvbin"), ("stream/frequencies.c", "tv"), ("stream/rar.c"), ("stream/stream.c"), ("stream/stream_avdevice.c"), ("stream/stream_bluray.c", "libbluray"), ("stream/stream_cdda.c", "cdda"), ("stream/stream_dvb.c", "dvbin"), ("stream/stream_dvd.c", "dvdread"), ("stream/stream_dvd_common.c", "dvdread"), ("stream/stream_dvdnav.c", "dvdnav"), ("stream/stream_edl.c"), ("stream/stream_file.c"), ("stream/stream_lavf.c"), ("stream/stream_memory.c"), ("stream/stream_mf.c"), ("stream/stream_null.c"), ("stream/stream_pvr.c", "pvr"), ("stream/stream_radio.c", "radio"), ("stream/stream_rar.c"), ("stream/stream_smb.c", "libsmbclient"), ("stream/stream_tv.c", "tv"), ("stream/stream_vcd.c", "vcd"), ("stream/tv.c", "tv"), ("stream/tvi_dummy.c", "tv"), ("stream/tvi_v4l2.c", "tv-v4l2"), ("stream/resolve/resolve_quvi.c", "libquvi4"), ("stream/resolve/resolve_quvi9.c", "libquvi9"), ## Subtitles ("sub/ass_mp.c", "libass"), ("sub/dec_sub.c"), ("sub/draw_bmp.c"), ("sub/find_subfiles.c"), ("sub/img_convert.c"), ("sub/osd.c"), ("sub/osd_dummy.c", "dummy-osd"), ("sub/osd_libass.c", "libass-osd"), ("sub/sd_ass.c", "libass"), ("sub/sd_lavc.c"), ("sub/sd_lavc_conv.c"), ("sub/sd_lavf_srt.c"), ("sub/sd_microdvd.c"), ("sub/sd_movtext.c"), ("sub/sd_spu.c"), ("sub/sd_srt.c"), ("sub/spudec.c"), ## Video ("video/csputils.c"), ("video/fmt-conversion.c"), ("video/image_writer.c"), ("video/img_format.c"), ("video/mp_image.c"), ("video/mp_image_pool.c"), ("video/sws_utils.c"), ("video/vaapi.c", "vaapi"), ("video/vdpau.c", "vdpau"), ("video/decode/dec_video.c"), ("video/decode/lavc_dr1.c", "!avutil-refcounting"), ("video/decode/vaapi.c", "vaapi-hwaccel"), ("video/decode/vd_lavc.c"), ("video/decode/vda.c", "vda-hwaccel"), ("video/decode/vdpau.c", "vdpau-hwaccel"), ("video/decode/vdpau_old.c", "vdpau-decoder"), ("video/filter/pullup.c"), ("video/filter/vf.c"), ("video/filter/vf_crop.c"), ("video/filter/vf_delogo.c"), ("video/filter/vf_divtc.c"), ("video/filter/vf_dlopen.c", "dlopen"), ("video/filter/vf_dsize.c"), ("video/filter/vf_eq.c"), ("video/filter/vf_expand.c"), ("video/filter/vf_flip.c"), ("video/filter/vf_format.c"), ("video/filter/vf_gradfun.c"), ("video/filter/vf_hqdn3d.c"), ("video/filter/vf_ilpack.c"), ("video/filter/vf_lavfi.c", "vf-lavfi"), ("video/filter/vf_mirror.c"), ("video/filter/vf_noformat.c"), ("video/filter/vf_noise.c"), ("video/filter/vf_phase.c"), ("video/filter/vf_pp.c", "libpostproc"), ("video/filter/vf_pullup.c"), ("video/filter/vf_rotate.c"), ("video/filter/vf_scale.c"), ("video/filter/vf_screenshot.c"), ("video/filter/vf_softpulldown.c"), ("video/filter/vf_stereo3d.c"), ("video/filter/vf_sub.c"), ("video/filter/vf_swapuv.c"), ("video/filter/vf_unsharp.c"), ("video/filter/vf_vavpp.c", "vaapi-vpp"), ("video/filter/vf_yadif.c"), ("video/out/aspect.c"), ("video/out/bitmap_packer.c"), ("video/out/cocoa/additions.m", "cocoa"), ("video/out/cocoa/view.m", "cocoa"), ("video/out/cocoa/window.m", "cocoa"), ("video/out/cocoa_common.m", "cocoa"), ("video/out/dither.c"), ("video/out/filter_kernels.c"), ("video/out/gl_cocoa.c", "gl-cocoa"), ("video/out/gl_common.c", "gl"), ("video/out/gl_hwdec_vaglx.c", "vaapi-glx"), ("video/out/gl_hwdec_vda.c", "vda-gl"), ("video/out/gl_hwdec_vdpau.c", "vdpau-gl-x11"), ("video/out/gl_lcms.c", "gl"), ("video/out/gl_osd.c", "gl"), ("video/out/gl_video.c", "gl"), ("video/out/gl_w32.c", "gl-win32"), ("video/out/gl_wayland.c", "gl-wayland"), ("video/out/gl_x11.c", "gl-x11"), ("video/out/pnm_loader.c", "gl"), ("video/out/vo.c"), ("video/out/vo_caca.c", "caca"), ("video/out/vo_corevideo.c", "corevideo"), ("video/out/vo_direct3d.c", "direct3d"), ("video/out/vo_image.c"), ("video/out/vo_lavc.c", "encoding"), ("video/out/vo_null.c"), ("video/out/vo_opengl.c", "gl"), ("video/out/vo_opengl_old.c", "gl"), ("video/out/vo_sdl.c", "sdl2"), ("video/out/vo_vaapi.c", "vaapi"), ("video/out/vo_vdpau.c", "vdpau"), ("video/out/vo_wayland.c", "wayland"), ("video/out/vo_x11.c", "x11"), ("video/out/vo_xv.c", "xv"), ("video/out/w32_common.c", "gdi"), ("video/out/wayland_common.c", "wayland"), ("video/out/x11_common.c", "x11"), ## osdep (getch2_c), ("osdep/io.c"), ("osdep/numcores.c"), ("osdep/timer.c"), (timer_c), ("osdep/threads.c"), ("osdep/ar/HIDRemote.m", "cocoa"), ("osdep/macosx_application.m", "cocoa"), ("osdep/macosx_events.m", "cocoa"), ("osdep/path-macosx.m", "cocoa"), ("osdep/path-win.c", "os-win32"), ("osdep/path-win.c", "os-cygwin"), ("osdep/glob-win.c", "glob-win32-replacement"), ("osdep/priority.c", "priority"), ("osdep/mpv.rc", "win32-executable"), ## tree_allocator "ta/ta.c", "ta/ta_talloc.c", "ta/ta_utils.c", ] if ctx.dependency_satisfied("win32-executable"): from waflib import TaskGen TaskGen.declare_chain( name="windres", rule="${WINDRES} ${WINDRES_FLAGS} ${SRC} ${TGT}", ext_in=".rc", ext_out="-rc.o", color="PINK", ) ctx.env.WINDRES_FLAGS = [ "--include-dir={0}".format(ctx.bldnode.abspath()), "--include-dir={0}".format(ctx.srcnode.abspath()), ] for node in "osdep/mpv.exe.manifest etc/mpv-icon.ico".split(): ctx.add_manual_dependency(ctx.path.find_node("osdep/mpv.rc"), ctx.path.find_node(node)) cprog_kwargs = {} if ctx.dependency_satisfied("macosx-bundle"): import os basepath = "TOOLS/osxbundle/mpv.app/Contents" cprog_kwargs["mac_app"] = True cprog_kwargs["mac_plist"] = os.path.join(basepath, "Info.plist") resources_glob = os.path.join(basepath, "Resources", "*") resources_nodes = ctx.srcnode.ant_glob(resources_glob) resources = [node.srcpath() for node in resources_nodes] cprog_kwargs["mac_resources"] = resources for resource in resources: res_basename = os.path.basename(resource) install_name = "/mpv.app/Contents/Resources/" + res_basename ctx.install_as(ctx.env.BINDIR + install_name, resource) ctx( target="mpv", source=ctx.filtered_sources(sources), use=ctx.dependencies_use(), includes=[ctx.bldnode.abspath(), ctx.srcnode.abspath()] + ctx.dependencies_includes(), features="c cprogram", install_path=ctx.env.BINDIR, **cprog_kwargs ) if ctx.dependency_satisfied("macosx-bundle"): from waflib import Utils ctx.install_files(ctx.env.BINDIR, "mpv", chmod=Utils.O755) if ctx.dependency_satisfied("vf-dlopen-filters"): dlfilters = "showqscale telecine tile rectangle framestep \ ildetect".split() for dlfilter in dlfilters: ctx( target=dlfilter, source=["TOOLS/vf_dlopen/" + dlfilter + ".c", "TOOLS/vf_dlopen/filterutils.c"], includes=[ctx.srcnode.abspath() + "/video/filter"], features="c cshlib", install_path=ctx.env.LIBDIR + "/mpv", ) if ctx.dependency_satisfied("manpage-build"): _build_man(ctx) if ctx.dependency_satisfied("pdf-build"): _build_pdf(ctx) ctx.install_files(ctx.env.DATADIR + "/applications", ["etc/mpv.desktop"]) ctx.install_files(ctx.env.CONFDIR, ["etc/encoding-profiles.conf"]) for size in "16x16 32x32 64x64".split(): ctx.install_as( ctx.env.DATADIR + "/icons/hicolor/" + size + "/apps/mpv.png", "etc/mpv-icon-8bit-" + size + ".png" )