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]] | ||||
| name = "magnum-opus" | ||||
| version = "0.4.0" | ||||
| source = "git+https://github.com/rustdesk/magnum-opus#79be072c939168e907fe851690759dcfd6a326af" | ||||
| source = "git+https://github.com/rustdesk/magnum-opus#5cd2bf989c148662fa3a2d9d539a71d71fd1d256" | ||||
| dependencies = [ | ||||
|  "bindgen 0.59.2", | ||||
|  "pkg-config", | ||||
|  "target_build_utils", | ||||
| ] | ||||
| 
 | ||||
| @ -5431,6 +5432,7 @@ dependencies = [ | ||||
|  "log", | ||||
|  "ndk 0.7.0", | ||||
|  "num_cpus", | ||||
|  "pkg-config", | ||||
|  "quest", | ||||
|  "repng", | ||||
|  "serde 1.0.163", | ||||
|  | ||||
| @ -32,6 +32,7 @@ mediacodec = ["scrap/mediacodec"] | ||||
| linux_headless = ["pam" ] | ||||
| virtual_display_driver = ["virtual_display"] | ||||
| 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 | ||||
| 
 | ||||
|  | ||||
| @ -12,6 +12,7 @@ edition = "2018" | ||||
| [features] | ||||
| wayland = ["gstreamer", "gstreamer-app", "gstreamer-video", "dbus", "tracing"] | ||||
| mediacodec = ["ndk"] | ||||
| linux-pkg-config = ["dep:pkg-config"] | ||||
| 
 | ||||
| [dependencies] | ||||
| block = "0.1" | ||||
| @ -43,6 +44,7 @@ quest = "0.3" | ||||
| [build-dependencies] | ||||
| target_build_utils = "0.3" | ||||
| bindgen = "0.65" | ||||
| pkg-config = { version = "0.3.27", optional = true } | ||||
| 
 | ||||
| [target.'cfg(target_os = "linux")'.dependencies] | ||||
| dbus = { version = "0.9", optional = true } | ||||
|  | ||||
| @ -1,8 +1,28 @@ | ||||
| use std::{ | ||||
|     env, fs, | ||||
|     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.
 | ||||
| fn link_vcpkg(mut path: PathBuf, name: &str) -> PathBuf { | ||||
|     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).
 | ||||
| /// 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> { | ||||
|     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)] | ||||
|     } else { | ||||
|         // Try using homebrew
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user