This was detecting the "oldest" VS install instead of the most recent
one when multiple VS installs are available. It's always better to use
the latest one as it will have bug fixes.
Windows drive style paths should also be considered rooted as otherwise
we can't bootstrap when we specify one of those paths. This caused a
regression in Boost where that is regularly used.
Some tests failed because the bootstrap would continue to run even
detecting a problem. This puts in the missing early return statements
in the boost-build builtin rule to get the short circuit on error
like the original Jambase.
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.
When using conditionals the location, if using replacements, would get
mungerd as the replacement part would fall in the middle of the path.
Using a custom translate-path rule we can prevent the munging
from happening before it gets to back to the stage target class.
The translate-path feature allows for custom path handling, with a
provided rule, on a per target basis. This can be used to support custom
path syntax.
It's useful to set up stage install dirs as aliases to others to allow
for external overrides. This makes it possible to also have such
aliases without needing to make them a sub-path of an
existing dir path.
* a feature to control install prefix for install targets
* usable default for install-prefix on Windows
* additional named installation prefixes based on Autotools
* allow users to add named installation directories
* fix named directories <location> handling when requesting a subproject build
* examples for named installation directories
* document named install directories-related functions, make get-package-name more conveninent to users
* feature to allow staging into a location different than active install-prefix
* support for getting relative paths with stage.get-dir
The feature is enabled by default only for MSVC 11 and above not to break
derived toolsets.
Unfortunately, it cannot be enabled on clang-cl with MSVC linker at the moment
because it because of some path issues:
```
>clang-cl test.cpp /link /manifest:embed
LINK : fatal error LNK1158: cannot run 'rc.exe'
clang-cl: error: linker command failed with exit code 1158 (use -v to see invocation)
```
Note: `embed-manifest-file` feature was broken before the change and still is
broken under `embed-manifest-via=mt`. The fix seems to be obvious, but I am not
fully understand what happens inside link/link.dll rule to fix it here.
* Remove leftover manifest generation early exiting
It should have been removed in dd3dbcc9b6
* Remove unneeded manifest existence check
The commit it was added in d8e98e3abc says it is
fixing the problem that MSVC 8.0 does not produce a manifest file for static
libraries, but the code it touches is for shared libraries and executables.
* Collapse the same branches
Rewriting the yyacc utility in C++ makes it ASAN safe and hence makes it
possible to build an ASAN enabled b2 engine. To eventually make all
of the b2 engine ASAN safe.
* Changed icelake to icelake-client and icelake-server. The single
icelake switch is not accepted by gcc.
* Added cascadelake, cooperlake and tigerlake Intel targets.
* Added znver2 AMD target.
* Added c7 VIA target.
* Reordered the list of targets in instruction-set definition
to group targets by CPU vendors.
* Updated toolsets with the new and updated values of instruction-set.
* Updated .py files as well. Added instruction-set values that were
missing compared to .jam files.
* Added cxxstd value 20 for C++20.
The -std=c++20 is supported by clang 10.
* Updated cxxstd=latest for clang 5.0 and newer.
clang 5.0 supports -std=c++17. clang 6.0 supports -std=c++2a.
clang 10.0 supports -std=c++20.
* Updated cxxstd=latest for gcc.
gcc 4.9 supports -std=c++14. gcc 6 supports -std=c++17. gcc 10 will support
-std=c++20.
* Added support for cxxstd=20 to toolsets that don't support C++20.
* Use /Zc:inline flag
VC12.0 (VS2013 Update 2) introduced /Zc:inline opt-in standard conformance
compiler flag that also similar to linker /opt:ref removes unreferenced
variables and functions that have internal linkage
* Use /Zc:throwingNew flag
VC14.0 introduced /Zc:throwingNew opt-in flag that disables a workaround
for not throwing operator new in VC up to 6.0