How correctly distribute GStreamer package with Cerbero?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How correctly distribute GStreamer package with Cerbero?

givip
I have some source code, that should work with GStreamer version 1.17+ on
Ubuntu 16.04 LTS only.
Because the default version of GStreamer on this version of Ubuntu is 1.8.3,
I want to create a package with all necessary dependencies and my recipe's
binaries.

I'm trying to do this task about 3 days and not successfully yet, I assume,
because of lack of info and examples.

Some questions to guru:


1. Why *meson* build system doesn't put binaries to /bin/ folder and I have
to copy them manually? I defined explicitly /prefix/ option and /libdir/
directory, but anyway it builds everything to
/cerbero/build/sources/linux_x86_64/dd-stream-server-0.1/_builddir/. I
already know workaround for that, I need implement *post_install* method for
this recipe, but really this is the only way??

Without binary, *cerbero* tells me, that required binary wasn't found and I
had to copy if manually.

Meson.build code
```
project('dd-stream-server', 'c', default_options: ['libdir=lib' ,
'prefix=/home/givip/gst/cerbero/build/dist/linux_x86_64'])

gstreamer = dependency('gstreamer-1.0', method : 'pkg-config')
glib = dependency('glib-2.0', method : 'pkg-config')
gobject = dependency('gobject-2.0', method : 'pkg-config')
libffi_dep = dependency('libffi', version : '>= 3.0.0', fallback :
['libffi', 'ffi_dep'])

incdir = include_directories(
       
'/home/givip/gst/cerbero/build/dist/linux_x86_64/lib/gstreamer-1.0/include',
       
'/home/givip/gst/cerbero/build/dist/linux_x86_64/include/gstreamer-1.0/',
       
'/home/givip/gst/cerbero/build/dist/linux_x86_64/lib/glib-2.0/include',
        '/home/givip/gst/cerbero/build/dist/linux_x86_64/include/glib-2.0',
)

executable('dd-stream-server', 'stream-server.c', dependencies: [gstreamer,
glib, gobject, libffi_dep], include_directories: incdir)

```

2. I need to pack my app with exact versions of GStreamer's stuff into
package. But how I can figure out, what I need before I started creating
package? I had to start packaging process each time, check what depending
lib is missing, then add it to recipe and again start package. Whats I'm
doing wrong?
Also what is the sense of /deps/ in recipe file? I can delete it and nothing
changes....

Recipe code:
```
# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python


class Recipe(recipe.Recipe):
    name = 'dd-stream-server'
    version = '0.1'

    remotes = {
        'local': '~/gst/dd-stream-server'
    }
    commit = 'local/master'
    btype = BuildType.MESON

    use_system_libs = True

    deps = [
        'glib',
        'gstreamer-1.0',
        'gst-plugins-base-1.0',
        'gst-plugins-bad-1.0',
        'gst-plugins-good-1.0'
    ]

    files_libs = [
        'libglib-2.0',
        'libgobject-2.0',
        'libgstaudio-1.0',
        'libgsttag-1.0',
        'libgstvideo-1.0',
        'libspandsp',
        'libffi',
        'libgstrtp-1.0'
# I'm adding dependecies here only after $ cerbero pachage dd-stream
# fails and I see what library was the reason
    ]

    files_bins = ['dd-stream-server']
```

3. In Package class, with uncomment /deps/ var, *cerbero* starts to build
separately each dependency, as I understand, for creating one package with
everything, that I need I should put depedencies to /files/ var, is this
correct?

Package code:
```
# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python


class Package(package.Package):

    name = 'dd-stream'
    shortdesc = 'dd-stream'
    longdesc = 'plugin for capture'
    uuid = 'testuid'
    version = '0.1'

    # deps = [
    #     'gstreamer-1.0-codecs',
    #     'gstreamer-1.0-core',
    #     'gstreamer-1.0-net'
    # ]

    files = [
        'gstreamer-1.0',
        'dd-stream-server',
        'gst-plugins-base-1.0:plugins_core',
        'gst-plugins-good-1.0:plugins_capture',
        'gst-plugins-good-1.0:plugins_net',
        'gst-plugins-bad-1.0:plugins_codecs'
        ]
```



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How correctly distribute GStreamer package with Cerbero?

Marc Leeman
Just repackage GStreamer from a newer version of Ubuntu, we're doing
this all the time for Debian.

e.g. (using debian), if you want to re-compile the packages from sid
(1.16) to buster, add the following line in some sources file

deb-src http://www.debian.org/debian sid main contrib non-free

$ sudo apt-get update
$ apt-get source gstreamer1.0
$ cd gstreamer1.0-1.16.0
$ dch -l ~mybackport+ -m "backport to buster"
$ dch -r -D buster
$ sudo apt-get build-dep gstreamer1.0
$ fakeroot dpkg-buildpackage -sa

