|
Boost : |
Subject: [boost] "I want everything" should build "out of the box" (on Windows)
From: KTC (ktc_at_[hidden])
Date: 2009-07-28 01:51:36
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.
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. :-)
Regards,
KTC
-- Only two things are infinite, the Universe and Stupidity. And I'm not quite sure about the former. - Albert Einstein
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk