<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">So can you resend the patchset, without any special tags (wip/rfc etc) please? To give it a run on the autobuilder.<br><br><div id="AppleMailSignature" dir="ltr">Alex</div><div dir="ltr"><br>On 19 Dec 2019, at 12.57, Carlos Rafael Giani &lt;<a href="mailto:crg7475@mailbox.org">crg7475@mailbox.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div dir="ltr">
  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
  
    <p>Well, alright, then let's merge this. You do have a point in that
      we are not close to a release. Plenty of time left to fix these
      issues afterwards.<br>
    </p>
    <div class="moz-cite-prefix">On 19.12.19 12:54, Alexander Kanavin
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:8F1B392E-EDDA-4F6E-ACB2-9CB112FF20BA@gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      I read them through now, and none of them are actually a big deal
      that need further discussion in my opinion. I’d rather get meson
      conversion done, and handle any issues afterwards.<br>
      <br>
      <div id="AppleMailSignature" dir="ltr">Alex</div>
      <div dir="ltr"><br>
        On 19 Dec 2019, at 12.46, Carlos Rafael Giani &lt;<a href="mailto:crg7475@mailbox.org" moz-do-not-send="true">crg7475@mailbox.org</a>&gt;
        wrote:<br>
        <br>
      </div>
      <blockquote type="cite">
        <div dir="ltr">
          <meta http-equiv="Content-Type" content="text/html;
            charset=UTF-8">
          <p>First we should discuss the leftover TODOs I think. Since
            these may not be trivial issues, it would be better to take
            a look at them and then decide on a case-by-case basis
            whether to fix them now or later.<br>
          </p>
          <p>For convenience, I copy-paste these bits from an older RFC
            email:</p>
          <p><br>
          </p>
          <p>========<br>
            <br>
            Noteworthy changes: <br>
            <br>
            - A lot of autotools/M4 related patches are just gone. Well,
            obviously <span class="moz-smiley-s1" title=":)"></span>
            But it is surprising just how much fewer patches there are
            now. <br>
            <br>
            - gstreamer1.0-libav no longer builds its own FFmpeg copy.
            This was done in the past because there were no stable
            versioned FFmpeg releases. They do exist now, so in meson
            based builds, gst-libav just builds the actual plugin code,
            meaning that the build time is much shorter, most of the
            recipe code (and all of the patches) are gone (because they
            were FFmpeg specific), and the libgstlibav.so binary in
            /usr/lib/gstreamer-1.0/ is much smaller. This also means
            that FFmpeg specials do not have to be added both to the
            FFmpeg and to the gstreamer1.0-libav recipe anymore. <br>
            <br>
            - gstreamer1.0-plugins.inc was replaced by
            gstreamer1.0-plugins-common.inc, and gst-plugins-package.inc
            by gstreamer1.0-plugins-packaging.inc . These names are
            clearer. gst-plugins-package.inc in particular was named
            that way because it used to be shared between GStreamer 0.10
            and 1.0 recipes. Since the former are gone by now, there's
            no point in keeping that name. <br>
            <br>
            - gstreamer1.0 ptest is now done differently. Originally,
            make was installed on the target and the Makefile was run by
            the run-ptest script. Now, gstreamer is patched to allow for
            installable tests that are accompanied by individual shell
            scripts that set up the necessary environment variables,
            along with .test files so that the gnome-desktop-testing
            test runner can be used in run-ptest to run the unit tests.
            This also makes it possible to inherit from ptest-gnome in
            the gstreamer1.0 recipe. The patch against gstreamer is
            necessary because by default, one runs the test by executing
            "meson test". I don't think installing meson along with all
            of the necessary meson.build scripts is a practical
            approach. <br>
            <br>
            - OpenGL packageconfigs now work quite differently in
            gstreamer1.0-plugins-base, since the meson options
            distinguish between OpenGL APIs, platforms, and windowing
            systems. <br>
            <br>
            - zlib in gstreamer1.0-plugins-base and -good is now
            required. I don't think this is a big deal, since it is also
            a dependency of GLib itself, so zlib has to be present on
            the rootfs anyway. <br>
            <br>
            <br>
            There are some TODOs left that I want to bring up here for
            discussion: <br>
            <br>
            - The aforementioned PTest approach needs some review. Also,
            initially, I thought I'd have to add PTest support to
            several GStreamer recipes, which is why I isolated the ptest
            code in gstreamer1.0-ptest.inc . But it turned out that only
            the gstreamer1.0 recipe needs it. I am unsure if I should
            just merge that .inc into that recipe, since there's no
            reason why the tests from other recipes shouldn't be
            "ptest-ified" in the future. And then that .inc would be
            useful to have. (Tests from the plugin sets may be partially
            tough to run, since some of them create X11 windows etc.) <br>
            <br>
            - The code in gstreamer1.0-ptest.inc sets up run-ptest in a
            rather uncommon way, since that file has to be
            autogenerated. <br>
            <br>
            - gstreamer1.0_1.16.1.bb and gstreamer1.0-plugins-common.inc
            both contain a "gettext_oemeson" function to set up meson
            NLS options. Ideally, this functionality would be part of
            the gettext bbclass itself. However, my bitbake/OE knowledge
            does not suffice to do that, since with meson, you want to
            be able to configure what the enable/disable flags should be
            ("enabled"/"disabled", "true"/"false" etc.); that's why for
            example the gtk-doc bbclass defines GTKDOC_MESON_OPTION,
            GTKDOC_MESON_ENABLE_FLAG, GTKDOC_MESON_DISABLE_FLAG. I am
            not sure how to combine such variables with this kind of
            custom python code, and still allow for customized values in
            other recipes. In other words, if I first get a
            "NLS_MESON_DISABLE_FLAG" value with getValue() in a modified
            gettext_oemeson function, then I might not get the value I
            expect, since it will get the initial value (the one set
            with ?=), not necessarily the one that is redefined by a
            recipe. <br>
            <br>
            - The OpenGL packageconfigs are handled by a
            get_opengl_cmdline_list function in
            gstreamer1.0-plugins-base_1.16.1.bb . I did this so that a
            comma-separated list can be generated out of the
            packageconfigs that are (a) part of PACKAGECONFIG and (b)
            part of the newly added
            OPENGL_APIS/OPENGL_PLATFORMS/OPENGL_WINSYS lists. I do not
            know if there's a better approach for this. The intent is
            that other layers (most notably BSP layers) can add custom
            packageconfig names to these lists. One example would be
            OPENGL_WINSYS += "viv-fb" in meta-freescale. Another would
            be OPENGL_WINSYS += "dispmanx" in meta-raspberrypi. <br>
            <br>
            - gstreamer1.0-python_1.16.1.bb currently has a problem in
            that the gst-python code tries to load
            /usr/lib/libpython3.7m.so. But, in a regular installation,
            only /usr/lib/libpython3.7m.so.1.0 would be availale. It is
            possible to adjust the libpython path &amp; name during the
            build. But - what would it be adjusted to? How would the
            recipe know that "/usr/lib/libpython3.7m.so.1.0" is the
            correct choice? Or perhaps would it make sense to add the
            /usr/lib/libpython3.7m.so symlink to the regular (as in:
            non-dev) Python package? </p>
          <p>========<br>
          </p>
          <p><br>
          </p>
          <p><br>
          </p>
          On 18.12.19 22:14, Alexander Kanavin wrote:<br>
          <blockquote type="cite" cite="mid:CANNYZj9LUKtJ9JcnyuAktOsco7_4euTVwHz2P5hrpk8Pcj8EBA@mail.gmail.com">
            <meta http-equiv="content-type" content="text/html;
              charset=UTF-8">
            <div dir="ltr">
              <div>Thanks :) Will there be a more refined version, or
                should these be merged already, with followup fixing as
                needed?</div>
              <div><br>
              </div>
              <div>Alex<br>
              </div>
            </div>
            <br>
            <div class="gmail_quote">
              <div dir="ltr" class="gmail_attr">On Sun, 15 Dec 2019 at
                13:55, Carlos Rafael Giani &lt;<a href="mailto:crg7475@mailbox.org" moz-do-not-send="true">crg7475@mailbox.org</a>&gt;
                wrote:<br>
              </div>
              <blockquote class="gmail_quote" style="margin:0px 0px 0px
                0.8ex;border-left:1px solid
                rgb(204,204,204);padding-left:1ex">*
                gstreamer1.0-plugins-common.inc<br>
                &nbsp; The old gstreamer1.0-plugins.inc file, adapted for
                meson<br>
                * gstreamer1.0-plugins-packaging.inc<br>
                &nbsp; The old gst-plugins-package.inc file, adapted for
                meson<br>
                * gstreamer1.0-ptest.inc<br>
                &nbsp; Common code for meson based PTest support;
                autogenerates the run-ptest<br>
                &nbsp; file and is designed to use the gnome-desktop-testing
                suite runner<br>
                &nbsp; (which is why the .inc files inherits from
                ptest-gnome)<br>
                <br>
                Signed-off-by: Carlos Rafael Giani &lt;<a href="mailto:crg7475@mailbox.org" target="_blank" moz-do-not-send="true">crg7475@mailbox.org</a>&gt;<br>
                ---<br>
                &nbsp;.../gstreamer/gstreamer1.0-plugins-common.inc | 47
                +++++++++++++<br>
                &nbsp;.../gstreamer1.0-plugins-packaging.inc&nbsp; &nbsp; &nbsp; &nbsp; | 70
                +++++++++++++++++++<br>
                &nbsp;.../gstreamer/gstreamer1.0-ptest.inc&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 21
                ++++++<br>
                &nbsp;3 files changed, 138 insertions(+)<br>
                &nbsp;create mode 100644
                meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc<br>
                &nbsp;create mode 100644
                meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc<br>
                &nbsp;create mode 100644
                meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc<br>
                <br>
                diff --git
                a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc
