
KTC wrote:
Users on Microsoft Windows should be able to build boost with everything, both in terms of all supported variants and all boost libraries, with a single command to bjam assuming they have all the optional supporting libraries available.
An user download boost, and want to build all the libraries that require building go read the Getting Started Guide <.../getting_started/windows.html#invoke-bjam> and see the after getting bjam they use the command bjam --build-dir=build-directory toolset=toolset-name --build-type=complete stage
So they enter that into the command prompt and see lots of warnings and notes about missing optional components. The warnings and notes itself is fine and informative. Actually, it's incomplete as it stand as it doesn't tell the user about Boost.IOStreams optional component requirement of bzip2 & zlib headers. Okay, the user go and install all the optional components the warnings and notes tell them. After installing Python, ICU (building it first), Expat (building it first), and MPI (say MS-MPI), they try again. This time with the command becoming bjam --toolset=... --build-dir=... --build-type=complete -sHAVE_ICU=1 -sICU_PATH="..." -sEXPAT_INCLUDE="..." -sEXPAT_LIBPATH="..." -sBZIP2_SOURCE="..." -sZLIB_SOURCE="..." stage
Nope, MPI requires modification of user-config.jam or building it on its own with --with-mpi. Why? No other optional components build that way. So they look to see how they do that, and does it.
Do you actually want Boost.MPI? I kinda expect anybody who wants to use Boost.MPI to already have MPI installed.
Second attempt and ... nope. New to 1.39 is the errors error: link=shared together with runtime-link=static is not allowed error: such property combination is either impossible error: or too dangerious to be of any use due to the changes made as a result of <http://lists.boost.org/Archives/boost/2009/04/150675.php>. (Recently noted on <http://groups.google.com/group/boost-list/browse_thread/thread/2a7bd07468b5ffe6>.) While catching those errors is good, maybe it should be fixed as well such that it doesn't come up in the first place if someone do a --build-type=complete with ICU. So now the users have to build Boost.Regex separately from the rest of the library (after finding how to pass the link= & runtime-link= options). By the way, at this point I would like to point out how it's strange that -sHAVE_ICU=1 mean to build with ICU, but so is -sHAVE_ICU=0 .... :S
And ... nope, even separately Boost.Regex still wouldn't build without errors. No one told them they need to rename icuin.lib, icuind.lib, icuind.pdb & icudt.lib from ICU to icui18n.lib, icui18nd.lib, icui18nd.pdb & icudata.lib respectively.
With Boost.Regex built, we turn to the rest of the library with --without-regex. After waiting a while, we discover ... nope, Most of the library is built but not Boost.Graph. Sorry, this time no one told them they need to change Boost.Graph's Jamfile.v2 file with "<find-shared-library>expat" to "<find-shared-library>libexpatwMT" and adding "<define>XML_STATIC".
Boost is great, it's free, it's flexible and I understand it's developed for free by volunteers, but its "installation" for someone that want every libraries could be improved. :-)
Did you file any issues at svn.boost.org? This is the first time I hear about any expat-related problems whatsoever. This is also the first time I hear about "renaming" ICU libraries. As for the runtime-link incompatibility, my impression was that John did not see anything worth fixing there. - Volodya