xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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