Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-08-31 11:47:11


"Robert Ramey" <ramey_at_[hidden]> writes:

> I would like to see a little more order/organization in the creation of new
> toolsets.
>
> For example in the current CVS we have for Codewarrior
>
> Cw
> Cw-9.2
> Cwpro-9.2
> Cw-8.3
> Cwpro-8.3
>
> This is only an example. The same problem is occurring in gcc and mingw

This is a temporary condition. After this we're going to retire
BBv1 and switch to BBv2, which has a saner toolset protocol (one
toolset file per family).

> It creates a couple of problems
>
> a) we're not all testing with the same Jamfile. This leads to a lot of
> confusion.
> b) If I have a jam file which needs special treatment for a particular
> compiler, I have to included a line for each toolset - and that can change
> in the future creating another obscure bug to track down.

No you don't. I know it's not documented, but you can put a
rule name in the requirements and use pattern matching within the
rule. For example, here are some rules that get used to build
Boost.Python extensions:

  # Normally on Linux, Python is built with GCC. A "poor QOI choice" in
  # the implementation of the intel tools prevents the use of
  # intel-linked shared libs by a GCC-built executable unless they have
  # been told to use the GCC runtime. This rule adds the requisite
  # flags to the compile and link lines.
  rule python-intel-use-gcc-stdlib ( toolset variant : non-defaults * )
  {
      if ( ! $(PYTHON_WINDOWS) )
        && ( ! <define>BOOST_PYTHON_STATIC_LIB in $(non-defaults) )
            && [ MATCH (intel) : $(toolset) ]
      {
          return <stdlib>gcc ;
      }
      else
      {
          return ;
      }
  }

  # Force statically-linked embedding applications to be multithreaded
  # on UNIX.
  rule python-static-multithread ( toolset variant : properties * )
  {
      if ! $(PYTHON_WINDOWS)
      {
          local x = <define>BOOST_PYTHON_STATIC_LIB <threading>single ;
          if $(x) in $(properties)
          {
              properties = [ difference $(properties) : <threading>single ] <threading>multi ;
          }
      }
      return $(properties) ;
  }

  # Borland compilers are not supported
  rule boost-python-disable-borland ( toolset variant : properties * )
  {
      if [ MATCH .*(bcc|borland).* : $(toolset) ]
      {
          properties += <build>no ;
      }
      return $(properties) ;
  }

> c) The documentation on the "getting started" page is way out of sync with
> the toolsets in existences.
>
> A somewhat related problem - or maybe the cause of the above is the fact
> that the Jamfile doesn't have access to the compiler version.

You can extract some information from the toolset name.

> I'm not sure
> what to do about this. But, here's a suggestion for consideration to start
> the discussion.
>
>
> Right now we pass a variable to bjam with the toolset name. e.g
>
> bjam -sTOOLS=cwpro-9.2
>
> How about the idea
>
> Bjam -sTOOLS=cw -sCOMPILER_VERSION=9.2 -sSTD_LIBRARY=stlport

Just hang on for BBv2. It'll all get better.

-- 
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk