Prevent unused dynamic libraries from blocking WASI build #4316
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.
This prevents SwiftPM from hitting a fatal error in TSC until after it is known whether a dynamic product is actually used.
@MaxDesiatov
Motivation:
Right now, if any package in the graph contains a dynamic library product, SwiftPM crashes when building for WASI, even if the product is not used by any target. This happens because SwiftPM attempts to compute the path of the resulting dynamic library before it checks whether it will actually need to build it or not.
Modifications:
This PR takes every query of the dynamic library path that happens early enough to cause problems, and skips it if the destination is WASI.
Queries of the same property that occur after unused products have been filtered out remain as they were, and so the fate is unchanged if you actually attempt to build a dynamic library product.
A test has been added to detect any future regressions; it fails without the rest of the changes.
Result:
Unused dynamic libraries no longer block WASI builds.