b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc<br>
                new file mode 100644<br>
                index 0000000000..ccf55500a9<br>
                --- /dev/null<br>
                +++
                b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc<br>
                @@ -0,0 +1,47 @@<br>
                +# This .inc file contains the common setup for the
                gstreamer1.0-plugins-*<br>
                +# plugin set recipes.<br>
                +<br>
                +# SUMMARY is set in the actual .bb recipes<br>
                +HOMEPAGE = "<a href="https://gstreamer.freedesktop.org/" rel="noreferrer" target="_blank" moz-do-not-send="true">https://gstreamer.freedesktop.org/</a>"<br>
                +BUGTRACKER = "<a href="https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" rel="noreferrer" target="_blank" moz-do-not-send="true">https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer</a>"<br>
                +SECTION = "multimedia"<br>
                +<br>
                +DEPENDS = "gstreamer1.0 glib-2.0-native"<br>
                +<br>
                +inherit gettext meson pkgconfig
                upstream-version-is-even<br>
                +<br>
                +require gstreamer1.0-plugins-packaging.inc<br>
                +<br>
                +# Orc enables runtime JIT compilation of data
                processing routines from Orc<br>
                +# bytecode to SIMD instructions for various
                architectures (currently SSE, MMX,<br>
                +# MIPS, Altivec and NEON are supported).<br>
                +# This value is used in the PACKAGECONFIG values for
                each plugin set recipe.<br>
                +# By modifying it, Orc can be enabled/disabled in all
                of these recipes at once.<br>
                +GSTREAMER_ORC ?= "orc"<br>
                +<br>
                +PACKAGECONFIG[orc] = "-Dorc=enabled,-Dorc=disabled,orc
                orc-native"<br>
                +<br>
                +# TODO: put this in a gettext.bbclass patch (with
                variables to allow for<br>
                +# configuring the option name and the enabled/disabled
                values).<br>
                +def gettext_oemeson(d):<br>
                +&nbsp; &nbsp; if d.getVar('USE_NLS') == 'no':<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; return '-Dnls=disabled'<br>
                +&nbsp; &nbsp; # Remove the NLS bits if USE_NLS is no or
                INHIBIT_DEFAULT_DEPS is set<br>
                +&nbsp; &nbsp; if d.getVar('INHIBIT_DEFAULT_DEPS') and not
                oe.utils.inherits(d, 'cross-canadian'):<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; return '-Dnls=disabled'<br>
                +&nbsp; &nbsp; return '-Dnls=enabled'<br>
                +<br>
                +# Not all plugin sets contain examples, so the
                -Dexamples<br>
                +# option needs to be added conditionally.<br>
                +GST_PLUGIN_SET_HAS_EXAMPLES ?= "1"<br>
                +<br>
                +EXTRA_OEMESON += " \<br>
                +&nbsp; &nbsp; ${@bb.utils.contains('GST_PLUGIN_SET_HAS_EXAMPLES',
                '1', '-Dexamples=disabled', '', d)} \<br>
                +&nbsp; &nbsp; ${@gettext_oemeson(d)} \<br>
                +"<br>
                +<br>
                +GIR_MESON_ENABLE_FLAG = "enabled"<br>
                +GIR_MESON_DISABLE_FLAG = "disabled"<br>
                +<br>
                +# Dynamically generate packages for all enabled plugins<br>
                +PACKAGES_DYNAMIC = "^${PN}-.*"<br>
                diff --git
                a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc
