build_context: improve wheel reproducibility by sorting libs #2261
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While tracking a reproducibility issue from maturin's output, we found that the .so file in the output .whl were not ordered the same every time.
Order of the external libraries in the .whl comes down to the order
soname_map
is iterated. But,std::HashMap
does not provide a stable order and that create an unstable order in the wheel.Switch to
std::BTreeMap
which keeps keys sorted and is iterable in a stable order.This can be tested by building current python3-cryptography :
Before this commit, the above give two possible outputs (~50% each), the difference is in the order of libssl and libcrypto.
After this commit, the output is reproducible.