use cargo-c to produce cdy and static libs

cargo-c will produce a pkg-config file making it easier to statically
link plugins.

Also add 'static' features for plugins depending on < 1.14 as this is the
minimal required version to use static linking because of ABI changes in
core.
This commit is contained in:
Guillaume Desmottes 2020-11-26 16:07:41 +01:00
parent fc1bae347e
commit 8bc2e5ebb8
22 changed files with 388 additions and 21 deletions

View file

@ -68,6 +68,37 @@ You will find the following plugins in this repository:
- `togglerecord`: Element to enable starting and stopping multiple
streams together.
## Building
gst-plugins-rs relies on [cargo-c](https://github.com/lu-zero/cargo-c/) to
generate shared and static C libraries. It can be installed using:
```
$ cargo install cargo-c
```
Then you can easily build and test a specific plugin:
```
$ cargo cbuild --manifest-path video/cdg/Cargo.toml
$ GST_PLUGIN_PATH=$GST_PLUGIN_PATH:target/debug gst-inspect-1.0 cdgdec
```
The plugin can also be installed system-wide:
```
$ cargo cbuild --manifest-path video/cdg/Cargo.toml --prefix=/usr
$ cargo cinstall --manifest-path video/cdg/Cargo.toml --prefix=/usr
```
This will install the plugin to `/usr/lib/gstreamer-1.0`.
You can use `--libdir` to pass a custom `lib` directory
such as `/usr/lib/x86_64-linux-gnu` for example.
Note that you can also just use `cargo` directly to build Rust static libraries
and shared C libraries. `cargo-c` is mostly useful to build static C libraries
and generate `pkg-config` files.
## LICENSE
gst-plugins-rs and all crates contained in here that are not listed below are

View file

@ -20,7 +20,7 @@ nnnoiseless = { version = "0.3", default-features = false }
[lib]
name = "gstrsaudiofx"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[dev-dependencies]
@ -29,3 +29,20 @@ gst-app = { package = "gstreamer-app", git = "https://gitlab.freedesktop.org/gst
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gstreamer-audio-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -20,8 +20,25 @@ gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstclaxon"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-audio-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -21,7 +21,7 @@ gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstcsound"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[[example]]
@ -30,3 +30,20 @@ path = "examples/effect_example.rs"
[build-dependencies]
gst-plugin-version-helper = { path = "../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gstreamer-audio-1.0, gobject-2.0, glib-2.0, gmodule-2.0, csound"

View file

@ -21,8 +21,25 @@ gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstlewton"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-audio-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -16,8 +16,25 @@ once_cell = "1.0"
[lib]
name = "gstrsfile"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -35,7 +35,7 @@ package="gstreamer-app"
[lib]
name = "gstsodium"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[[example]]
@ -55,3 +55,20 @@ required-features = ["serde", "serde_json", "clap"]
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gobject-2.0, glib-2.0, gmodule-2.0, libsodium"

View file

@ -33,7 +33,7 @@ gst-app = { package = "gstreamer-app", git = "https://gitlab.freedesktop.org/gst
[lib]
name = "gstthreadshare"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[[example]]
@ -52,3 +52,20 @@ path = "examples/tcpclientsrc_benchmark_sender.rs"
gst-plugin-version-helper = { path="../../version-helper" }
cc = "1.0.38"
pkg-config = "0.3.15"
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-net-1.0, gstreamer-rtp-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -24,8 +24,25 @@ hyper = "0.13"
[lib]
name = "gstreqwest"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -34,8 +34,25 @@ atomic_refcell = "0.1"
[lib]
name = "gstrusoto"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gobject-2.0, glib-2.0, gmodule-2.0, libssl"

View file

@ -20,7 +20,7 @@ package="gstreamer"
[lib]
name = "gstrstextwrap"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
@ -29,3 +29,20 @@ gst-plugin-version-helper = { path="../../version-helper" }
[dev-dependencies.gst-check]
git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"
package="gstreamer-check"
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -19,7 +19,7 @@ once_cell = "1.0"
[lib]
name = "gstrstutorial"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]

View file

@ -24,7 +24,7 @@ gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstfallbackswitch"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[[example]]
@ -40,3 +40,18 @@ pkg-config = "0.3"
[features]
default = ["libc"]
v1_18 = ["gst-base/v1_18"]
# We already use 1.14 which is new enough for static build
static = []
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -23,7 +23,7 @@ either = "1.0"
[lib]
name = "gsttogglerecord"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[[example]]
@ -33,3 +33,20 @@ required-features = ["gtk", "gio"]
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-audio-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -23,8 +23,25 @@ gst-app = { package = "gstreamer-app", git = "https://gitlab.freedesktop.org/gst
[lib]
name = "gstcdg"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -45,9 +45,26 @@ package="gstreamer-check"
[lib]
name = "gstrsclosedcaption"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
cc = "1.0"
[features]
# We already use 1.16 which is new enough for static build
static = []
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0, pango, pangocairo, cairo-gobject"

View file

@ -17,7 +17,7 @@ once_cell = "1.0"
[lib]
name = "gstrsdav1d"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
@ -25,3 +25,18 @@ gst-plugin-version-helper = { path = "../../version-helper" }
[features]
build = ["dav1d/build"]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0, dav1d"

View file

@ -21,8 +21,25 @@ smallvec = "1.0"
[lib]
name = "gstrsflv"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -20,7 +20,7 @@ gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstgif"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[[example]]
@ -29,3 +29,20 @@ path = "examples/testvideosrc2gif.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -23,8 +23,25 @@ gst_check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gsthsv"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-base-1.0, gstreamer-video-1.0, gstreamer-audio-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -20,8 +20,25 @@ gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstrav1e"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0"

View file

@ -21,8 +21,25 @@ gst_check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org
[lib]
name = "gstrspng"
crate-type = ["cdylib", "rlib", "staticlib"]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
[build-dependencies]
gst-plugin-version-helper = { path="../../version-helper" }
[features]
# GStreamer 1.14 is required for static linking
static = ["gst/v1_14"]
[package.metadata.capi]
min_version = "0.7.0"
[package.metadata.capi.header]
enabled = false
[package.metadata.capi.library]
install_subdir = "gstreamer-1.0"
versioning = false
[package.metadata.capi.pkg_config]
requires_private = "gstreamer-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0"