<name> feature in lib rule from a <conditional>
Arvid Norberg via Boost-build <[email protected]> Wed, 28 Oct 2020 10:51:06 +0100
| Newsgroups | gmane.comp.lib.boost.build |
|---|---|
| Message-ID | <CAAhUOPWduF+JgMZ4NPtCtu_a0y3qTe=mx5jbUzouXH81ybs_iw@mail.gmail.com> |
--===============8277644070010758364==
Content-Type: multipart/alternative; boundary="000000000000d2a81b05b2b81a5b"
--000000000000d2a81b05b2b81a5b
Content-Type: text/plain; charset="UTF-8"
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
--000000000000d2a81b05b2b81a5b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">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 p=
re-built library. Typically this is done in this form:<br><br>lib foobar : =
: <search>/my/library/path <name>library-name ;<br><br>However,=
I want the <name> to be computed by some more sophisticated logic. T=
o do this, I define a rule ("my-condition") and I replace "&=
lt;name>library-name" with "<conditional>@my-condition&q=
uot;.<br><br>Here's a complete reproducer 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 <my-version> : $(properties) ] ;<br>=C2=A0 =C2=A0=
local my-lib =3D "foobar" [ SPLIT_BY_CHARACTERS $(ver) : ".&=
quot; ] ;<br>=C2=A0 =C2=A0return <name>$(my-lib:J) ;<br>}<br><br>lib =
foobar : : <conditional>@my-condition ;</font><div><br>The rule my-co=
ndition produces a name of "foobar123", if <my-version>1.2.=
3 is set.</div><div>Running b2 produces the following error:</div><div><br>=
</div><div>
<font face=3D"monospace">$ b2 my-version=3D1.2.3<br><br></font><p class=3D"=
gmail-p1" style=3D"margin:0px;font-variant-numeric:normal;font-variant-east=
-asian:normal;font-stretch:normal;line-height:normal"><font face=3D"monospa=
ce">boost_1_73_0/tools/build/src/kernel/class.jam:90: in new</font><br><fon=
t face=3D"monospace">*** argument error</font><br><font face=3D"monospace">=
* rule class@searched-lib-target.__init__ ( name : project : shared ? : sea=
rch * : action )</font><br><font face=3D"monospace" style=3D"background-col=
or:rgb(255,255,0)">* called with: ( foobar foobar123 : object(project-targe=
t)@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 face=3D"monospace">boost_1_73_0/tools/build/src/tools/gener=
ators/searched-lib-generator.jam:70:see definition of rule 'class@searc=
hed-lib-target.__init__' being called</font><br><font face=3D"monospace=
">boost_1_73_0/tools/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 class@unix-searched-lib-gener=
ator.run</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/bu=
ild/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 t=
ry-one-generator</font><br><font face=3D"monospace">boost_1_73_0/tools/buil=
d/src/build/generators.jam:1319: in construct-really</font><br><font face=
=3D"monospace">boost_1_73_0/tools/build/src/build/generators.jam:1405: in g=
enerators.construct</font><br><font face=3D"monospace">boost_1_73_0/tools/b=
uild/src/tools/generators/lib-generator.jam:59: in [email protected]<=
/font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/build/gener=
ators.jam:1019: in try-one-generator-really</font><br><font face=3D"monospa=
ce">boost_1_73_0/tools/build/src/build/generators.jam:1081: in try-one-gene=
rator</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/build=
/generators.jam:1319: in construct-really</font><br><font face=3D"monospace=
">boost_1_73_0/tools/build/src/build/generators.jam:1405: in generators.con=
struct</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/buil=
d/targets.jam:1615: in construct</font><br><font face=3D"monospace">boost_1=
_73_0/tools/build/src/build/targets.jam:1364: in [email protected]=
e</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src/build/tar=
gets.jam:812: in generate-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/targe=
ts.jam:273: in [email protected]</font><br><font face=3D"monosp=
ace">boost_1_73_0/tools/build/src/build-system.jam:797: in load</font><br><=
font face=3D"monospace">boost_1_73_0/tools/build/src/kernel/modules.jam:295=
: in import</font><br><font face=3D"monospace">boost_1_73_0/tools/build/src=
/kernel/bootstrap.jam: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's as if the <name> feature s=
omehow is interpreted as the name of the lib rule, rather than a feature th=
at's part of its properties.</font><br><br><span style=3D"color:rgb(34,=
34,34);font-family:Arial,Helvetica,sans-serif;font-size:small;background-co=
lor:rgb(255,255,255)">--</span><br></p>Arvid Norberg<br></div></div>
--000000000000d2a81b05b2b81a5b--
--===============8277644070010758364==
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
--===============8277644070010758364==--