1*4882a593Smuzhiyun# This .inc file contains functionality for automatically splitting 2*4882a593Smuzhiyun# built plugins into individual packages for each plugin. A -meta 3*4882a593Smuzhiyun# package is also set up that has no files of its own, but contains 4*4882a593Smuzhiyun# the names of all plugin packages in its RDEPENDS list. 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun# This is mainly used by the gstreamer1.0-plugins-* plugin set recipes, 7*4882a593Smuzhiyun# but can be used in any recipe that produces GStreamer plugins. 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun# Dynamically generate packages for all enabled plugins 10*4882a593SmuzhiyunPACKAGES_DYNAMIC = "^${PN}-.* ^libgst.*" 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunPACKAGESPLITFUNCS:prepend = " split_gstreamer10_packages " 13*4882a593SmuzhiyunPACKAGESPLITFUNCS:append = " set_gstreamer10_metapkg_rdepends " 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunpython split_gstreamer10_packages () { 16*4882a593Smuzhiyun gst_libdir = d.expand('${libdir}/gstreamer-1.0') 17*4882a593Smuzhiyun postinst = d.getVar('plugin_postinst') 18*4882a593Smuzhiyun glibdir = d.getVar('libdir') 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun # GStreamer libraries 21*4882a593Smuzhiyun do_split_packages(d, glibdir, r'^lib(.*)\.so\.*', 'lib%s', 'GStreamer 1.0 %s library', extra_depends='', allow_links=True) 22*4882a593Smuzhiyun # GStreamer plugin shared objects 23*4882a593Smuzhiyun do_split_packages(d, gst_libdir, r'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer 1.0 plugin for %s', postinst=postinst, extra_depends='') 24*4882a593Smuzhiyun # GObject introspection files for GStreamer plugins 25*4882a593Smuzhiyun do_split_packages(d, glibdir+'/girepository-1.0', r'Gst(.*)-1.0\.typelib$', d.expand('${PN}-%s-typelib'), 'GStreamer 1.0 typelib file for %s', postinst=postinst, extra_depends='') 26*4882a593Smuzhiyun # Static GStreamer libraries for development 27*4882a593Smuzhiyun do_split_packages(d, gst_libdir, r'libgst(.*)\.a$', d.expand('${PN}-%s-staticdev'), 'GStreamer 1.0 plugin for %s (static development files)', extra_depends='${PN}-staticdev') 28*4882a593Smuzhiyun} 29*4882a593Smuzhiyun 30*4882a593Smuzhiyunpython set_gstreamer10_metapkg_rdepends () { 31*4882a593Smuzhiyun import os 32*4882a593Smuzhiyun import oe.utils 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun # Go through all generated packages (excluding the main package and 35*4882a593Smuzhiyun # the -meta package itself) and add them to the -meta package as RDEPENDS. 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun pn = d.getVar('PN') 38*4882a593Smuzhiyun metapkg = pn + '-meta' 39*4882a593Smuzhiyun d.setVar('ALLOW_EMPTY:' + metapkg, "1") 40*4882a593Smuzhiyun d.setVar('FILES:' + metapkg, "") 41*4882a593Smuzhiyun exclude = [ pn, pn + '-meta' ] 42*4882a593Smuzhiyun metapkg_rdepends = [] 43*4882a593Smuzhiyun pkgdest = d.getVar('PKGDEST') 44*4882a593Smuzhiyun for pkg in oe.utils.packages_filter_out_system(d): 45*4882a593Smuzhiyun if pkg not in exclude and pkg not in metapkg_rdepends: 46*4882a593Smuzhiyun # See if the package is empty by looking at the contents of its PKGDEST subdirectory. 47*4882a593Smuzhiyun # If this subdirectory is empty, then the package is. 48*4882a593Smuzhiyun # Empty packages do not get added to the meta package's RDEPENDS 49*4882a593Smuzhiyun pkgdir = os.path.join(pkgdest, pkg) 50*4882a593Smuzhiyun if os.path.exists(pkgdir): 51*4882a593Smuzhiyun dir_contents = os.listdir(pkgdir) or [] 52*4882a593Smuzhiyun else: 53*4882a593Smuzhiyun dir_contents = [] 54*4882a593Smuzhiyun is_empty = len(dir_contents) == 0 55*4882a593Smuzhiyun if not is_empty: 56*4882a593Smuzhiyun metapkg_rdepends.append(pkg) 57*4882a593Smuzhiyun d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends)) 58*4882a593Smuzhiyun d.setVar('DESCRIPTION:' + metapkg, pn + ' meta package') 59*4882a593Smuzhiyun} 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun# each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev 62*4882a593Smuzhiyun# so we need them even when empty (like in gst-plugins-good case) 63*4882a593SmuzhiyunALLOW_EMPTY:${PN} = "1" 64*4882a593SmuzhiyunALLOW_EMPTY:${PN}-dev = "1" 65*4882a593SmuzhiyunALLOW_EMPTY:${PN}-staticdev = "1" 66*4882a593Smuzhiyun 67*4882a593SmuzhiyunPACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib" 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunFILES:${PN} = "" 70*4882a593SmuzhiyunFILES:${PN}-apps = "${bindir}" 71*4882a593SmuzhiyunFILES:${PN}-glib = "${datadir}/glib-2.0" 72*4882a593Smuzhiyun 73*4882a593SmuzhiyunRRECOMMENDS:${PN} += "${PN}-meta" 74