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