# Copyright 2013 The Servo Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution. # # Licensed under the Apache License, Version 2.0 or the MIT license # , at your # option. This file may not be copied, modified, or distributed # except according to those terms. import os import sys GSTREAMER_BASE_LIBS = [ # gstreamer "gstbase", "gstcontroller", "gstnet", "gstreamer", # gst-plugins-base "gstapp", "gstaudio", "gstfft", "gstgl", "gstpbutils", "gstplay", "gstriff", "gstrtp", "gstrtsp", "gstsctp", "gstsdp", "gsttag", "gstvideo", # gst-plugins-bad "gstcodecparsers", "gstplayer", "gstwebrtc", "gstwebrtcnice", ] """ These are the GStreamer base libraries used by both MacOS and Windows platforms. These are distinct from GStreamer plugins, but GStreamer plugins may have shared object dependencies on them. """ GSTREAMER_PLUGIN_LIBS = [ # gstreamer "gstcoreelements", "gstnice", # gst-plugins-base "gstapp", "gstaudioconvert", "gstaudioresample", "gstgio", "gstogg", "gstopengl", "gstopus", "gstplayback", "gsttheora", "gsttypefindfunctions", "gstvideoconvertscale", "gstvolume", "gstvorbis", # gst-plugins-good "gstaudiofx", "gstaudioparsers", "gstautodetect", "gstdeinterlace", "gstid3demux", "gstinterleave", "gstisomp4", "gstmatroska", "gstrtp", "gstrtpmanager", "gstvideofilter", "gstvpx", # gst-plugins-bad "gstaudiobuffersplit", "gstdtls", "gstid3tag", "gstproxy", "gstvideoparsersbad", "gstwebrtc", # gst-libav "gstlibav", ] """ The list of plugin libraries themselves, used for both MacOS and Windows. """ GSTREAMER_MAC_PLUGIN_LIBS = [ # gst-plugins-good "gstosxaudio", "gstosxvideo", # gst-plugins-bad "gstapplemedia", ] """ Plugins that are only used for MacOS. """ GSTREAMER_WIN_PLUGIN_LIBS = [ # gst-plugins-bad "gstwasapi" ] """ Plugins that are only used for Windows. """ GSTREAMER_WIN_DEPENDENCY_LIBS = [ "avcodec-59.dll", "avfilter-8.dll", "avformat-59.dll", "avutil-57.dll", "bz2.dll", "ffi-7.dll", "gio-2.0-0.dll", "glib-2.0-0.dll", "gmodule-2.0-0.dll", "gobject-2.0-0.dll", "graphene-1.0-0.dll", "intl-8.dll", "libcrypto-1_1-x64.dll", "libjpeg-8.dll", "libogg-0.dll", "libpng16-16.dll", "libssl-1_1-x64.dll", "libvorbis-0.dll", "libvorbisenc-2.dll", "libwinpthread-1.dll", "nice-10.dll", "opus-0.dll", "orc-0.4-0.dll", "pcre2-8-0.dll", "swresample-4.dll", "theora-0.dll", "theoradec-1.dll", "theoraenc-1.dll", "z-1.dll", ] """ DLLs that GStreamer ships in the Windows distribution that are necessary for using the plugin selection that we have. This list is curated by a combination of using `dumpbin` and the errors that appear when starting Servo. """ def windows_dlls(): return GSTREAMER_WIN_DEPENDENCY_LIBS + [f"{lib}-1.0-0.dll" for lib in GSTREAMER_BASE_LIBS] def windows_plugins(): libs = [ *GSTREAMER_PLUGIN_LIBS, *GSTREAMER_WIN_PLUGIN_LIBS ] return [f"{lib}.dll" for lib in libs] def macos_gst_root(): return os.path.join( "/", "Library", "Frameworks", "GStreamer.framework", "Versions", "1.0") def macos_plugins(): plugins = [ *GSTREAMER_PLUGIN_LIBS, *GSTREAMER_MAC_PLUGIN_LIBS ] return [f"lib{plugin}.dylib" for plugin in plugins] def write_plugin_list(target): plugins = [] if "apple-" in target: plugins = macos_plugins() elif '-windows-' in target: plugins = windows_plugins() print('''/* This is a generated file. Do not modify. */ pub(crate) static GSTREAMER_PLUGINS: &[&'static str] = &[ %s ]; ''' % ',\n'.join(map(lambda x: '"' + x + '"', plugins))) if __name__ == "__main__": write_plugin_list(sys.argv[1])