Skip to content

Windows: rewrite paths to configure #7652

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 1 commit into from
Sep 18, 2021

Conversation

Mistuke
Copy link
Collaborator

@Mistuke Mistuke commented Sep 15, 2021

Should fix #7649 but I don't have msys2 on this machine so other than building Cabal I can't test until I get home.

@jneira @Mikolaj , @jneira could you test this until then?


Please include the following checklist in your PR:

Please also shortly describe how you tested your change. Bonus points for added tests!

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

I don't trust my understanding of this toolset any more, but it generally looks good. Let's remember to revert the failed fix first (#7651) and then this PR can be a tiny bit smaller.

@Mistuke Mistuke force-pushed the fix-configure-different-way branch 2 times, most recently from 98d1120 to 725944b Compare September 15, 2021 09:59
@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 15, 2021

I don't trust my understanding of this toolset any more, but it generally looks good. Let's remember to revert the failed fix first (#7651) and then this PR can be a tiny bit smaller.

So the idea is to convert sh C:\/foo/bar/configure that cabal generates into sh /C/foo/bar/configure. so we avoid the : in the path.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

I've merged #7651 that reverts the old fix, hence the conflict, but the conflicting bit can just be removed, it's already applied.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

Oh, I missed that {-# LANGUAGE CPP #-} at the top should not be reverted (so should be added here).

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 15, 2021

Oh, I missed that {-# LANGUAGE CPP #-} at the top should not be reverted (so should be added here).

Ah, that's why! lol

@Mistuke Mistuke force-pushed the fix-configure-different-way branch from 9e3d558 to 1764980 Compare September 15, 2021 11:56
Copy link
Member

@Mikolaj Mikolaj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, but we need tests with scripts generated with various versions of autoconf to make sure the layers of hacks around all this don't intervene.

@jneira
Copy link
Member

jneira commented Sep 15, 2021

I've tested it in my windows 10:

PS D:\dev\ws\haskell\issues> cabal get network
Unpacking to network-3.1.2.2\
PS D:\dev\ws\haskell\issues> cd .\network-3.1.2.2\
PS D:\dev\ws\haskell\issues\network-3.1.2.2> D:\bin\cabal.exe build                                 Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
 - network-3.1.2.2 (lib:network) (first run)
Configuring network-3.1.2.2...
configure: WARNING: unrecognized options: --with-compiler
checking build system type... x86_64-pc-msys
checking host system type... x86_64-pc-msys
checking for gcc... D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe accepts -g... yes
checking for D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe option to accept ISO C89... none needed
checking for an ANSI C-conforming const... yes
checking how to run the C preprocessor... D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for sys/types.h... (cached) yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking sys/uio.h usability... no
checking sys/uio.h presence... no
checking for sys/uio.h... no
checking sys/socket.h usability... no
checking sys/socket.h presence... no
checking for sys/socket.h... no
checking netinet/in.h usability... no
checking netinet/in.h presence... no
checking for netinet/in.h... no
checking netinet/tcp.h usability... no
checking netinet/tcp.h presence... no
checking for netinet/tcp.h... no
checking sys/un.h usability... no
checking sys/un.h presence... no
checking for sys/un.h... no
checking arpa/inet.h usability... no
checking arpa/inet.h presence... no
checking for arpa/inet.h... no
checking netdb.h usability... no
checking netdb.h presence... no
checking for netdb.h... no
checking net/if.h usability... no
checking net/if.h presence... no
checking for net/if.h... no
checking netioapi.h usability... yes
checking netioapi.h presence... yes
checking for netioapi.h... yes
checking for struct ucred... no
checking for gai_strerror... no
checking for gethostent... no
checking for accept4... no
checking for getpeereid... no
checking whether AI_ADDRCONFIG is declared... yes
checking whether AI_ALL is declared... yes
checking whether AI_NUMERICSERV is declared... yes
checking whether AI_V4MAPPED is declared... yes
checking whether IPV6_V6ONLY is declared... yes
checking whether IPPROTO_IP is declared... yes
checking whether IPPROTO_TCP is declared... yes
checking whether IPPROTO_IPV6 is declared... yes
checking whether SO_PEERCRED is declared... no
checking for struct msghdr.msg_control... no
checking for struct msghdr.msg_accrights... no
checking for struct sockaddr.sa_len... no
configure: creating ./network.buildinfo
configure: creating ./config.status
config.status: creating include/HsNetworkConfig.h
configure: WARNING: unrecognized options: --with-compiler
Preprocessing library for network-3.1.2.2..
Building library for network-3.1.2.2..
[ 1 of 28] Compiling Network.Socket.Imports ( Network\Socket\Imports.hs, D:\dev\ws\haskell\issues\network-3.1.2.2\dist-newstyle\build\x86_64-windows\ghc-8.10.7\network-3.1.2.2\build\Network\Socket\Imports.o )
...................................
[28 of 28] Compiling Network.Socket.ByteString.Lazy ( Network\Socket\ByteString\Lazy.hs, D:\dev\ws\haskell\issues\network-3.1.2.2\dist-newstyle\build\x86_64-windows\ghc-8.10.7\network-3.1.2.2\build\Network\Socket\ByteString\Lazy.o )
In file included from D:\ghcup\ghc\8.10.7\lib/include/HsFFI.h:20,

                 from cbits\asyncAccept.c:6:0: error:
D:\ghcup\ghc\8.10.7\lib/include/stg/Types.h:26:9: warning: #warning "Mismatch between __USE_MINGW_ANSI_STDIO definitions. If using Rts.h make sure it is the first header included." [-Wcpp]
   26 | #       warning "Mismatch between __USE_MINGW_ANSI_STDIO definitions. \
      |         ^~~~~~~
In file included from D:\ghcup\ghc\8.10.7\lib/include/HsFFI.h:20,

                 from cbits\initWinSock.c:2:0: error:
D:\ghcup\ghc\8.10.7\lib/include/stg/Types.h:26:9: warning: #warning "Mismatch between __USE_MINGW_ANSI_STDIO definitions. If using Rts.h make sure it is the first header included." [-Wcpp]
   26 | #       warning "Mismatch between __USE_MINGW_ANSI_STDIO definitions. \
      |         ^~~~~~~
In file included from D:\ghcup\ghc\8.10.7\lib/include/HsFFI.h:20,

                 from cbits\winSockErr.c:2:0: error:
D:\ghcup\ghc\8.10.7\lib/include/stg/Types.h:26:9: warning: #warning "Mismatch between __USE_MINGW_ANSI_STDIO definitions. If using Rts.h make sure it is the first header included." [-Wcpp]
   26 | #       warning "Mismatch between __USE_MINGW_ANSI_STDIO definitions. \
      |         ^~~~~~~

previously i checked the same steps with the cabal-3.6.0.0 release version and it failed

Otoh the build generating the config files with autoconf-2.71 in windows also works:

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues
$ cabal get network
Unpacking to network-3.1.2.2\

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues
$ cd network-3.1.2.2

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ rm configure

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ rm config.*

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ ls
CHANGELOG.md  Network    Setup.hs  configure.ac  include     network.cabal
LICENSE       README.md  cbits     examples      install-sh  tests

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ autoreconf --version
autoreconf (GNU Autoconf) 2.71
............

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ autoreconf -i

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ ls
CHANGELOG.md  README.md       cbits         configure     include        tests
LICENSE       Setup.hs        config.guess  configure.ac  install-sh
Network       autom4te.cache  config.sub    examples      network.cabal

atrey@FNTSY MINGW64 /d/dev/ws/haskell/issues/network-3.1.2.2
$ /d/bin/cabal.exe build
Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
 - network-3.1.2.2 (lib:network) (first run)
Configuring network-3.1.2.2...
configure: WARNING: unrecognized options: --with-compiler
configure: loading site script D:/ghcup/msys64/etc/config.site
checking build system type... x86_64-w64-mingw32
checking host system type... x86_64-w64-mingw32
checking for gcc... D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe accepts -g... yes
checking for D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe option to enable C11 features... none needed
checking for an ANSI C-conforming const... yes
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for limits.h... yes
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for fcntl.h... yes
checking for sys/uio.h... no
checking for sys/socket.h... no
checking for netinet/in.h... no
checking for netinet/tcp.h... no
checking for sys/un.h... no
checking for arpa/inet.h... no
checking for netdb.h... no
checking for net/if.h... no
checking for netioapi.h... yes
checking for struct ucred... no
checking for gai_strerror... no
checking for gethostent... no
checking for accept4... no
checking for getpeereid... no
checking for D:\ghcup\ghc\8.10.7\lib\../mingw/bin\gcc.exe options needed to detect all undeclared functions... none needed
checking whether AI_ADDRCONFIG is declared... yes
checking whether AI_ALL is declared... yes
checking whether AI_NUMERICSERV is declared... yes
checking whether AI_V4MAPPED is declared... yes
checking whether IPV6_V6ONLY is declared... yes
checking whether IPPROTO_IP is declared... yes
checking whether IPPROTO_TCP is declared... yes
checking whether IPPROTO_IPV6 is declared... yes
checking whether SO_PEERCRED is declared... no
checking for struct msghdr.msg_control... no
checking for struct msghdr.msg_accrights... no
checking for struct sockaddr.sa_len... no
configure: creating ./network.buildinfo
configure: creating ./config.status
config.status: creating include/HsNetworkConfig.h
configure: WARNING: unrecognized options: --with-compiler
Preprocessing library for network-3.1.2.2..
........

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

@jneira: in the first log, these are only warnings, right? As @Mistuke predicted? All run eventually succeeded?

@jneira
Copy link
Member

jneira commented Sep 15, 2021

@jneira: in the first log, these are only warnings, right? As @Mistuke predicted? All run eventually succeeded?

yeah the build succeded, those warning were present before this version

@jneira
Copy link
Member

jneira commented Sep 15, 2021

time and process also worked in my end

Copy link
Member

@jneira jneira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks @Mistuke for taking care

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

@Mistuke: we are waiting until you have some breathing space to have a slow, careful, final look before this is merged. No pressure, of course, the whole world can wait. ;D

I mean, this problem evaded quite extensive testing last time, so we are not as keen as before to believe the tests this time. Hence the special weight of your expertise.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

I've merged #7653 with extra checks that may be useful to test this PR, so let me rebase and see.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 15, 2021

@Mergifyio rebase

@mergify
Copy link
Contributor

mergify bot commented Sep 15, 2021

Command rebase: success

Branch has been successfully rebased

@jneira jneira force-pushed the fix-configure-different-way branch from 1764980 to 320d0bf Compare September 15, 2021 23:47
@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 16, 2021

@Mistuke: we are waiting until you have some breathing space to have a slow, careful, final look before this is merged. No pressure, of course, the whole world can wait. ;D

Morning! I have some work to finish this morning but will do some manual checks today after work in ~9h.

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 16, 2021

@jneira thanks for also testing so far.

@jneira
Copy link
Member

jneira commented Sep 16, 2021

@jneira That's for also testing so far.

@Mistuke
I tried to test it with autoconf-2.69 but i was not able to make it generate config.sub and config.guess, even using --force. so the consequent build fails cause they are not.
I downgraded it with pacman -R autoconf, downloading https://repo.msys2.org/msys/sources/autoconf-2.69-5.src.tar.gz and installing it with pacman -U path/to/autoconf-2.69-5.src.tar.gz. Maybe i need other version?

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 17, 2021

I tried to test it with autoconf-2.69 but i was not able to make it generate config.sub and config.guess, even using --force. so the consequent build fails cause they are not.

@jneira those files belong to automake, autoconf only reads them not makes them. If you really want to generate new ones you should use automake -a after removing them.

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 17, 2021

@jneira: in the first log, these are only warnings, right? As @Mistuke predicted? All run eventually succeeded?

those warnings are a bug in network and are produced by GHC as a sanity check.

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 17, 2021

It looks like only the path to configure is being rewritten as expected:

"C:\tools\msys64\usr\bin\sh.exe" "/C/Users/xbox/source/repos/network/configure" "--with-compiler=ghc" "--prefix=C:\Users\xbox\AppData\Roaming\cabal" "--bindir=C:\Users\xbox\AppData\Roaming\cabal\bin" "--libdir=C:\Users\xbox\AppData\Roaming\cabal\x86_64-windows-ghc-8.10.3\network-3.2.0.0-inplace" "--libexecdir=C:\Users\xbox\AppData\Roaming\cabal\network-3.2.0.0-inplace\x86_64-windows-ghc-8.10.3\network-3.2.0.0" "--datadir=C:\Users\xbox\AppData\Roaming\cabal\x86_64-windows-ghc-8.10.3\network-3.2.0.0" "--sysconfdir=C:\Users\xbox\AppData\Roaming\cabal\etc" "CC=C:\PROGRA~3\CHOCOL~1\lib\ghc\tools\GHC-81~1.3\lib\../mingw/bin\gcc.exe"

so that's good.

Building both my local and package network works:

Build profile: -w ghc-8.10.3 -O1
In order, the following will be built (use -v for more details):
 - network-3.1.2.2 (lib:network) (requires build)
Starting     network-3.1.2.2 (all, legacy fallback)
Building     network-3.1.2.2 (all, legacy fallback)
Installing   network-3.1.2.2 (all, legacy fallback)
Completed    network-3.1.2.2 (all, legacy fallback)

Looking at the log file:

It was created by Haskell network package configure 3.1.2.1, which was
generated by GNU Autoconf 2.71.  Invocation command line was

  $ /C/Users/xbox/source/repos/network/configure --with-compiler=ghc '--prefix=C:\Users\xbox\AppData\Roaming\cabal' '--bindir=C:\Users\xbox\AppData\Roaming\cabal\bin' '--libdir=C:\Users\xbox\AppData\Roaming\cabal\x86_64-windows-ghc-8.10.3\network-3.2.0.0-inplace' '--libexecdir=C:\Users\xbox\AppData\Roaming\cabal\network-3.2.0.0-inplace\x86_64-windows-ghc-8.10.3\network-3.2.0.0' '--datadir=C:\Users\xbox\AppData\Roaming\cabal\x86_64-windows-ghc-8.10.3\network-3.2.0.0' '--sysconfdir=C:\Users\xbox\AppData\Roaming\cabal\etc' 'CC=C:\PROGRA~3\CHOCOL~1\lib\ghc\tools\GHC-81~1.3\lib\../mingw/bin\gcc.exe'
....
configure:2408: looking for aux files: config.guess config.sub
configure:2421:  trying /C/Users/xbox/source/repos/network/
configure:2450:   /C/Users/xbox/source/repos/network/config.guess found
configure:2450:   /C/Users/xbox/source/repos/network/config.sub found
configure:2628: checking build system type
configure:2643: result: x86_64-pc-msys
configure:2663: checking host system type
configure:2677: result: x86_64-pc-msys

and nothing else uses the new paths, Everything else still uses C:\/ as before.

@jneira
Copy link
Member

jneira commented Sep 17, 2021

Dos shortnames are a file system concept. They hold no meaning in anything but NTFS, as such they are handled by the file system driver and not a user mode application. To userland (and msys2) there's no difference when they are used or not so they work just fine.

Thanks, i might overlook it remembering this issue: #7170

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 17, 2021

Dos shortnames are a file system concept. They hold no meaning in anything but NTFS, as such they are handled by the file system driver and not a user mode application. To userland (and msys2) there's no difference when they are used or not so they work just fine.

Thanks, i might overlook it remembering this issue: #7170

That's unrelated to this. There's no configuring going on there and the post contains too few information to tell what's going on.
It's likely some other tool or part of cabal thinks it's invalid. https://ss64.com/nt/syntax-filenames.html

Also these things come with a significant performance cost (which is why I and a lot of people have them disabled everywhere):

In any directory containing more than 25,000 files there is a significant performance cost ~ 6,000 files per hour vs 2 million files per hour.

@jneira
Copy link
Member

jneira commented Sep 17, 2021

Dos shortnames are a file system concept. They hold no meaning in anything but NTFS, as such they are handled by the file system driver and not a user mode application. To userland (and msys2) there's no difference when they are used or not so they work just fine.

Thanks, i might overlook it remembering this issue: #7170

That's unrelated to this. There's no configuring going on there and the post contains too few information to tell what's going on.
It's likely some other tool or part of cabal thinks it's invalid. https://ss64.com/nt/syntax-filenames.html

Also these things come with a significant performance cost (which is why I and a lot of people have them disabled everywhere):

In any directory containing more than 25,000 files there is a significant performance cost ~ 6,000 files per hour vs 2 million files per hour.

Thanks for share your knowledge and your patience 🙂
Will try to reproduce the issue to provide more info

@Mistuke
Copy link
Collaborator Author

Mistuke commented Sep 17, 2021

Thanks for share your knowledge and your patience 🙂
Will try to reproduce the issue to provide more info

That issue just looks like either cabal is not given the short pathname at all by the shell or something is expanding it to the full path.

I'll be honest, not really sure it's worth fixing. I think focus should be to just enable winio and move on. Dos shortnames are legacy and not supported by newer windows filesystems anyway.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 18, 2021

CI on master is now fixed, so let me rebase.

@Mikolaj
Copy link
Member

Mikolaj commented Sep 18, 2021

@Mergifyio rebase

@mergify
Copy link
Contributor

mergify bot commented Sep 18, 2021

Command rebase: success

Branch has been successfully rebased

@jneira jneira force-pushed the fix-configure-different-way branch from 320d0bf to 5da51fc Compare September 18, 2021 10:31
@Mikolaj
Copy link
Member

Mikolaj commented Sep 18, 2021

Oh, dear, I forgot the PR that fixes the last bit of master CI doesn't have enough reviews and so is not merged. So, it's going to fail.

@jneira
Copy link
Member

jneira commented Sep 18, 2021

#7659 is merged so rebasing
@Mergifyio rebase

@mergify
Copy link
Contributor

mergify bot commented Sep 18, 2021

Command rebase: success

Branch has been successfully rebased

@jneira jneira force-pushed the fix-configure-different-way branch from 5da51fc to 4c800c9 Compare September 18, 2021 13:16
@jneira jneira added the merge me Tell Mergify Bot to merge label Sep 18, 2021
@mergify mergify bot merged commit 3b7655f into haskell:master Sep 18, 2021
@jneira
Copy link
Member

jneira commented Sep 18, 2021

@Mergifyio backport 3.6

@mergify
Copy link
Contributor

mergify bot commented Sep 18, 2021

Command backport 3.6: success

Backports have been created

@Mikolaj
Copy link
Member

Mikolaj commented Sep 18, 2021

Well done. Full green CI, finally, including the dogfooding tests that catch the original bug in cabal 3.6 (though not the new autoconf problems that were present in 3.4, because the new autoconf configs are not yet present in packages on Hackage, I think).

@Mikolaj
Copy link
Member

Mikolaj commented Sep 19, 2021

As soon as #7664 gets merged to 3.6 by mergifyIO, we can backport this again to 3.6 and it should merge correctly and pass CI fine this time.

This will add the last missing piece in the back/forward-porting effort related to 3.6.2 and CI failures:

PRs on master (from old to new):
1 #7651 v
2 #7653 v
3 #7650 v
4 #7658 v forwardport of #7657
5 #7659 v
6 #7652

corresponding PR backports (some extended) on 3.6:
2 #7653
4 #7657 forward-ported to #7658
5 #7659
3 #7650
  #7665   3.6-exclusive CI fix
1 #7651

@jneira
Copy link
Member

jneira commented Sep 19, 2021

Wow, many thanks for this tour the force and share the info

@Mikolaj
Copy link
Member

Mikolaj commented Sep 19, 2021

I'm not working today, but let me just repeat what @jneira did 18 hours ago and for what 3.6 is now finally ready:
@Mergifyio backport 3.6

@mergify
Copy link
Contributor

mergify bot commented Sep 19, 2021

Command backport 3.6: success

Backports have been created

@Mikolaj
Copy link
Member

Mikolaj commented Sep 19, 2021

Huh, actually mergifyIO mentions the same old PR instead of creating a new one. So I guess, this needs to be backported manually after all. See you on Monday!

Mikolaj added a commit that referenced this pull request Sep 20, 2021
Windows: rewrite paths to configure (backport #7652)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merge me Tell Mergify Bot to merge
Projects
None yet
Development

Successfully merging this pull request may close these issues.

cabal-install-3.6 fails to install network-3.1.2.2 in windows
3 participants