Crates.io | env-libvpx-sys |
lib.rs | env-libvpx-sys |
version | 5.1.3 |
source | src |
created_at | 2019-06-08 17:06:56.524408 |
updated_at | 2023-09-10 09:32:33.919517 |
description | Rust bindings to libvpx |
homepage | |
repository | https://github.com/astraw/env-libvpx-sys |
max_upload_size | |
id | 139842 |
size | 503,853 |
Rust bindings to libvpx.
The env-libvpx-sys
crate offers the following:
-sys
layer. VPX header files are wrapped with bindgen
and the native library is linked. However, no higher-level Rust interface is
provided. (See the vpx-encode crate for
a simple higher-level interface).generate
feature of this crate to generate FFI
on the fly for a custom version of libvpx.At compilation time, build.rs
determines how to link libvpx, including what
version to use.
pkg-config
find itThis scenario is the default and is used when the environment variable
VPX_LIB_DIR
is not set. In this case,
pkg-config
will attempt to
automatically discover libvpx.
If VPX_VERSION
is set, build.rs
will ensure that pkg-config
returns the
same version. If VPX_VERSION
is not set, the version returned by pkg-config
will be used.
Note that pkg-config
will check the VPX_STATIC
environment variable, and if
it is set, will attempt static linking.
In this scenario, set the following environment variables: VPX_LIB_DIR
,
VPX_INCLUDE_DIR
, and VPX_VERSION
appropriately. Caution: if VPX_VERSION
does not match the linked library
Additionally, VPX_STATIC
may be set to 1
to force static linking.
At one point, cargo features were considered as a means to select the library
version used. However, this meant
the final application binary would need to specify the library version used.
This would place a requirement on all crates in the dependency chain from the
final application binary to env-libvpx-sys
that they must explicitly depend on
env-libvpx-sys
(even if, as is very likely beyond a vpx wrapper crate such as
vpx-encode
) the intermediate or final
crate does not directly call into env-libvpx-sys
.
As an additional problem, because cargo features are additive, the possibility
for conflicting build requests with two sets of features would be possible in
this scenario. The present alternative, namely setting the environment variable
VPX_VERSION
, naturally enforces the selection of only a single version.
If the bindings for your version are not pre-generated in the generated/
directory, you may let bindgen
automatically generate them during the build process by using the generate
cargo feature.
To save your (re)generated bindings and commit them to this repository, build
using with the generate
cargo feature. The easiest way to do this is to use
the script regen-ffi.sh
(or regen-ffi.bat
on Windows). Then, copy the
generated file in target/debug/build/env-libvpx-sys-<hash>/out/ffi.rs
to
generated/vpx-ffi-<version>.rs
. Finally, add this file to version control.
This began as a fork of libvpx-native-sys with a fix to simplify working with Windows. Thanks to those authors!