@@ -836,6 +836,54 @@ impl Config {
836836 let mut libraries = self . probe_pkg_config ( ) ?;
837837 libraries. override_from_flags ( & self . env ) ;
838838
839+ // TODO: Generate shared library
840+ // This doesn't work, multiple symbols
841+ //#[cfg(feature = "binary")]
842+ //if libraries.libs.contains_key("gstreamer_1_0") {
843+ // let out_dir = env::var("OUT_DIR").unwrap();
844+ // let mut library = Library::from_env_variables("gstreamer-full");
845+ //
846+ // let mut cc = cc::Build::new();
847+ //
848+ // cc.shared_flag(true).flag("-Wl,--whole-archive");
849+ //
850+ // for (_, lib) in libraries.libs.drain() {
851+ // lib.link_paths.iter().for_each(|l| {
852+ // cc.flag(format!("-L{}", l.to_string_lossy()));
853+ // });
854+ // lib.libs.iter().for_each(|l| {
855+ // if lib.statik && l.is_static_available {
856+ // cc.flag("-Wl,-Bstatic");
857+ // } else {
858+ // cc.flag("-Wl,-Bdynamic");
859+ // }
860+ // cc.flag(format!("-l{}", l.name));
861+ // });
862+ // lib.ld_args.iter().for_each(|f| {
863+ // cc.flag(f.join(" "));
864+ // });
865+ //
866+ // library.include_paths.extend(lib.include_paths);
867+ // }
868+ //
869+ // let lib_path = format!("{}/libgstreamer-full.so", out_dir);
870+ // library.libs = vec![InternalLib::new("gstreamer-full".into(), true)];
871+ // library.link_paths = vec![PathBuf::from(out_dir)];
872+ //
873+ // let mut cmd = cc
874+ // .flag("-Wl,--no-whole-archive")
875+ // .flag("-Wl,-Bdynamic")
876+ // .flag("-o")
877+ // .flag(lib_path)
878+ // .get_compiler()
879+ // .to_command();
880+ //
881+ // println!("cargo:warning={:?}", cmd);
882+ // cmd.status().unwrap();
883+ //
884+ // libraries.libs.insert("gstreamer-full".into(), library);
885+ //}
886+
839887 Ok ( libraries)
840888 }
841889
@@ -934,9 +982,10 @@ impl Config {
934982 combined_pkg_config_path. extend_from_slice ( & pkg_config_path) ;
935983
936984 // should the lib be statically linked?
937- let statik = self
938- . env
939- . has_value ( & EnvVariable :: new_link ( Some ( name) ) , "static" )
985+ let statik = cfg ! ( feature = "binary" )
986+ || self
987+ . env
988+ . has_value ( & EnvVariable :: new_link ( Some ( name) ) , "static" )
940989 || self . env . has_value ( & EnvVariable :: new_link ( None ) , "static" ) ;
941990
942991 let mut library = if self . env . contains ( & EnvVariable :: new_no_pkg_config ( name) ) {
@@ -1261,25 +1310,29 @@ impl Library {
12611310 F : FnOnce ( ) -> Result < R , pkg_config:: Error > ,
12621311 {
12631312 // Save current PKG_CONFIG_PATH, so we can restore it
1264- let old = env:: var ( "PKG_CONFIG_PATH" ) ;
1265- let old_paths = old
1313+ let prev = env:: var ( "PKG_CONFIG_PATH" ) . ok ( ) ;
1314+ let prev_paths = prev
12661315 . as_ref ( )
12671316 . map ( env:: split_paths)
1268- . unwrap ( )
1317+ . into_iter ( )
1318+ . flatten ( )
12691319 . collect :: < Vec < _ > > ( ) ;
12701320
12711321 let paths = env:: join_paths (
12721322 pkg_config_dir
12731323 . iter ( )
12741324 . map ( |p| p. as_ref ( ) )
1275- . chain ( old_paths . iter ( ) . map ( |p| p. as_os_str ( ) ) ) ,
1325+ . chain ( prev_paths . iter ( ) . map ( |p| p. as_os_str ( ) ) ) ,
12761326 )
12771327 . unwrap ( ) ;
1328+
12781329 env:: set_var ( "PKG_CONFIG_PATH" , paths) ;
12791330
12801331 let res = f ( ) ;
12811332
1282- env:: set_var ( "PKG_CONFIG_PATH" , old. unwrap_or_else ( |_| "" . into ( ) ) ) ;
1333+ if let Some ( prev) = prev {
1334+ env:: set_var ( "PKG_CONFIG_PATH" , prev) ;
1335+ }
12831336
12841337 res
12851338 }
0 commit comments