bug#76177: _LT_SYS_HIDDEN_LIBDEPS oddities with Fortran

Christian Feld <[email protected]> Mon, 10 Feb 2025 10:53:07 +0000
Newsgroups gmane.comp.gnu.libtool.bugs
Message-ID <[email protected]>
--=_ff7b6915375cf5ef860ee42dfe1b77b8
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII;
 format=flowed

Dear libtoolers,

my project uses C, C++, Fortran 77. One library consists of mixed CC and 
F77 sources. I intend to switch to more modern Fortran (FC) for this 
library.

Linking this library with F77LINK worked well. Switching to FCLINK 
causes errors for some compilers due to broken postedeps_FC.

  - For HPE Cray PrgEnv-cray's ftn, postedeps_FC contains '... -L -L 
...'.
  - For HPE Cray PrgEnv-gnu's ftn, OpenMPI's and MPICH's mpifort 
(delegating to gfortran), postedeps_FC contains '... -l -l ...'.

During investigating the cause of the broken postdeps_FC, several 
questions arose.

1. Why do we have postdeps for CXX and FC, but not for CC and F77?  
_LT_SYS_HIDDEN_LIBDEPS is expanded in _LT_LANG_CXX_CONFIG and 
_LT_LANG_FC_CONFIG only.

2. Why do we need postdeps at all? Isn't the compiler supposed to do 
just the right thing?

3. Without a C++ compiler (AC_PROG_CXX), postedeps_FC is always empty, 
as output_verbose_link_cmd, the command producing the input to determine 
the postdeps, is set in _LT_LANG_CXX_CONFIG only. If this is coupling 
intended, can you please explain why?


Now, where do the bogus `... -L -L ...` and `... -l -l ...` come from? 
The output_verbose_link_cmd used for CXX and FC postdeps is
     '$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v 
"^Configured with:" | $GREP " [[-]]L"'
For the compilers mentioned above, the output of this command contains a 
line starting with 'Driving:', e.g.,

Driving: 
/p/software/jedi/stages/2025/software/GCCcore/13.3.0/bin/gfortran 
-shared -g -O2 -v conftest.o 
-I/p/software/default/stages/2025/software/OpenMPI/5.0.5-GCC-13.3.0/include 
-I/p/software/default/stages/2025/software/OpenMPI/5.0.5-GCC-13.3.0/lib 
-L/p/software/default/stages/2025/software/OpenMPI/5.0.5-GCC-13.3.0/lib 
-Wl,-rpath 
-Wl,/p/software/default/stages/2025/software/OpenMPI/5.0.5-GCC-13.3.0/lib 
-Wl,--enable-new-dtags -lmpi_usempif08 -lmpi_usempi_ignore_tkr 
-lmpi_mpifh -lmpi -l gfortran -l m -shared-libgcc

The part '-l gfortran -l m' results in '... -l -l ...'


Lines starting with 'Configured with:' are already omitted in 
output_verbose_link_cmd. Omitting lines starting with 'Driving:'  as 
well would fix the invalid postdeps_FC. Note that autoconf's 
_AC_PROG_FC_V_OUTPUT also omits both, '^Driving:' and '^Configured 
with:', see [1].

A patch omitting lines '^Driving:'  is attached. But do we need to 
expand _LT_SYS_HIDDEN_LIBDEPS for FC at all?

Thanks,
Christian

[1] 
https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=blob;f=lib/autoconf/fortran.m4;h=cdc197bd67f4abab036cfe6a3a59d16aa712a386;hb=6199cff2909e0ac84c9391aa49ed097d6a33268d#l514
--=_ff7b6915375cf5ef860ee42dfe1b77b8
Content-Transfer-Encoding: base64
Content-Type: text/x-patch;
 name=output_verbose_link_cmd.patch
Content-Disposition: attachment;
 filename=output_verbose_link_cmd.patch;
 size=2489

ZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CmluZGV4IGMwZDE5ZTQ1
Li4zMGU4OTU2MyAxMDA2NDQKLS0tIGEvbTQvbGlidG9vbC5tNAorKysgYi9tNC9saWJ0b29sLm00
CkBAIC02NTg4LDcgKzY1ODgsNyBAQCBpZiB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vy
cm9yIjsgdGhlbgogICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVy
Ym9zZSBvdXRwdXQgdGhhdCBsaXN0cwogICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywg
b2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCiAgICAgICAjIGxpbmtpbmcgYSBz
aGFyZWQgbGlicmFyeS4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJl
ZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJl
ZCB3aXRoOiIgfCAkR1JFUCAiIFtbLV1dTCInCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2Nt
ZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAt
diAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgLXYgIl5Ecml2aW5nOiIgfCAkR1JFUCAiIFtb
LV1dTCInCiAKICAgICBlbHNlCiAgICAgICBHWFg9bm8KQEAgLTczNzMsNyArNzM3Myw3IEBAIGlm
IHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiOyB0aGVuCiAJICAgICAgIyBDb21t
YW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwog
CSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3Mg
YXJlIHVzZWQgd2hlbgogCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAg
IG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0
LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiIFtb
LV1dTCInCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxB
R1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6
IiB8ICRHUkVQIC12ICJeRHJpdmluZzoiIHwgJEdSRVAgIiBbWy1dXUwiJwogCiAJICAgIGVsc2UK
IAkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKQEAgLTc0
NjAsNyArNzQ2MCw3IEBAIGlmIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiOyB0
aGVuCiAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3Nl
IG91dHB1dCB0aGF0IGxpc3RzCiAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBv
YmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KIAkgICAgICAgICMgbGlua2luZyBh
IHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAt
c2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25m
aWd1cmVkIHdpdGg6IiB8ICRHUkVQICIgW1stXV1MIicKKwkgICAgICAgIG91dHB1dF92ZXJib3Nl
X2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8
ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAtdiAiXkRyaXZpbmc6IiB8ICRH
UkVQICIgW1stXV1MIicKIAkgICAgICBlbHNlCiAJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0
byByZXF1aXJlICctRycgTk9UICctc2hhcmVkJyBvbiB0aGlzCiAJICAgICAgICAjIHBsYXRmb3Jt
LgpAQCAtNzQ3MSw3ICs3NDcxLDcgQEAgaWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9l
cnJvciI7IHRoZW4KIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNl
IHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJy
YXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgogCSAgICAgICAgIyBs
aW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2Nt
ZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5D
b25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICIgW1stXV1MIicKKwkgICAgICAgIG91dHB1dF92ZXJi
b3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAk
R1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgLXYgIl5Ecml2aW5nOiIgfCAkR1JF
UCAiIFtbLV1dTCInCiAJICAgICAgZmkKIAogCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGli
ZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiAkd2wkbGliZGlyJwo=
--=_ff7b6915375cf5ef860ee42dfe1b77b8--