Just a copy-paste of lzma.jam, except not introducing
the useless is-default option.
Will be used for zstd compression/decompression support
in iostreams (see also trac ticket #13356).
* New feature <relevant> which is automatically deduced in most cases.
* Features which are not relevant do not affect target paths and
do not prevent merging of virtual targets.
* generators.jam: generator.run always returns usage-requirements
to allow usage-requirements in non-top-level generators. This
is necessary because we're using usage-requirements to track
relevance from flags.
* New rule toolset.uses-features to specify features that the rule
checks manually, instead of using toolset.flags. In the future,
we should consider restricting the properties actually passed,
to detect errors.
* Adjust tests to handle the new paths (verified by inspection).
* Add temporary option --ignore-relevance to consider all features relevant
to aid migration.
* New rule property.evaluate-conditional-relevance which helps tracking
relevance in <conditional>.
* Widely scattered changes to use the new interfaces.
* Fix problems in x-product that could make it return extra property-sets
in complex cases. Also clarify exactly what it is supposed to do.
* free_features_request.py: This is subsumed by the new test.
* direct_request_test.py: This is mostly subsumed by the new test
except for the last test for chained build-projects, which doesn't
make much sense in the current code base as build-project is implemented
very differently.
* Document using / to separate properties.
* property-set now considers <conditional> to be conditional
* property.evaluate-conditionals-in-context now handles indirect
conditionals as well. This is the correct behavior for all places
where evaluate-conditionals-in-context is currently used.
* Indirect conditionals now translate paths relative to the project
in which they were defined, not relative to the current project.
* usage-requirements no longer use targets.evaluate-requirements,
as the iterative algorithm is completely unnecessary (It's also
wrong, since the new features shouldn't be applied to the evaluation
context).
* indirect conditionals are removed from the property set when they
are evaluated, just list regular conditionals. (This is a consequence
of passing them through evaluate-conditionals-in-context)
* This also allows non-free features in usage-requirements to "work" again
(for some definition of work).
* feature.add-defaults: No longer accepts conditionals and returns
expanded properties. This matches the actual usage, and conditionals
never really worked right anyway.
* property.refine: Remove subfeatures of removed features.
* Moved property-set expansion and adding defaults into
targets.evaluate-requirements so that they correctly interact with
the target requirements.
* Expand subfeatures when matching target alternatives.
* Non-property-specific subfeatures like <cxxstd>11-iso are expanded correctly.