$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] Link dependencies (was: [mpl] [build] [testing] Mergepullrequests)
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2014-12-03 16:07:22
On Wed, Dec 3, 2014 at 11:30 PM, Rene Rivera <grafikrobot_at_[hidden]> wrote:
> On Wed, Dec 3, 2014 at 2:07 PM, Andrey Semashev <andrey.semashev_at_[hidden]>
> wrote:
>>
>> IMHO, either Boost.Build has to parse the code properly,
>
> Is there a build system out there that correctly handles the extent of MPLs
> preprocessor driven header inclusion? I'm asking so that we can ascertain
> how it could be done.
Frankly, I'm not sure any build system even attempts to parse C/C++,
let alone do some preprocessing. I must say, I don't know many build
systems, though.
The way I see it, it would take a little more than a C++ preprocessor
to do this. The preprocessor would have to support macro unfolding to
obtain the file name. Note that the unfolding can yield different
results depending on compiler/platform/etc., and the build system
would have to collect all such combinations to get the full list of
the possible includes.
>> or it should
>> be guided by its own config files, i.e. Jamfiles.
>
> Don't know what you mean by that. Can you elaborate?
I had something like the following in mind:
1. Boost.Build finds an #include in a source file.
2. It determines which library this header belongs to.
3. It parses the header to obtain the "obvious" dependencies from
#includes not obscured by preprocessor.
4. It also peeks into the library Jamfiles to obtain dependencies
defined by the library developer.
1-3 is basically what happens now. 4 is needed to explicitly describe
dependencies which Boost.Build is unable to infer from headers. If
Jamfiles don't fit for this role, I'm ok if it's a different config
file.
>> Or it could just
>> always link all headers.
>
> It's possible and easy to change the MPL build files to enumerate header
> dependencies (it can even be done automatically with globs) with the
> "dependency" feature. Sorry if I haven't followed this discussion.. But can
> you elaborate what the use cases are?
AFAIU, MPL build files are not involved into the header linking
process. Actually, there aren't any build files for MPL, as it's a
header-only library.
The use case is that when you build tools/regression/build, the build
system only links headers that it can infer from #includes. It fails
with modularized MPL because some headers in it are included using
preprocessor. See the beginning of this thread.