Boost C++ Libraries: Ticket #4863: Support for building with multiple toolsets https://svn.boost.org/trac10/ticket/4863 <p> The docs say: </p> <blockquote class="citation"> <p> your copy of ICU must have been built with the same C++ compiler (and compiler version) that you are using to build Boost. Boost.Regex will not work correctly unless you ensure that this is the case: it is up to you to ensure that the version of ICU you are using is binary compatible with the toolset you use to build Boost. </p> </blockquote> <p> However, it only lets me point at a single copy of ICU per build invocation. It should be possible to set the version of ICU to use with *each* toolset. </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/4863 Trac 1.4.3 Dave Abrahams Wed, 17 Nov 2010 19:02:25 GMT <link>https://svn.boost.org/trac10/ticket/4863#comment:1 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:1</guid> <description> <p> Perhaps the best strategy would be to do as Boost.IOStreams does for bzip2 and libz: give people an option to point at the sources and then build the library dependencies under Boost.Build itself. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>anonymous</dc:creator> <pubDate>Thu, 18 Nov 2010 16:45:35 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:2 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:2</guid> <description> <blockquote class="citation"> <p> Perhaps the best strategy would be to do as Boost.IOStreams does for bzip2 and libz: give people an option to point at the sources and then build the library dependencies under Boost.Build itself. </p> </blockquote> <p> No chance of that: the ICU build process does all kinds of scarey things that I wouldn't dream of trying to reproduce in Boost.Build. </p> <p> A per-toolset solution might be possible using Boost.Build's features, but that won't be easy either :-( </p> <p> Sorry Dave, but as you may be the only person in the world who needs this, this one will have to be a low priority... </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Dave Abrahams</dc:creator> <pubDate>Thu, 18 Nov 2010 17:23:23 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:3 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:3</guid> <description> <p> OK. Is it really true that people are rebuilding ICU binaries to match whatever C++ compiler (and settings) they're using, though? That seems so difficult as to be effectively impossible. Seems more likely to me that different VC++ versions are close enough to abi-compatible that they can link with the prebuilt ICU binaries(?) </p> <p> How do <em>you</em> test this stuff? </p> </description> <category>Ticket</category> </item> <item> <dc:creator>anonymous</dc:creator> <pubDate>Thu, 18 Nov 2010 18:45:36 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:4 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:4</guid> <description> <blockquote class="citation"> <p> OK. Is it really true that people are rebuilding ICU binaries to match whatever C++ compiler (and settings) they're using, though? That seems so difficult as to be effectively impossible. Seems more likely to me that different VC++ versions are close enough to abi-compatible that they can link with the prebuilt ICU binaries(?) </p> </blockquote> <blockquote class="citation"> <p> How do you test this stuff? </p> </blockquote> <p> With whatever msvc version I used to compile ICU with ;-) </p> <p> On Linux it's much easier as most Linux compilers are ABI compatible with GCC anyway. </p> <p> With MSVC it's true that you can mix VC versions, and release and debug binaries, and <em>mostly</em> it will all work. But it does come back to bite you in the end... usually. BTW the binaries that ICU provides are useless for this purpose, as they only supply release mode builds, and not binaries that link to the debug runtime. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Dave Abrahams</dc:creator> <pubDate>Thu, 18 Nov 2010 19:43:43 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:5 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:5</guid> <description> <p> Then forgive me for being so bold as to suggest that this state of affairs is a Regex library bug. Isn't it a library author's responsibility to make sure that his library can be thoroughly tested by the automated regression testers? It seems you may need to do a bit more to make it practical to verify your code. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>John Maddock</dc:creator> <pubDate>Fri, 18 Mar 2011 16:37:23 GMT</pubDate> <title>status changed; resolution set https://svn.boost.org/trac10/ticket/4863#comment:6 https://svn.boost.org/trac10/ticket/4863#comment:6 <ul> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">closed</span> </li> <li><strong>resolution</strong> → <span class="trac-field-new">wontfix</span> </li> </ul> <p> I closing this, because it's basically unfixable as suggested: </p> <p> 1) Boost.Build's command line won't allow you to specify a specific/different build property for each toolset anyway (actually there is a way, but it's undocumented and only semi-works). So there's nothing in the Jamfile I can do to handle multiple toolsets differently. </p> <p> 2) There is also a simple method that works right now, without any intervention from me - for the tester to modify their user-config.jam to add the necessary -I and -L options to the compiler so that ICU will be found and used with that toolset. No need to set any macros on the command line at all then. </p> <p> I'll modify the docs to mention the latter point. </p> Ticket John Maddock Fri, 18 Mar 2011 16:47:04 GMT <link>https://svn.boost.org/trac10/ticket/4863#comment:7 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:7</guid> <description> <p> (In <a class="changeset" href="https://svn.boost.org/trac10/changeset/70131" title="Add info on building/testing ICU with multiple compilers. Refs #4863.">[70131]</a>) Add info on building/testing ICU with multiple compilers. Refs <a class="closed ticket" href="https://svn.boost.org/trac10/ticket/4863" title="#4863: Bugs: Support for building with multiple toolsets (closed: wontfix)">#4863</a>. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Dave Abrahams</dc:creator> <pubDate>Sun, 27 Mar 2011 12:52:58 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:8 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:8</guid> <description> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/4863#comment:6" title="Comment 6">johnmaddock</a>: </p> <blockquote class="citation"> <p> 1) Boost.Build's command line won't allow you to specify a specific/different build property for each toolset anyway (actually there is a way, but it's undocumented and only semi-works). So there's nothing in the Jamfile I can do to handle multiple toolsets differently. </p> </blockquote> <p> I understand the rest of what you wrote, but not this part. How is what can be specified on the command line related to what can be done in a Jamfile? </p> </description> <category>Ticket</category> </item> <item> <dc:creator>anonymous</dc:creator> <pubDate>Sun, 27 Mar 2011 16:25:06 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:9 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:9</guid> <description> <p> There's no mechanism by which a user can invoke bjam with more than one toolset *and* different build options for each toolset. </p> <p> So since the user would have to inform the regex Jamfile where each set of ICU binaries was (ie a different set of binaries for each toolset), it's basically impossible to support building with multiple toolsets, all with different ICU versions. Except of course, if they add the necessary options to their toolset configurations in user-config.jam when it just works as is anyway. </p> <p> Not sure if that's any clearer ;) </p> </description> <category>Ticket</category> </item> <item> <dc:creator>anonymous</dc:creator> <pubDate>Mon, 28 Mar 2011 20:37:54 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/4863#comment:10 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/4863#comment:10</guid> <description> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/4863#comment:9" title="Comment 9">anonymous</a>: </p> <blockquote class="citation"> <p> There's no mechanism by which a user can invoke bjam with more than one toolset *and* different build options for each toolset. </p> </blockquote> <p> Not quite true true. you can add values for the "icu" build property to the toolset declaration in your site-/user-config.jam file. Last I checked, you can also write something like this on the command-line: </p> <pre class="wiki">bjam toolset=msvc-7.1/icu=/path/to/icu7.1 toolset=msvc-10.0/icu=/path/to/icu10.0 </pre><blockquote class="citation"> <p> So since the user would have to inform the regex Jamfile where each set of ICU binaries was (ie a different set of binaries for each toolset), it's basically impossible to support building with multiple toolsets, all with different ICU versions. Except of course, if they add the necessary options to their toolset configurations in user-config.jam when it just works as is anyway. </p> </blockquote> <p> OK, setting raw compiler flags in user-config.jam is crude, but a perfectly acceptable workaround. </p> <p> Thanks </p> </description> <category>Ticket</category> </item> </channel> </rss>