Don't let pkg-config add system lib dirs to the search path#50
Conversation
Adding system-wide library directories to the linker search path causes these directories to be searched before other paths added by later crates. If a library is present in the system-wide directory and a later crate wants to specifically link against a different version of that library in another path, the linker will choose the library from the first search directory it finds. If the linker doesn't find a library in any of the specified search directories, it falls back on system-wide paths, so we don't need to print the path we found zlib in if it is in one of those system paths.
|
@joshtriplett can you take a look at this? |
|
@alexcrichton Why does pkg-config-rs default to allowing system library directories by default, rather than sticking with the default behavior of the pkg-config executable and stripping them out? This seems like what any library should be doing, not just libz-sys. |
|
Agreed, I'd prefer that to be the default, but @alexcrichton didn't want to do this this because it changes the behavior of pkg-config-rs (rust-lang/pkg-config-rs#35). There's a longer discussion in rust-lang/pkg-config-rs#11. |
|
@joshtriplett way long ago when it first came up I didn't want to maintain a list of "what are the system library directories" for all platforms, but times change! |
|
Why would |
|
Just wanted to ping this PR and see if it can be merged. |
|
Looks reasonable; thank you for the patch. |
In its default configuration, pkg-config adds system-wide library directories to the linker search path (rust-lang/pkg-config-rs#11). This causes these directories to be searched before other paths added by later crates or by `-Clink-arg` in rustflags. If a library is present in the system-wide directory and a later build step wants to specifically link against a different version of that library in another path, the linker will choose the library from the first search directory it finds. If the linker doesn't find a library in any of the specified search directories, it falls back on system-wide paths, so we don't need to print the path we found lubcurl in if it is in one of those system paths. rust-lang/libz-sys#50
In its default configuration, pkg-config adds system-wide library directories to the linker search path (rust-lang/pkg-config-rs#11). This causes these directories to be searched before other paths added by later crates or by `-Clink-arg` in rustflags. If a library is present in the system-wide directory and a later build step wants to specifically link against a different version of that library in another path, the linker will choose the library from the first search directory it finds. If the linker doesn't find a library in any of the specified search directories, it falls back on system-wide paths, so we don't need to print the path we found lubcurl in if it is in one of those system paths. See rust-lang/libz-sys#50 for the same fix to libz that landed a while back.
In its default configuration, pkg-config adds system-wide library directories to the linker search path (rust-lang/pkg-config-rs#11). This causes these directories to be searched before other paths added by later crates or by -Clink-arg in rustflags. If a library is present in the system-wide directory and a later build step wants to specifically link against a different version of that library in another path, the linker will choose the library from the first search directory it finds. If the linker doesn't find a library in any of the specified search directories, it falls back on system-wide paths, so we don't need to print the path we found libssh2 in if it is in one of those system paths. See rust-lang/libz-sys#50 for the same fix to libz that landed a while back. See also alexcrichton/curl-rust#441 for the same fix to libcurl-sys.
In its default configuration, pkg-config adds system-wide library directories to the linker search path (rust-lang/pkg-config-rs#11). This causes these directories to be searched before other paths added by later crates or by -Clink-arg in rustflags. If a library is present in the system-wide directory and a later build step wants to specifically link against a different version of that library in another path, the linker will choose the library from the first search directory it finds. If the linker doesn't find a library in any of the specified search directories, it falls back on system-wide paths, so we don't need to print the path we found libssh2 in if it is in one of those system paths. See rust-lang/libz-sys#50 for the same fix to libz that landed a while back. See also alexcrichton/curl-rust#441 for the same fix to libcurl-sys.
Adding system-wide library directories to the linker search path causes these
directories to be searched before other paths added by later crates. If a
library is present in the system-wide directory and a later crate wants to
specifically link against a different version of that library in another path,
the linker will choose the library from the first search directory it
finds. If the linker doesn't find a library in any of the specified search
directories, it falls back on system-wide paths, so we don't need to print the
path we found zlib in if it is in one of those system paths.
This resolves issue #49.