Boost logo

Boost-Build :

Subject: Re: [Boost-build] common.copy target location
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2018-08-28 13:31:36


AMDG

On 08/28/2018 06:01 AM, Ian Emmons via Boost-build wrote:
> I am using Boost 1.67.0, and I just recently discovered a change in its
> behavior compared to previous versions.  I am running unit tests, and
> these tests require a copy of a configuration file in the same directory
> as the running executable.  To make that work, I added an explicit
> dependency to the unit-test target and an explicit target performs the
> copy, like so:
>
>     unit-test ParliamentTest
>         :    [ glob $(SourceDir)/*.cpp ]
>             list-of-libraries
>         :    <target-os>windows:<dependency>ParliamentConfig.txt
>         :    # default build
>         :    # usage requirements
>         ;
>
>     explicit ParliamentConfig.txt ;
>     make ParliamentConfig.txt : $(SourceDir)/ParliamentConfig.txt :
> @common.copy ;
>
> In prior versions of Boost.Build, the copy would land in the same
> directory as the test executable, e.g.,
> "<output-dir>/msvc-14.1/release/address-model-64/threading-multi/ParliamentConfig.txt",
> but in Boost 1.67.0 the copy lands in "<output-dir>".
>
> Is this change expected?  How can I get back to the old behavior?
>

  The change is intentional. The directory for a target
only includes features that affect the building of the
target in some way. common.copy doesn't depend on any
features, so the target is placed in the root output
directory.

You have two choices to work around this. Adding
<relevant>toolset <relevant>variant <relevant>address-model,
etc, will explicitly force Boost.Build to include
these features in the path. The other option is
to refactor it so that the config file depends on
the executable (and thus inherits feature relevance).

exe ParlimentTest.exe : ... ;
make ParlimentConfig.txt : ... : ... : <use>ParlimentTest.exe ;
unit-test ParlimentTest : ParlimentTest.exe :
  <target-os>windows:<dependency>ParlimentConfig.txt ;

See
https://boostorg.github.io/build/manual/develop/index.html#bbv2.builtin.features.relevant
for more details. (This was supposed to be linked
from here:
https://boostorg.github.io/build/manual/develop/index.html#bbv2.reference.buildprocess.targetpath
but the link seems to have been lost in the
move to asciidoc.)

In Christ,
Steven Watanabe


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