Do not remove MinGW libraries from Fortran default linker flags

Markus Mützel <[email protected]> Thu, 12 Dec 2024 12:42:48 +0000
Newsgroups gmane.comp.sysutils.autoconf.patches
Message-ID <trinity-96af540b-bfb0-4d03-ac64-af7e4a50ea6b-1734007368142@trinity-msg-rest-gmx-gmx-live-bbc95d94c-m7hq5>
Stripping `-lmingwex` from the Fortran default linker flags can lead to
a situation where the first `-lmsvcrt` appears before the first
`-lmingwex` for a library that consists of Fortran and C++ sources.
That means that the linker picks some functions from the Windows CRT that
should instead be picked from `libmingwex.a`.

It took quite some time to figure out an odd behavior when calling
`std::asin` with a complex double precision value with a real part larger
than 1.0 and an imaginary part of 0.0 in such a library.
See also: https://octave.discourse.group/t/6026/75

Also don't strip `-lmoldname` from these flags because omitting that
library could result in issues when Fortran code tries to call POSIX-like
C functions without a `_` prefix when targeting MinGW.

The following change fixes these issues by essentially reverting the
changes from:
https://lists.gnu.org/r/autoconf-patches/2021-09/msg00000.html

I'm not sure why `-lkernel32` needs to be removed from the linker flags
when targeting MinGW. But we didn't observe an issue with that, so I left
that as applied in that changeset.

diff -urN autoconf-2.72/lib/autoconf/fortran.m4.orig autoconf-2.72/lib/autoconf/fortran.m4
--- autoconf-2.72/lib/autoconf/fortran.m4.orig	2024-10-30 13:31:24.456674400 +0100
+++ autoconf-2.72/lib/autoconf/fortran.m4	2024-12-11 16:08:46.415095400 +0100
@@ -705,7 +705,7 @@
 	-lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
 	  |-LANG:=* | -LIST:* | -LNO:* | -link)
 	  ;;
-	-lkernel32 | -lmingw* | -lmoldname)
+	-lkernel32)
 	  # Ignore this library only on Windows-like systems.
 	  case $host_os in
 	  cygwin* | msys* | mingw* | windows*) ;;