Re: <name> feature in lib rule from a <conditional>

John Eivind Helset via Boost-build <[email protected]> Wed, 28 Oct 2020 11:58:14 +0100
Newsgroups gmane.comp.lib.boost.build
Message-ID <CANG5jr9_YGRJJkG1tLws72LiowGEtjSk8D85F-X6UN0MMYiiAA@mail.gmail.com>
--===============8970463308816857154==
Content-Type: multipart/alternative; boundary="000000000000ed496505b2b90a94"

--000000000000ed496505b2b90a94
Content-Type: text/plain; charset="UTF-8"

I use <tag> (
https://boostorg.github.io/build/manual/develop/index.html#bbv2.builtin.features.tag)
for this:

rule my-condition ( name : type ? : properties * )
{
  local ver = [ $(properties).get <my-version> ] ;
  local my-lib = [ SPLIT_BY_CHARACTERS $(ver) : "." ] ;
  if $(type) in STATIC_LIB SHARED_LIB EXE
  {
    return $(name)$(my-lib:J) ;
  }
  return ;
}
lib xxx : : <tag>@my-condition ;

regards jeh

On Wed, 28 Oct 2020 at 10:51, Arvid Norberg via Boost-build <
[email protected]> wrote:

> Hi. I'm having an issue I haven't been able to pin-point where it goes
> wrong. I want to declare a lib rule that refers to a pre-built library.
> Typically this is done in this form:
>
> lib foobar : : <search>/my/library/path <name>library-name ;
>
> However, I want the <name> to be computed by some more sophisticated
> logic. To do this, I define a rule ("my-condition") and I replace
> "<name>library-name" with "<conditional>@my-condition".
>
> Here's a complete reproducer Jamfile:
>
> import feature : feature ;
> feature my-version : : free ;
>
> rule my-condition ( properties * )
> {
>    local ver = [ feature.get-values <my-version> : $(properties) ] ;
>    local my-lib = "foobar" [ SPLIT_BY_CHARACTERS $(ver) : "." ] ;
>    return <name>$(my-lib:J) ;
> }
>
> lib foobar : : <conditional>@my-condition ;
>
> The rule my-condition produces a name of "foobar123", if <my-version>1.2.3
> is set.
> Running b2 produces the following error:
>
> $ b2 my-version=1.2.3
>
> boost_1_73_0/tools/build/src/kernel/class.jam:90: in new
> *** argument error
> * rule class@searched-lib-target.__init__ ( name : project : shared ? :
> search * : action )
> * called with: ( foobar foobar123 : object(project-target)@209 : true :  :
> object(null-action)@228 :  :  :  :  :  :  :  :  :  :  :  :  :  :  )
> * extra argument foobar123
> boost_1_73_0/tools/build/src/tools/generators/searched-lib-generator.jam:70:see
> definition of rule 'class@searched-lib-target.__init__' being called
> boost_1_73_0/tools/build/src/tools/generators/searched-lib-generator.jam:48:
> in searched-lib-generator.run
> boost_1_73_0/tools/build/src/tools/unix.jam:113: in
> [email protected]
> boost_1_73_0/tools/build/src/build/generators.jam:1019: in
> try-one-generator-really
> boost_1_73_0/tools/build/src/build/generators.jam:1081: in
> try-one-generator
> boost_1_73_0/tools/build/src/build/generators.jam:1319: in construct-really
> boost_1_73_0/tools/build/src/build/generators.jam:1405: in
> generators.construct
> boost_1_73_0/tools/build/src/tools/generators/lib-generator.jam:59: in
> [email protected]
> boost_1_73_0/tools/build/src/build/generators.jam:1019: in
> try-one-generator-really
> boost_1_73_0/tools/build/src/build/generators.jam:1081: in
> try-one-generator
> boost_1_73_0/tools/build/src/build/generators.jam:1319: in construct-really
> boost_1_73_0/tools/build/src/build/generators.jam:1405: in
> generators.construct
> boost_1_73_0/tools/build/src/build/targets.jam:1615: in construct
> boost_1_73_0/tools/build/src/build/targets.jam:1364: in
> [email protected]
> boost_1_73_0/tools/build/src/build/targets.jam:812: in generate-really
> boost_1_73_0/tools/build/src/build/targets.jam:784: in
> [email protected]
> boost_1_73_0/tools/build/src/build/targets.jam:273: in
> [email protected]
> boost_1_73_0/tools/build/src/build-system.jam:797: in load
> boost_1_73_0/tools/build/src/kernel/modules.jam:295: in import
> boost_1_73_0/tools/build/src/kernel/bootstrap.jam:139: in boost-build
> boost_1_73_0/tools/build/boost-build.jam:8: in module scope
>
> It's as if the <name> feature somehow is interpreted as the name of the
> lib rule, rather than a feature that's part of its properties.
>
> --
> Arvid Norberg
> _______________________________________________
> Unsubscribe & other changes:
> https://lists.boost.org/mailman/listinfo.cgi/boost-build
>

--000000000000ed496505b2b90a94
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I use &lt;tag&gt; (<a href=3D"https://boostorg.github.io/b=
uild/manual/develop/index.html#bbv2.builtin.features.tag">https://boostorg.=
github.io/build/manual/develop/index.html#bbv2.builtin.features.tag</a>) fo=
r this:<br><br>rule my-condition ( name : type ? : properties * )<br>{<br>=
=C2=A0 local ver =3D [ $(properties).get &lt;my-version&gt; ] ;<br>=C2=A0 l=
ocal my-lib =3D [ SPLIT_BY_CHARACTERS $(ver) : &quot;.&quot; ] ;<br>=C2=A0 =
if $(type) in STATIC_LIB SHARED_LIB EXE<br>=C2=A0 {<br>=C2=A0 =C2=A0 return=
 $(name)$(my-lib:J) ;<br>=C2=A0 }<br>=C2=A0 return ;<br>}<br>lib xxx : : &l=
t;tag&gt;@my-condition ;<br><br>regards jeh</div><br><div class=3D"gmail_qu=
ote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, 28 Oct 2020 at 10:51, Ar=
vid Norberg via Boost-build &lt;<a href=3D"mailto:[email protected]=
rg">[email protected]</a>&gt; wrote:<br></div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><div dir=3D"ltr">Hi. I&#39;m having an iss=
ue I haven&#39;t been able to pin-point where it goes wrong. I want to decl=
are a lib rule that refers to a pre-built library. Typically this is done i=
n this form:<br><br>lib foobar : : &lt;search&gt;/my/library/path &lt;name&=
gt;library-name ;<br><br>However, I want the &lt;name&gt; to be computed by=
 some more sophisticated logic. To do this, I define a rule (&quot;my-condi=
tion&quot;) and I replace &quot;&lt;name&gt;library-name&quot; with &quot;&=
lt;conditional&gt;@my-condition&quot;.<br><br>Here&#39;s a complete reprodu=
cer Jamfile:<br><br><font face=3D"monospace">import feature : feature ;<br>=
feature my-version : : free ;<br><br>rule my-condition ( properties * )<br>=
{<br>=C2=A0 =C2=A0local ver =3D [ feature.get-values &lt;my-version&gt; : $=
(properties) ] ;<br>=C2=A0 =C2=A0local my-lib =3D &quot;foobar&quot; [ SPLI=
T_BY_CHARACTERS $(ver) : &quot;.&quot; ] ;<br>=C2=A0 =C2=A0return &lt;name&=
gt;$(my-lib:J) ;<br>}<br><br>lib foobar : : &lt;conditional&gt;@my-conditio=
n ;</font><div><br>The rule my-condition produces a name of &quot;foobar123=
&quot;, if &lt;my-version&gt;1.2.3 is set.</div><div>Running b2 produces th=
e following error:</div><div><br></div><div>





<font face=3D"monospace">$ b2 my-version=3D1.2.3<br><br></font><p style=3D"=
margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-=
stretch:normal;line-height:normal"><font face=3D"monospace">boost_1_73_0/to=
ols/build/src/kernel/class.jam:90: in new</font><br><font face=3D"monospace=
">*** argument error</font><br><font face=3D"monospace">* rule class@search=
ed-lib-target.__init__ ( name : project : shared ? : search * : action )</f=
ont><br><font face=3D"monospace" style=3D"background-color:rgb(255,255,0)">=
* called with: ( foobar foobar123 : object(project-target)@209 : true : =C2=
=A0: object(null-action)@228 : =C2=A0: =C2=A0: =C2=A0: =C2=A0: =C2=A0: =C2=
=A0: =C2=A0: =C2=A0: =C2=A0: =C2=A0: =C2=A0: =C2=A0: =C2=A0: =C2=A0)</font>=
<br><font face=3D"monospace">* extra argument foobar123</font><br><font fac=
e=3D"monospace">boost_1_73_0/tools/build/src/tools/generators/searched-lib-=
generator.jam:70:see definition of rule &#39;class@searched-lib-target.__in=
it__&#39; being called</font><br><font face=3D"monospace">boost_1_73_0/tool=
s/build/src/tools/generators/searched-lib-generator.jam:48: in searched-lib=
-generator.run</font><br><font face=3D"monospace">boost_1_73_0/tools/build/=
src/tools/unix.jam:113: in [email protected]</font><br>=
<font face=3D"monospace">boost_1_73_0/tools/build/src/build/generators.jam:=
1019: in try-one-generator-really</font><br><font face=3D"monospace">boost_=
1_73_0/tools/build/src/build/generators.jam:1081: in try-one-generator</fon=
t><br><font face=3D"monospace">boost_1_73_0/tools/build/src/build/generator=
s.jam:1319: in construct-really</font><br><font face=3D"monospace">boost_1_=
73_0/tools/build/src/build/generators.jam:1405: in generators.construct</fo=
nt><br><font face=3D"monospace">boost_1_73_0/tools/build/src/tools/generato=
rs/lib-generator.jam:59: in [email protected]</font><br><font face=3D=
"monospace">boost_1_73_0/tools/build/src/build/generators.jam:1019: in try-=
one-generator-really</font><br><font face=3D"monospace">boost_1_73_0/tools/=
build/src/build/generators.jam:1081: in try-one-generator</font><br><font f=
ace=3D"monospace">boost_1_73_0/tools/build/src/build/generators.jam:1319: i=
n construct-really</font><br><font face=3D"monospace">boost_1_73_0/tools/bu=
ild/src/build/generators.jam:1405: in generators.construct</font><br><font =
face=3D"monospace">boost_1_73_0/tools/build/src/build/targets.jam:1615: in =
construct</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/b=
uild/targets.jam:1364: in [email protected]</font><br><font face=
=3D"monospace">boost_1_73_0/tools/build/src/build/targets.jam:812: in gener=
ate-really</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/=
build/targets.jam:784: in [email protected]</font><br><font face=
=3D"monospace">boost_1_73_0/tools/build/src/build/targets.jam:273: in class=
@project-target.generate</font><br><font face=3D"monospace">boost_1_73_0/to=
ols/build/src/build-system.jam:797: in load</font><br><font face=3D"monospa=
ce">boost_1_73_0/tools/build/src/kernel/modules.jam:295: in import</font><b=
r><font face=3D"monospace">boost_1_73_0/tools/build/src/kernel/bootstrap.ja=
m:139: in boost-build</font><br><font face=3D"monospace">boost_1_73_0/tools=
/build/boost-build.jam:8: in module scope</font><br><br><font face=3D"arial=
, sans-serif">It&#39;s as if the &lt;name&gt; feature somehow is interprete=
d as the name of the lib rule, rather than a feature that&#39;s part of its=
 properties.</font><br><br><span style=3D"color:rgb(34,34,34);font-family:A=
rial,Helvetica,sans-serif;font-size:small;background-color:rgb(255,255,255)=
">--</span><br></p>Arvid Norberg<br></div></div>
_______________________________________________<br>
Unsubscribe &amp; other changes: <a href=3D"https://lists.boost.org/mailman=
/listinfo.cgi/boost-build" rel=3D"noreferrer" target=3D"_blank">https://lis=
ts.boost.org/mailman/listinfo.cgi/boost-build</a><br>
</blockquote></div>

--000000000000ed496505b2b90a94--

--===============8970463308816857154==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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

--===============8970463308816857154==--