On Thu, Jul 24, 2014 at 11:11 AM, Michael Shepanski
On 23/07/2014 9:31 PM, Andrey Semashev wrote:
The library build scripts should perform auto-detection checks at build time. I have something like this in Boost.Log, although I test whether the compiler supports SSE/AVX and whether Message Compiler is available. But the approach should be similar - you attempt to compile a test application and set up build macros or select the actual sources to build from.
So let's say I'm trying to decide whether libpq is installed. Your suggestion is that I "attempt to compile a test application". So I would have to tell the compiler the location of libpq's incude directory (and if I attempt to link then I have to tell the linker the location of the libpq binary). Now, at the moment, the only way I know these locations is from the constants "libpq_include_dir" and "libpq_lib_dir", defined in user-config.jam (see http://quince-lib.com/preparation/configuring_boost_build.html). So I might as well test those constants directly, no? Or should I be determining the "installed" locations of those things by some other means?
I'm thinking that the only auto-detection I need is inspection of bjam constants.
Having constants so that the user is able to specify the paths manually (either in user-config.jam or bjam command line) is required. However, on Linux (and on other UNIX-like systems as well) there are standard locations for headers and libs which need not be specified in the compiler command line. So if libpq is installed but the bjam constants are not set you might still be able to compile your backend. In order to check that you'll have to attempt to compile a test application. Then there is pkgconfig, which can be used to obtain these paths automatically. It is quite common in Linux and probably other UNIX-like systems, although I'm not sure. Of course, how far you are willing to go in inspecting the environment is up to you. There is another aspect that may require test applications. I don't know if that's your case but you may have requirements on specific versions or features of the third party libraries. You can use test applications to verify that the third party library fulfills your requirements.