Boost logo

Boost-Build :

From: David Abrahams (gclbb-jamboost_at_[hidden])
Date: 2003-06-23 08:50:47

Vladimir Prus <ghost_at_[hidden]> writes:

> Ali Azarbayejani wrote:
>> I say that "b" depends on "a". What this means for the "compile"
>> action is that "b" can find "a"'s headers. What this means for the
>> "link" action is that the final link product must link to "a".
> Oh... I think you're changing the common definition of
> "dependency". In all build tools, dependency from "b" to "a" means:
> if "b" is to be created, then "a" is to be created before it. What
> you describe is a slightly, but distincly different thing, which may
> cause confusion. For example, it's already confused me.

I don't think Ali's changing the meaning. The issue is what each tool
considers the abstract entity "a" to be.

>> In general, just establish that "b" depends on "a" (abstractly),
>> creating a dependency link from the "b" node to the "a" node in the
>> dependency graph (i.e. Target graph). Then each action benefits
>> from this dependency in its own way.
>> Philosophically "compile" can look at all its immediate
>> dependencies and grab their <include> usage-requirements and "link"
>> can traverse its dependency sub-tree, find all libraries that it
>> directly or indirectly depends upon, find the correct order, and
>> add them to the link line.
>> Practically, however, we implement this philosophy using property
>> propagation.
> I understand your idea, but "dependency", IMO, is not appropriate
> word here. I'd say that each main target has a list of other
> targets that it *referres to*. Note also, that you cannot get away
> with just "dependency", because there are different types of
> dependency. For example, in future we could have:
> lib a : a.cpp other_lib
> : <uses-generated-headers-from>another_lib
> <use-buildable-tool>whale
> ;
> there are three references to other main targets, but they should be
> processed in completely different ways. In other words, each
> "dependency" link should be annotated with a property. This, in
> turns, means that difference between storing all those links in a
> property set, and storing them as separated edges in some graph, is
> really minor.

A reasonable point-of-view, IMO.

Dave Abrahams
Boost Consulting

Boost-Build list run by bdawes at, david.abrahams at, gregod at, cpdaniel at, john at