Re: Copying source file required by target

Mateusz Loskot via Boost-build <[email protected]>
Newsgroups gmane.comp.lib.boost.build
Message-ID <CABUeae-pagq9WT9m2F-vJBCfNfOjsPt17GN-4S3mJ-bj-NW80A@mail.gmail.com>
On 26 July 2018 at 19:19, Steven Watanabe via Boost-build
<[email protected]> wrote:
> AMDG
>
> On 07/26/2018 11:08 AM, Mateusz Loskot via Boost-build wrote:
>> I'm trying to replicate this CMake'ism for BBv2
>>
>> f(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/mwe.cpp)
>>   configure_file(
>>     ${CMAKE_CURRENT_SOURCE_DIR}/mwe.cpp.in
>>     ${CMAKE_CURRENT_SOURCE_DIR}/mwe.cpp
>>     COPYONLY)
>> endif()
>>
>> I'm trying to achieve that with the make rule and simple actions:
>>
>> make mwe.cpp : mwe.cpp.in : @copy_mwe_if_not_exists ;
>> actions copy_mwe_if_not_exists { cp $(>) $(<) }
>> exe mwe : mwe.cpp :  ;
>>
>> Basically, this works, but there is one major issue"
>> - it creates source file in bin/mwe.cpp.
>> How can I force it to create mwe.cpp in the same directory as mwe.cpp.in?
>>
>> I've tried to hack it modifying target path using the variables
>> expansion, but without luck.
>
>
> Since you want to put the file in a fixed place,
> use <location>.

I've fiddled with the property but I must be doing something wrong

make mwe.cpp : mwe.cpp.in : @copy_mwe_if_not_exists <location>. ;
or
make mwe.cpp : mwe.cpp.in : <location>. @copy_mwe_if_not_exists ;

also trying to use absolute path instead of dot.

In all cases mwe.cpp is generated inside bin sub-directory

$ b2
...found 9 targets...
...updating 5 targets...
Jamfile</mnt/d/_/workshop/bb_copy_file>.copy_mwe_if_not_exists bin/mwe.cpp
gcc.compile.c++ bin/gcc-7.3.0/debug/mwe.o
gcc.link bin/gcc-7.3.0/debug/mwe
...updated 5 targets...
mloskot@xenial:/mnt/d/_/workshop/bb_copy_file$ tree

$ tree -if
.
./bin
./bin/config.log
./bin/gcc-7.3.0
./bin/gcc-7.3.0/debug
./bin/gcc-7.3.0/debug/mwe
./bin/gcc-7.3.0/debug/mwe.o
./bin/mwe.cpp
./bin/project-cache.jam
./jamroot.jam
./mwe.cpp.in
./project-config.jam



Where the <location> should go for the desired effect?

>> I have also tried to follow the BBv2 generate example based on
>> file-target and common.copy action:
>> https://github.com/boostorg/build/tree/develop/example/generate
>> But constructing a target seems like an overkill for my purpose.
>> And, the rule (or common.copy) also creates file in `bin` directory.
>>
>>
>> BTW, I am aware the `copy_mwe_if_not_exists` is incomplete regarding its name:
>> - it will have to use cp or copy depending on OS
>
> common.copy does this already.

I'm simply failing to figure out how to use it in the simple actions {} block.

Do I need to get back to generate rule approach mentioned earlier,
in order to be able to use common.copy?

>> - it will have to check if file exists
>>
>
> This is the normal behavior of all targets.
> (If you don't want to check whether it's out-of-date,
> you can mark the target as NOUPDATE.)

Great!

Best regards,
-- 
Mateusz Loskot, http://mateusz.loskot.net
_______________________________________________
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.