Re: third-party library dependencies

Steven Watanabe via Boost-build <[email protected]>
Newsgroups gmane.comp.lib.boost.build
Organization Providere Consulting, Inc.
Message-ID <[email protected]>
AMDG

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  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
>>>> requirements
>>>> 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:
>> https://github.com/stefanseefeld/boost.ublas/blob/opencl/opencl.jam
>> https://github.com/stefanseefeld/boost.ublas/blob/opencl/clblas.jam
>>
>> 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.

In Christ,
Steven Watanabe
_______________________________________________
Unsubscribe & other changes: https://lists.boost.org/mailman/listinfo.cgi/boost-build
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.