If you want to add patches of your own, just drop them in
debian/patches/ and adjust the debian/patches/series file




On Mon, 20 May 2019 at 06:26, givip <[hidden email]> wrote:

>
> I have some source code, that should work with GStreamer version 1.17+ on
> Ubuntu 16.04 LTS only.
> Because the default version of GStreamer on this version of Ubuntu is 1.8.3,
> I want to create a package with all necessary dependencies and my recipe's
> binaries.
>
> I'm trying to do this task about 3 days and not successfully yet, I assume,
> because of lack of info and examples.
>
> Some questions to guru:
>
>
> 1. Why *meson* build system doesn't put binaries to /bin/ folder and I have
> to copy them manually? I defined explicitly /prefix/ option and /libdir/
> directory, but anyway it builds everything to
> /cerbero/build/sources/linux_x86_64/dd-stream-server-0.1/_builddir/. I
> already know workaround for that, I need implement *post_install* method for
> this recipe, but really this is the only way??
>
> Without binary, *cerbero* tells me, that required binary wasn't found and I
> had to copy if manually.
>
> Meson.build code
> ```
> project('dd-stream-server', 'c', default_options: ['libdir=lib' ,
> 'prefix=/home/givip/gst/cerbero/build/dist/linux_x86_64'])
>
> gstreamer = dependency('gstreamer-1.0', method : 'pkg-config')
> glib = dependency('glib-2.0', method : 'pkg-config')
> gobject = dependency('gobject-2.0', method : 'pkg-config')
> libffi_dep = dependency('libffi', version : '>= 3.0.0', fallback :
> ['libffi', 'ffi_dep'])
>
> incdir = include_directories(
>
> '/home/givip/gst/cerbero/build/dist/linux_x86_64/lib/gstreamer-1.0/include',
>
> '/home/givip/gst/cerbero/build/dist/linux_x86_64/include/gstreamer-1.0/',
>
> '/home/givip/gst/cerbero/build/dist/linux_x86_64/lib/glib-2.0/include',
>         '/home/givip/gst/cerbero/build/dist/linux_x86_64/include/glib-2.0',
> )
>
> executable('dd-stream-server', 'stream-server.c', dependencies: [gstreamer,
> glib, gobject, libffi_dep], include_directories: incdir)
>
> ```
>
> 2. I need to pack my app with exact versions of GStreamer's stuff into
> package. But how I can figure out, what I need before I started creating
> package? I had to start packaging process each time, check what depending
> lib is missing, then add it to recipe and again start package. Whats I'm
> doing wrong?
> Also what is the sense of /deps/ in recipe file? I can delete it and nothing
> changes....
>
> Recipe code:
> ```
> # -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python
>
>
> class Recipe(recipe.Recipe):
>     name = 'dd-stream-server'
>     version = '0.1'
>
>     remotes = {
>         'local': '~/gst/dd-stream-server'
>     }
>     commit = 'local/master'
>     btype = BuildType.MESON
>
>     use_system_libs = True
>
>     deps = [
>         'glib',
>         'gstreamer-1.0',
>         'gst-plugins-base-1.0',
>         'gst-plugins-bad-1.0',
>         'gst-plugins-good-1.0'
>     ]
>
>     files_libs = [
>         'libglib-2.0',
>         'libgobject-2.0',
>         'libgstaudio-1.0',
>         'libgsttag-1.0',
>         'libgstvideo-1.0',
>         'libspandsp',
>         'libffi',
>         'libgstrtp-1.0'
> # I'm adding dependecies here only after $ cerbero pachage dd-stream
> # fails and I see what library was the reason
>     ]
>
>     files_bins = ['dd-stream-server']
> ```
>
> 3. In Package class, with uncomment /deps/ var, *cerbero* starts to build
> separately each dependency, as I understand, for creating one package with
> everything, that I need I should put depedencies to /files/ var, is this
> correct?
>
> Package code:
> ```
> # -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python
>
>
> class Package(package.Package):
>
>     name = 'dd-stream'
>     shortdesc = 'dd-stream'
>     longdesc = 'plugin for capture'
>     uuid = 'testuid'
>     version = '0.1'
>
>     # deps = [
>     #     'gstreamer-1.0-codecs',
>     #     'gstreamer-1.0-core',
>     #     'gstreamer-1.0-net'
>     # ]
>
>     files = [
>         'gstreamer-1.0',
>         'dd-stream-server',
>         'gst-plugins-base-1.0:plugins_core',
>         'gst-plugins-good-1.0:plugins_capture',
>         'gst-plugins-good-1.0:plugins_net',
>         'gst-plugins-bad-1.0:plugins_codecs'
>         ]
> ```
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



--
g. Marc
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel