Subject: Re: [Boost-build] third-party library dependencies
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2018-06-10 23:03:33
On 06/08/2018 01:14 PM, Stefan Seefeld via Boost-build wrote:
> On 2018-05-23 09:26 AM, stefan wrote:
>> On 2018-05-23 09:06 AM, Steven Watanabe via Boost-build wrote:
>>> On 05/20/2018 02:03 PM, Stefan Seefeld via Boost-build wrote:
>>>> I'm trying to add a few library dependencies to a (boost) project.
>>>> https://boostorg.github.io/build/tutorial.html#best_practices%c2 explains
>>>> how to add
>>>> lib xml : : <name>libxml <search>C:/lib : : <include>C:/include ;
>>>> Â Â to a user-config.jam file, then use it from a Jamfile via
>>>> `<library>/user-config//xml`. This approach seems to require the
>>>> user-config.jam file to contain a call to `lib xml`. Is there a way to
>>>> make that optional (so a default `xml` target gets instantiated with
>>>> default paths, only to be overridden if any custom paths or
>>>> are needed ? Or would that require an `xml` module to be created, as is
>>>> done for a few other third-party packages b2 has builtin support for
>>>> (zlib, libpng, etc.) ?
>>> Â Â You really should use a module.Â All the module needs to
>>> do is wrap up the logic for tracking whether the target
>>> has been created yet.Â The lib rule is not really designed
>>> to handle this.Â Hypothetically, I suppose you could make
>>> a module that searches config files for targets.
>> OK, I have done that. Actually I need to look for two libs (opencl and
>> clblas), so I created two modules. Now I want to add opencl as a
>> (usage) requirement to clblas, i.e. make it such that whenever a user
>> links to clblas//clblas, opencl gets linked also.
>> Here are my two modules:
>> how should I modify clblas.jam to add opencl to its usage requirements ?
The normal method is to list opencl as a source to clblas.
This is a bit tricky as you want users to be able to configure
clblas only (and rely on autoconfiguration of opencl), or
configure both libraries explicitly (in any order). I think
I'm going to have to revisit the library configuration mechanism
to handle this better.
>> And finally, what would be the right place to put these modules, such
>> that users can see / use them ?
>> While I'm of course happy to contribute them to Boost.Build itself,
>> I'm not sure this is the right solution in general. There needs to be
>> a mechanism for users to write and publish their own modules, but I
>> couldn't quite figure out how.
At the moment, adding such modules to Boost.Build is
the most reliable solution. You could technically
put them anywhere as long as you set BOOST_BUILD_PATH
appropriately, but that requires an extra pre-build
configuration step. I've considered ways to allow
user-config.jam to find project specific modules, but
I don't have any solution that isn't pretty hacky.
>> (Also, as a side-note: the two modules above contain a lot of
>> boilerplate code. Is there a way to compact that, or even create
>> something like a module template that I could use and parametrize for
>> the specifics of a given library ?
I've been meaning to create such a module template.
I think there are enough concrete uses to work out
a reasonable abstraction now.
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk