-
Notifications
You must be signed in to change notification settings - Fork 244
Fix Windows and GHC/ucrt. #2034
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Also includes #1970 now. |
Fixes errors like this when trying to load DLLs into template haskell code with GHC 9.4 and above: ``` iserv-proxy-interpreter.exe: addLibrarySearchPath: \\?\Z:\nix\store\gjsf5jazfbfv21hvvgf1amd5rdx3ycf3-x86_64-w64-mingw32-ghc-9.4.3\lib\x86_64-windows-ghc-9.4.3\ghc-bignum-1.3 (Win32 error 87): Invalid parameter. ``` These errors arise with GHC 9.4 and above because it uses UNC paths to avoid limits on path length. The `RtlDetermineDosPathNameType_U` function classifies these as a `DEVICE_PATH` and `LdrAddDllDirectory` gives up at that point.
99cd261
to
1d559c9
Compare
Nixpkgs `mingw64` is a msvcrt based toolchain. GHC 9.4+ moved on to a ucrt based toolchain. We can hover reverse this change in GHC and keep using msvcrt for now. We also need to prevent the linker for linking ucrt, as that is is incompatible with ucrt. By doing so we can also upgrade to a newer wine, which contains ucrt libs. This would previously have thrown our TH logic off.
1d559c9
to
1ea1a3b
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
GHC 9.4+ GHC uses ucrt and the llvm toolchain by default on windows. The one we have in nixpkgs is gcc and msvcrt based. A ucrt/llvm Pull Request was reverted in nixpkgs.
As such we now switch GHC back to using msvcrt for the time being. I've had lengthy discussions with Tamar about this, and it will be safe for now; we will eventually move to ucrt.
Wine in 5.5+ also started using ucrt for some libraries as such wine caused ucrtbase.dll to be loaded transitively and GHC ended up resolving symbols into ucrtbase.dll instead of msvcrt.dll, thus leading to all kinds of misfeatures (different file handles, errno, ...).
As such we now live in a msvcrt universe again in haskell.nix until we have ucrt in nixpkgs and can consider switching.