
#262: Check for required C libraries during configure ----------------------------+----------------------------------------------- Reporter: guest | Owner: Type: enhancement | Status: new Priority: high | Milestone: Cabal-1.6 Component: Cabal library | Version: 1.2.3.0 Severity: normal | Resolution: Keywords: | Difficulty: easy (<4 hours) Ghcversion: 6.8.2 | Platform: ----------------------------+----------------------------------------------- Comment (by duncan): Replying to [comment:9 alexeevg]:
Autoconf uses AC_CHECK_LIB macro to check if the library is present. AC_CHECK_LIB takes the library name and a function(symbol) name that is expected to be exported from the library, generates a C program depending on this symbol and tries compiling it. This is a bit of info we miss in BuildInfo - we have extra-libs, but no function names.
Right, we do not have this additional information. As you say, we will have to rely on `ld` being paranoid and failing when it cannot find a library, even if the object files do not depend on any function exported by that library. Actually, I think ld pretty much has to have this behavior since it does not know what symbols the missing library might export that would shadow symbols exported by other libraries. So it cannot actually determine if the library is not needed, at least for ELF linkers.
Error messages should be helpful for the typical Cabal user, who should not be assumed to know > anything about C libraries or linking.
This is a bit unclear to me - we have no info on required packages, we have only includes/extra-libs, how do we make error messages user- friendly? Autoconf doesn't do it.
You're right that we cannot easily or accurately map missing C libs back to which native OS packages that provide them. I think we can still produce reasonable error messages. We can at least explain which C libraries are missing, we must make it clear that these are C libraries (not Haskell packages) that we expected to find on the system. Then there are two possible causes with corresponding solutions: * The most likely is that the C package is just not installed, or that the development flavour of the package is not installed (binary Linux distros often split packages into runtime and dev variants). We can recommend users look for a native package with a similar name to the C lib, and if there is a "-dev" version then install that. We could provide more detail and say the native package should provide a file `libfoo.so` or `libfoo.a` or whatever. * Another possibility is that the C lib is installed but in some non- standard location. In that case we should tell users about the `--extra- include-dirs` and/or `--extra-lib-dirs` flags. Just for my own future reference: * [http://www.gnu.org/software/hello/manual/autoconf/Libraries.html AC_CHECK_LIB] * [http://www.gnu.org/software/hello/manual/autoconf/Generic- Headers.html AC_CHECK_HEADER] -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/262#comment:11 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects