New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Suggestion: follow symlinks to save the macOS use-case #34
Comments
Btw. part of the problem seems to be that Homebrew is inconsistent with the link flags: some |
This sounds like it'd almost want to be a pkg-config feature rather than a pkg-config-rs feature? How would we know what symlinks to follow? |
You're right in the sense that it would be ideal if pkg-config always returned the "right" directory. However, it quite simply returns what's stated in the What pkg-config-rs could do, is to check the library file like compilers do. It already knows the -L and -l flags pkg-config returned to it. Let's say that we're on macOS and pkg-config returned the flags |
I'd prefer to avoid adding a pseudo-linker in pkg-config-rs, though. All we get is flags, we don't actually know where libs are ourselves. Passing something more specific would require pkg-config-rs to interpret the meaning of flags and start looking in paths and such. |
Yeah, that is totally understandable. I just wonder, what's the next best thing to do? pkg-config as it currently is, is broken on macOS (For Homebrew users, that is. But that's the most popular package manager for macOS. It may be broken for Fink and MacPorts too, but I haven't tested.), and just trying this simple heuristic should fix the problem and make it an it-just-works experience. It's something that isn't pkg-config-rs's responsibility, as it's doing what's expected of a simple wrapper. It just seems the most straightforward way to fix things. |
What package is printing out |
Okay, that's great to hear. It's specifically libpq of the postgresql package that prints out I was under an impression that a larger portion of packages would print out the problematic |
Oh yeah that'd be ideal if the postgres package could be updated to print out the local version to avoid pollution of picking up other libs by accident. |
For reference, we are having that discussion here: Homebrew/homebrew-core#8472 (comment) |
It's common to install libraries with Homebrew on macOS. However, when linking those libraries with the
pkg-config
crate, the-L/usr/local/lib
flag is passed to Cargo. This may cause conflicts with dynamic resolution:/usr/local/lib
gets always searched first, and unrelated libraries may override system libraries causing havoc.An example: dynamically loaded
libjpeg
is a transitive dependency of Diesel. However, an incompatible version oflibjpeg
is also commonly installed to/usr/local/lib
as a dependency of some Homebrew application. A dependency of Diesel,libpq
used to support finding the native library using thepkg-config
crate, but since that passes-L/usr/local/lib
to Cargo which breakslibjpeg
, the support had to be revoked.libpq
itself now avoids passing/usr/local/lib
to Cargo, and instead checks if the library is actually a symlink. In the case of Homebrew, it always is; every library resides in their own directories, like/usr/local/Cellar/jpeg/8d/lib/
. Thus, passing that to Cargo doesn't cause conflicts with other libraries.To be usable in the macOS ecosystem, it would be beneficial if the
pkg-config
crate would provide this symlink-following behaviour for the users.The text was updated successfully, but these errors were encountered: