diff --git a/README.md b/README.md index 02762928..7d2b4fad 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/audio/audiofx/Cargo.toml b/audio/audiofx/Cargo.toml index 844607de..6ae24349 100644 --- a/audio/audiofx/Cargo.toml +++ b/audio/audiofx/Cargo.toml @@ -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" diff --git a/audio/claxon/Cargo.toml b/audio/claxon/Cargo.toml index bf2fb8e0..531f4962 100644 --- a/audio/claxon/Cargo.toml +++ b/audio/claxon/Cargo.toml @@ -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" diff --git a/audio/csound/Cargo.toml b/audio/csound/Cargo.toml index f55ec236..8662773a 100644 --- a/audio/csound/Cargo.toml +++ b/audio/csound/Cargo.toml @@ -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" diff --git a/audio/lewton/Cargo.toml b/audio/lewton/Cargo.toml index 59022f62..ec1bfe78 100644 --- a/audio/lewton/Cargo.toml +++ b/audio/lewton/Cargo.toml @@ -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" diff --git a/generic/file/Cargo.toml b/generic/file/Cargo.toml index 60431ecc..8e36d482 100644 --- a/generic/file/Cargo.toml +++ b/generic/file/Cargo.toml @@ -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" diff --git a/generic/sodium/Cargo.toml b/generic/sodium/Cargo.toml index c1d2216b..0f6e2192 100644 --- a/generic/sodium/Cargo.toml +++ b/generic/sodium/Cargo.toml @@ -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" diff --git a/generic/threadshare/Cargo.toml b/generic/threadshare/Cargo.toml index 14ebe510..abb4ba7a 100644 --- a/generic/threadshare/Cargo.toml +++ b/generic/threadshare/Cargo.toml @@ -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" diff --git a/net/reqwest/Cargo.toml b/net/reqwest/Cargo.toml index 7dc52731..02df32b6 100644 --- a/net/reqwest/Cargo.toml +++ b/net/reqwest/Cargo.toml @@ -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" diff --git a/net/rusoto/Cargo.toml b/net/rusoto/Cargo.toml index a961e5a8..81695d86 100644 --- a/net/rusoto/Cargo.toml +++ b/net/rusoto/Cargo.toml @@ -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" diff --git a/text/wrap/Cargo.toml b/text/wrap/Cargo.toml index 5f93d25e..2254ffc7 100644 --- a/text/wrap/Cargo.toml +++ b/text/wrap/Cargo.toml @@ -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" diff --git a/tutorial/Cargo.toml b/tutorial/Cargo.toml index 05074ca3..880dea6b 100644 --- a/tutorial/Cargo.toml +++ b/tutorial/Cargo.toml @@ -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] diff --git a/utils/fallbackswitch/Cargo.toml b/utils/fallbackswitch/Cargo.toml index 8c24571a..854b51cf 100644 --- a/utils/fallbackswitch/Cargo.toml +++ b/utils/fallbackswitch/Cargo.toml @@ -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" diff --git a/utils/togglerecord/Cargo.toml b/utils/togglerecord/Cargo.toml index 685e8a2d..8981369a 100644 --- a/utils/togglerecord/Cargo.toml +++ b/utils/togglerecord/Cargo.toml @@ -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" diff --git a/video/cdg/Cargo.toml b/video/cdg/Cargo.toml index e5c73207..30db58d9 100644 --- a/video/cdg/Cargo.toml +++ b/video/cdg/Cargo.toml @@ -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" diff --git a/video/closedcaption/Cargo.toml b/video/closedcaption/Cargo.toml index edd3dad1..9646af5e 100644 --- a/video/closedcaption/Cargo.toml +++ b/video/closedcaption/Cargo.toml @@ -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" diff --git a/video/dav1d/Cargo.toml b/video/dav1d/Cargo.toml index 476fab14..98d63cb5 100644 --- a/video/dav1d/Cargo.toml +++ b/video/dav1d/Cargo.toml @@ -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" diff --git a/video/flavors/Cargo.toml b/video/flavors/Cargo.toml index aa2c6ddb..9da1c364 100644 --- a/video/flavors/Cargo.toml +++ b/video/flavors/Cargo.toml @@ -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" diff --git a/video/gif/Cargo.toml b/video/gif/Cargo.toml index f25283fe..430da848 100644 --- a/video/gif/Cargo.toml +++ b/video/gif/Cargo.toml @@ -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" diff --git a/video/hsv/Cargo.toml b/video/hsv/Cargo.toml index bdcf6b9d..45acbd34 100644 --- a/video/hsv/Cargo.toml +++ b/video/hsv/Cargo.toml @@ -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" \ No newline at end of file diff --git a/video/rav1e/Cargo.toml b/video/rav1e/Cargo.toml index 8e0d2f30..f1cf6c24 100644 --- a/video/rav1e/Cargo.toml +++ b/video/rav1e/Cargo.toml @@ -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" diff --git a/video/rspng/Cargo.toml b/video/rspng/Cargo.toml index 87a7c405..71095a40 100644 --- a/video/rspng/Cargo.toml +++ b/video/rspng/Cargo.toml @@ -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"