Boost logo

Boost-Build :

Subject: Re: [Boost-build] Bjam Update error in actualize?
From: Kip Carr (kcarr_at_[hidden])
Date: 2014-05-29 08:53:29


Hi,

Found out a bit more info. I was able to get a PC loaded up with Ubuntu 13 which has more versions of boost build available. I have isolated the problem to something in 1.54 and up. The .jam file I sent works in 1.49, 1.51, and 1.53. I tried to look at the changelist for 1.54 but I cannot see any differences related to symlinks, paths or any other file that gets called out in the error dump. I am going to try and do some diffs on the boost directory and see if I can find anything that might point to the problem. I don't know if this is a bug in the latests builds or if it was a change to how something is called that wasn't listed in the changelist. If anyone has any ideas I would appreciate them :)
Thanks!

- Kip
-----Original Message-----
From: Boost-build [mailto:boost-build-bounces_at_[hidden]] On Behalf Of Vladimir Prus
Sent: Monday, May 26, 2014 12:44 AM
To: Boost.Build developer's and user's list
Subject: Re: [Boost-build] Bjam Update error in actualize?

On 05/23/2014 09:51 PM, Kcarr wrote:
> All I have been able to get a little further. It seems the problem
> lies with calling the $(vt).actualize. What gets. So in this loop:
>
> for local force_gen_file in $(force_gen_files)
> {
> local vt = [ virtual-target.register $(force_gen_file) ]
> ;
>
> DEPENDS all : [ $(vt).actualize ] ;
>
> virtual_targets += $(vt) ;
> }
>
> A symlink file gets passed in which causes the error on the .actualize.
> Here is how i generate the symlink:
>
> local header_symlink =
> [ new file-target
> $(base_name)
> : H
> : $(project)
> : [ new action
> $(generated_h)
> : symlink.ln
> : $(property-set) ]
> : $(project_inc_dir) ] ;
>
> The header_symlink is added to the force_gen_files list that is passed
> in to the for loop. generated_h is created by this code before the previous code:
>
> local generated_h =
> [ new file-target $(base_name)
> : H
> : $(project)
> : $(generate_h_action)
> : $(project_src_dir) ] ;
>
> When it hits the symlink it crashes with the below.
>
> /usr/share/boost-build/tools/symlink.jam:115: in symlink.ln
> *** argument error
> * rule path.make ( native )
> * called with: ( )
> * missing argument native
> /usr/share/boost-build/util/path.jam:508:see definition of rule 'path.make'
> being called
> /usr/share/boost-build/kernel/modules.jam:107: in modules.call-in
> /usr/share/boost-build/util/indirect.jam:98: in indirect.call
>
> As I mentioned this worked before so I dont know if there is a bug in
> the symlink generation code now? The only way I know how to make it
> actually create the symlink is to call actualize on it. Is there another way?

Hi,

as I've said on IRC (possibly the message got lost due to disconnect on either side), you better first try to remove your loop altogether - using explicit DEPENDS should not be necessary and if it is, it's best to fix the real problem.

Otherwise, the error appears to be caused by the fact that the expression

        [ on $(>) return $(LOCATE) ]

where $(>) is source of symlink action returns empty string. May I suggest you modify symlink.jam:ln to have this:

        if ! [ on $(>) return $(LOCATE) ] {
                ECHO "NO LOCATE: $(>)" ;
        }

and confirm it's indeed you generated_h target that is problematic?

- Volodya
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build


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