Merge pull request #4434 from selfisekai/pkg-config
allow building with pkg-config libraries
This commit is contained in:
commit
93cf942b1c
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -3558,9 +3558,10 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "magnum-opus"
|
name = "magnum-opus"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "git+https://github.com/rustdesk/magnum-opus#79be072c939168e907fe851690759dcfd6a326af"
|
source = "git+https://github.com/rustdesk/magnum-opus#5cd2bf989c148662fa3a2d9d539a71d71fd1d256"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bindgen 0.59.2",
|
"bindgen 0.59.2",
|
||||||
|
"pkg-config",
|
||||||
"target_build_utils",
|
"target_build_utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -5431,6 +5432,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"ndk 0.7.0",
|
"ndk 0.7.0",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
|
"pkg-config",
|
||||||
"quest",
|
"quest",
|
||||||
"repng",
|
"repng",
|
||||||
"serde 1.0.163",
|
"serde 1.0.163",
|
||||||
|
@ -32,6 +32,7 @@ mediacodec = ["scrap/mediacodec"]
|
|||||||
linux_headless = ["pam" ]
|
linux_headless = ["pam" ]
|
||||||
virtual_display_driver = ["virtual_display"]
|
virtual_display_driver = ["virtual_display"]
|
||||||
plugin_framework = []
|
plugin_framework = []
|
||||||
|
linux-pkg-config = ["magnum-opus/linux-pkg-config", "scrap/linux-pkg-config"]
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ edition = "2018"
|
|||||||
[features]
|
[features]
|
||||||
wayland = ["gstreamer", "gstreamer-app", "gstreamer-video", "dbus", "tracing"]
|
wayland = ["gstreamer", "gstreamer-app", "gstreamer-video", "dbus", "tracing"]
|
||||||
mediacodec = ["ndk"]
|
mediacodec = ["ndk"]
|
||||||
|
linux-pkg-config = ["dep:pkg-config"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
block = "0.1"
|
block = "0.1"
|
||||||
@ -43,6 +44,7 @@ quest = "0.3"
|
|||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
target_build_utils = "0.3"
|
target_build_utils = "0.3"
|
||||||
bindgen = "0.65"
|
bindgen = "0.65"
|
||||||
|
pkg-config = { version = "0.3.27", optional = true }
|
||||||
|
|
||||||
[target.'cfg(target_os = "linux")'.dependencies]
|
[target.'cfg(target_os = "linux")'.dependencies]
|
||||||
dbus = { version = "0.9", optional = true }
|
dbus = { version = "0.9", optional = true }
|
||||||
|
@ -1,8 +1,28 @@
|
|||||||
use std::{
|
use std::{
|
||||||
env, fs,
|
env, fs,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
|
println,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(all(target_os = "linux", feature = "linux-pkg-config"))]
|
||||||
|
fn link_pkg_config(name: &str) -> Vec<PathBuf> {
|
||||||
|
// sometimes an override is needed
|
||||||
|
let pc_name = match name {
|
||||||
|
"libvpx" => "vpx",
|
||||||
|
_ => name,
|
||||||
|
};
|
||||||
|
let lib = pkg_config::probe_library(pc_name)
|
||||||
|
.expect(format!(
|
||||||
|
"unable to find '{pc_name}' development headers with pkg-config (feature linux-pkg-config is enabled).
|
||||||
|
try installing '{pc_name}-dev' from your system package manager.").as_str());
|
||||||
|
|
||||||
|
lib.include_paths
|
||||||
|
}
|
||||||
|
#[cfg(not(all(target_os = "linux", feature = "linux-pkg-config")))]
|
||||||
|
fn link_pkg_config(_name: &str) -> Vec<PathBuf> {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
/// Link vcppkg package.
|
/// Link vcppkg package.
|
||||||
fn link_vcpkg(mut path: PathBuf, name: &str) -> PathBuf {
|
fn link_vcpkg(mut path: PathBuf, name: &str) -> PathBuf {
|
||||||
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
|
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
|
||||||
@ -102,8 +122,16 @@ fn link_homebrew_m1(name: &str) -> PathBuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Find package. By default, it will try to find vcpkg first, then homebrew(currently only for Mac M1).
|
/// Find package. By default, it will try to find vcpkg first, then homebrew(currently only for Mac M1).
|
||||||
|
/// If building for linux and feature "linux-pkg-config" is enabled, will try to use pkg-config
|
||||||
|
/// unless check fails (e.g. NO_PKG_CONFIG_libyuv=1)
|
||||||
fn find_package(name: &str) -> Vec<PathBuf> {
|
fn find_package(name: &str) -> Vec<PathBuf> {
|
||||||
if let Ok(vcpkg_root) = std::env::var("VCPKG_ROOT") {
|
let no_pkg_config_var_name = format!("NO_PKG_CONFIG_{name}");
|
||||||
|
println!("cargo:rerun-if-env-changed={no_pkg_config_var_name}");
|
||||||
|
if cfg!(all(target_os = "linux", feature = "linux-pkg-config"))
|
||||||
|
&& std::env::var(no_pkg_config_var_name).as_deref() != Ok("1") {
|
||||||
|
|
||||||
|
link_pkg_config(name)
|
||||||
|
} else if let Ok(vcpkg_root) = std::env::var("VCPKG_ROOT") {
|
||||||
vec![link_vcpkg(vcpkg_root.into(), name)]
|
vec![link_vcpkg(vcpkg_root.into(), name)]
|
||||||
} else {
|
} else {
|
||||||
// Try using homebrew
|
// Try using homebrew
|
||||||
|
Loading…
x
Reference in New Issue
Block a user