It's not worth the trouble of dealing with the dynamic msvc runtime. Especially all the times AZP and GHA forget to properly install VS updates and break dynamic linking. So stay with the larger binary sizes and static runtime.
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
Add property-db class to record & write structured data.
This adds a utility to record structured data in the form of a property database where the keys are a property path with string or number values. The data can be converted to a string, or written to a file, as JSON.
1. Consider options when constructing values for install directories.
2. Evaluate explicitly-provided values for directories relative to PWD,
not base directory.
3. Change 2 requires a different implementation of staging-prefix
handling.
It dpesn't support multiple input files, leading to an error:
`
cpp: fatal error: too many input files
Fixes bfgroup/b2/issues/323
Fixes boostorg/build/issues/613
Fixes boostorg/build/issues/614
The rule was misnamed, as it returned relevant properties, not
features. The misnomer seems to had been the source of misuse: ac module
did not consider any feature other than <link> to be relevant when
checking for library existance. That could result in incorrect config
checks.
The change renames the rule to get-relevant-properties, and adds back
get-relevant-features that returns features. In addition, it fixes the
usage of get-relevant-features in ac module (it called the rule without
arguments), and removes another usage where its invocation could not
result in anything meaningful.
This change allows putting `using X ;` into build scripts (as opposed to
user configs) without creating a conflicting or wrong setup for module
X. This is so that build scripts could rely on toolset modules having
been configured (at least with default values).
The commit only updates toolset modules which allow `using` without
arguments in the first place. It also does not change toolset modules
for C++ compilers, as nobody does e.g. `using gcc ;` in their build
scripts anyway.