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
This adds exclusions for toolsets that use response files for some
commands. Mostly it ignores the generated rsp files.
But also adds a special arg_file value to the MockProgram for future
use for possible content checking.