b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc<br>
                new file mode 100644<br>
                index 0000000000..9a7a1b6afe<br>
                --- /dev/null<br>
                +++
                b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc<br>
                @@ -0,0 +1,70 @@<br>
                +# This .inc file contains functionality for
                automatically splitting<br>
                +# built plugins into individual packages for each
                plugin. A -meta<br>
                +# package is also set up that has no files of its own,
                but contains<br>
                +# the names of all plugin packages in its RDEPENDS
                list.<br>
                +#<br>
                +# This is mainly used by the gstreamer1.0-plugins-*
                plugin set recipes,<br>
                +# but can be used in any recipe that produces GStreamer
                plugins.<br>
                +<br>
                +PACKAGESPLITFUNCS_prepend = "
                split_gstreamer10_packages "<br>
                +PACKAGESPLITFUNCS_append = "
                set_gstreamer10_metapkg_rdepends "<br>
                +<br>
                +python split_gstreamer10_packages () {<br>
                +&nbsp; &nbsp; gst_libdir = d.expand('${libdir}/gstreamer-1.0')<br>
                +&nbsp; &nbsp; postinst = d.getVar('plugin_postinst')<br>
                +&nbsp; &nbsp; glibdir = d.getVar('libdir')<br>
                +<br>
                +&nbsp; &nbsp; # GStreamer libraries<br>
                +&nbsp; &nbsp; do_split_packages(d, glibdir, r'^lib(.*)\.so\.*',
                'lib%s', 'GStreamer 1.0 %s library', extra_depends='',
                allow_links=True)<br>
                +&nbsp; &nbsp; # GStreamer plugin shared objects<br>
                +&nbsp; &nbsp; do_split_packages(d, gst_libdir,
                r'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer 1.0
                plugin for %s', postinst=postinst, extra_depends='')<br>
                +&nbsp; &nbsp; # GObject introspection files for GStreamer plugins<br>
                +&nbsp; &nbsp; 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='')<br>
                +&nbsp; &nbsp; # Static GStreamer libraries for development<br>
                +&nbsp; &nbsp; 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')<br>
                +}<br>
                +<br>
                +python set_gstreamer10_metapkg_rdepends () {<br>
                +&nbsp; &nbsp; import os<br>
                +&nbsp; &nbsp; import oe.utils<br>
                +<br>
                +&nbsp; &nbsp; # Go through all generated packages (excluding the
                main package and<br>
                +&nbsp; &nbsp; # the -meta package itself) and add them to the
                -meta package as RDEPENDS.<br>
                +<br>
                +&nbsp; &nbsp; pn = d.getVar('PN')<br>
                +&nbsp; &nbsp; metapkg =&nbsp; pn + '-meta'<br>
                +&nbsp; &nbsp; d.setVar('ALLOW_EMPTY_' + metapkg, "1")<br>
                +&nbsp; &nbsp; d.setVar('FILES_' + metapkg, "")<br>
                +&nbsp; &nbsp; blacklist = [ pn, pn + '-meta' ]<br>
                +&nbsp; &nbsp; metapkg_rdepends = []<br>
                +&nbsp; &nbsp; pkgdest = d.getVar('PKGDEST')<br>
                +&nbsp; &nbsp; for pkg in oe.utils.packages_filter_out_system(d):<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; if pkg not in blacklist and pkg not in
                metapkg_rdepends:<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # See if the package is empty by looking at
                the contents of its PKGDEST subdirectory.<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # If this subdirectory is empty, then the
                package is.<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Empty packages do not get added to the
                meta package's RDEPENDS<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pkgdir = os.path.join(pkgdest, pkg)<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if os.path.exists(pkgdir):<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dir_contents = os.listdir(pkgdir) or []<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dir_contents = []<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; is_empty = len(dir_contents) == 0<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not is_empty:<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; metapkg_rdepends.append(pkg)<br>
                +&nbsp; &nbsp; d.setVar('RDEPENDS_' + metapkg, '
                '.join(metapkg_rdepends))<br>
                +&nbsp; &nbsp; d.setVar('DESCRIPTION_' + metapkg, pn + ' meta
                package')<br>
                +}<br>
                +<br>
                +# each plugin-dev depends on PN-dev, plugin-staticdev
                on PN-staticdev<br>
                +# so we need them even when empty (like in
                gst-plugins-good case)<br>
                +ALLOW_EMPTY_${PN} = "1"<br>
                +ALLOW_EMPTY_${PN}-dev = "1"<br>
                +ALLOW_EMPTY_${PN}-staticdev = "1"<br>
                +<br>
                +PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib"<br>
                +<br>
                +FILES_${PN} = ""<br>
                +FILES_${PN}-apps = "${bindir}"<br>
                +FILES_${PN}-glib = "${datadir}/glib-2.0"<br>
                +<br>
                +RRECOMMENDS_${PN} += "${PN}-meta"<br>
                diff --git
                a/meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc
b/meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc<br>
                new file mode 100644<br>
                index 0000000000..74368c4cd8<br>
                --- /dev/null<br>
                +++
                b/meta/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc<br>
                @@ -0,0 +1,21 @@<br>
                +inherit ptest-gnome<br>
                +<br>
                +TEST_FILES_PATH =
                "${datadir}/installed-tests/gstreamer-1.0/test-files"<br>
                +RUN_PTEST_FILE = "${D}${PTEST_PATH}/run-ptest"<br>
                +<br>
                +EXTRA_OEMESON += "-Dtest-files-path=${TEST_FILES_PATH}"<br>
                +<br>
                +# Using do_install_ptest_base instead of
                do_install_ptest, since<br>
                +# the default do_install_ptest_base is hardcoded to
                expect Makefiles.<br>
                +do_install_ptest_base() {<br>
                +&nbsp; &nbsp; # Generate run-ptest file<br>
                +&nbsp; &nbsp; echo "#!/usr/bin/env sh" &gt; "${RUN_PTEST_FILE}"<br>
                +&nbsp; &nbsp; echo "gnome-desktop-testing-runner
                ${GST_TEST_SUITE_NAME}" &gt;&gt; "${RUN_PTEST_FILE}"<br>
                +&nbsp; &nbsp; chmod 0755 "${RUN_PTEST_FILE}"<br>
                +<br>
                +&nbsp; &nbsp; # Install additional files required by tests<br>
                +&nbsp; &nbsp; if [ -d "${S}/tests/files" ] ; then<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; install -d "${D}/${TEST_FILES_PATH}"<br>
                +&nbsp; &nbsp; &nbsp; &nbsp; install -m 0644 "${S}/tests/files"/*
                "${D}/${TEST_FILES_PATH}"<br>
                +&nbsp; &nbsp; fi<br>
                +}<br>
                -- <br>
                2.17.1<br>
                <br>
                -- <br>
                _______________________________________________<br>
                Openembedded-core mailing list<br>
                <a href="mailto:Openembedded-core@lists.openembedded.org" target="_blank" moz-do-not-send="true">Openembedded-core@lists.openembedded.org</a><br>
                <a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank" moz-do-not-send="true">http://lists.openembedded.org/mailman/listinfo/openembedded-core</a><br>
              </blockquote>
            </div>
          </blockquote>
        </div>
      </blockquote>
    </blockquote>
  

</div></blockquote></body></html>