This implements obtaining and generating compile commands from toolsets that compile C or C++ sources. I.e. implements both the --command-database=json amd --command-database-out=<filename> CLI options. Although it implements the toolset changes for most compilers, only a few are tested.
Fixes#395
Because we use the bootstrap exe for the install it was not possible to cross-compile install B2. This change dynamically chooses which b2.exe to install based on target-os and host-os. When in a cross-compile context, i.e. host-os != target-os, the b2 installed is built from source (and using target-os) instead of using the bootstrap exe.
fixes#358
FreeBSD gcc, instead of failing at link time when using multithreading
and forgetting add the -pthread option it throws an exception at
runtime. This change default to using the -pthread option for bootstrap
on all platforms. It also turns on threading=multi on the jam build.
The Python port and support extensions in B2 engine were unmaintained.
This fully removes the bindings between Jam and Python. And removes the
incomplete build system port.
This removes the use of the boost-build rule to direct the loading of the
bootstrap.jam file. The file is now searched for directly based on the
b2 executable location and other criteria. This makes the installed
b2 the canonical way to use b2.
Some latest compilers are rather eager intheir warnings. This can cause
problems with the generated grammar code. Hence avoid such warnings when
compiling the grammar parser.
This implements two styles of install layouts for B2: standard and
portable. This uses the new symbolic stage install locations. The
portable layout creates a structure relative to the B2 executable.
And hence allows for moving the B2 executable anywhere. This is
important for Windows and MacOS where there is no reasonable
packagining structures.
This ports the minimal Jambase to native C++. This removes the need for
mkjambase and the Jambase files. To accomplish that it adds C++
utility wrapers around Jam language primitives. Which makes future
similar work much easier.
Forgot that the way timestamps work it will end up that users might
get to rebuild the grammar. Which may not be possible as
they might not have bison available.
It needs further work, to avoid $prefix/share/boost-build/src
and put everything directly under $prefix/share/boost-build
and to put examples under $prefix/share/doc/boost-build or
similar.