Subject: Re: [EXTERNAL] Re: bug#54817: Outdated IBM XL Fortran shared library work around

From: William T Jones <[email-masked]>
Date: Mon, 11 Apr 2022 14:17:58 -0400

Alex,

It appears to be in the git repo, so if that is 2.4.7, then yes. 
Attached is a patch that works for me, checking to see if the XL Fortran 
compiler is at least Version 16 or better (maybe a better way of checking).

Thanks for responding so quickly,

Bill

I have more general workaround where I check the IBM XL Fortran 
version.  See example below:

On 4/9/22 12:24 PM, Alex Ameen wrote:
> This sounds reasonable to me. Just to clarify, is this workaround 
> still in 2.4.7?
>
> On Sat, Apr 9, 2022, 10:02 AM William T Jones via Bug-libtool via Bug 
> reports for the GNU libtool shared library maintenance tool 
> <[email-masked]> wrote:
>
>     Hello,
>
>     Libtool 2.4.6 has an apparently outdated work around for the IBM XL
>     Fortran compiler's inability to link shared libraries (see
>     m4/libtool.m4
>     lines 5208, 5237-5248).
>
>     As comments in m4/libtool.m4 state, the problem is with IBM XL
>     Fortran
>     version 10.1 on PowerPC.  However, we are now using IBM XL Fortran
>     version 16.1 on PPC (ORNL summit) and it does allow linking of shared
>     objects with xlf via the same "-qmkshrobj" command line option
>     used by
>     xlc and xlC on lines 5208-5210 of m4/libtool.m4.
>
>     To make matters worse, the workaround of using $LD to link shared
>     libraries with Fortran objects does not easily work when linking
>     mixed
>     language object code into such a shared library (one needs to know
>     IBM
>     XL paths to libraries like libibmc++.so and libstdc++.so, for
>     example).
>     This is easily resolved when one links with `xlf -qmkshrobj ...`.
>
>     It is suggested that this workaround check for compiler version or be
>     deprecated.
>
>     Resolution is appreciated,
>
>
>     -- 
>     =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
>
>          Bill Jones [email-masked]
>          Mail Stop 128                     Computational AeroSciences
>     Branch
>          15 Langley Boulevard                           Research
>     Directorate
>          NASA Langley Research Center               Building 1268,
>     Room 1044
>          Hampton, VA  23681-2199                       Phone +1 757
>     864-5318
>                                                          Fax +1 757
>     864-8816
>     http://fun3d.larc.nasa.gov
>
>
>
>
>     _______________________________________________
>     Bug-libtool mailing list
>     [email-masked]
>     https://lists.gnu.org/mailman/listinfo/bug-libtool
>     <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.gnu.org%2Fmailman%2Flistinfo%2Fbug-libtool&data=04%7C01%7Cw.t.jones%40nasa.gov%7C048ad35efb4d49bb2e5108da1a45877d%7C7005d45845be48ae8140d43da96dd17b%7C0%7C0%7C637851183171355906%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=A3cTh16ONe08vyfeB%2Fe2zNF1EGiGbVwdNfFFBVZp0is%3D&reserved=0>
>
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

     Bill [email-masked]
     Mail Stop 128                     Computational AeroSciences Branch
     15 Langley Boulevard                           Research Directorate
     NASA Langley Research Center               Building 1268, Room 1044
     Hampton, VA  23681-2199                       Phone +1 757 864-5318
                                                     Fax +1 757 864-8816
                                              http://fun3d.larc.nasa.gov
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 79a2451e..bb2c9bd2 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -5229,6 +5229,14 @@ _LT_EOF
 	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 16.1 on PPC can create shared libs itself
+	  if test `$CC -qversion | $GREP IBM | $SED -e 's/IBM XL Fortran for Linux, V//' | $SED -e 's/\..*$//'` -ge 16
+	  then
+	    tmp_sharedflag='-qmkshrobj'
+	    tmp_addflag=
+	  fi
+	  ;;
 	nvcc*)	# Cuda Compiler Driver 2.2
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
@@ -5257,14 +5265,17 @@ _LT_EOF
 	  ;;
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-	  if test yes = "$supports_anon_versioning"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-              cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-              echo "local: *; };" >> $output_objdir/$libname.ver~
-              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  if test `$CC -qversion | $GREP IBM | $SED -e 's/IBM XL Fortran for Linux, V//' | $SED -e 's/\..*$//'` -lt 16
+	  then
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	    if test yes = "$supports_anon_versioning"; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	    fi
 	  fi
 	  ;;
 	esac