I hope it is ok to CC Paul Eggert who applied the patch that broke this as far as I understand.
Is the change below acceptable? It is needed when building Octave targeting Windows. Without it, the implementation of `casin` from the Windows runtime is used instead of the replacement from MinGW-w64. That means that results for the `casin` function are wrong without that change. Markus Rebased on the current head of the master branch: [PATCH] Keep "-lmingwex" and "-lmoldname" in linker flags for MinGW * lib/autoconf/fortran.m4: Do not remove "-lmingwex" or "-lmoldname" from the linker flags when targeting MinGW. Removing "-lmingwex" causes an incorrect linker resolution for functions like "casin" for projects that consist of Fortran and C++ sources. Removing "-lmoldname" causes issues for Fortran projects that try to use POSIX-like C functions without a `_` symbol prefix when targeting MinGW. --- lib/autoconf/fortran.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/autoconf/fortran.m4 b/lib/autoconf/fortran.m4 index 75631492..0fc7545d 100644 --- a/lib/autoconf/fortran.m4 +++ b/lib/autoconf/fortran.m4 @@ -666,7 +666,7 @@ while test $[@%:@] != 1; do -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*) ;; -- 2.44.0.windows.1 Am 12. Dezember 2024 um 13:42 schrieb "Markus Mützel": > 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*) ;; >