David Edelsohn writes: > On Thu, Nov 16, 2023 at 5:22 PM Arsen Arsenović wrote: > >> >> David Edelsohn writes: >> >> > Don't build with the dependent libraries in tree. Don't build the >> > dependent libraries as shared libraries. The libraries are already built >> > and in /opt/cfarm, as mentioned in the Compile Farm wiki. >> > >> > AIX is not Solaris and not Linux. It doesn't use ELF. AIX shared >> > libraries *ARE* shared object files in archives. Shared object >> versioning >> > is handled by multiple objects in the same archive. >> >> Hmm, I see. I removed all the deps but gettext from the tree. >> >> This leaves gettext-runtime fulfilling the previous role of intl/. >> >> However, I'm confused about how this worked before, in that case, since, >> IIRC, intl also produced libraries and was also put into host exports. >> >> Leaving gettext in tree produces: >> >> Could not load program gawk: >> Dependent module >> /home/arsen/build/./gettext/intl/.libs/libintl.a(libintl.so.8) could not be >> loaded. >> Member libintl.so.8 is not found in archive >> >> I'll try to see why intl/ didn't cause the same issue soon. >> >> Thanks, have a lovely evening. >> > > The previous version of "intl" was built as a static library. Configure in > the older package had the option --enable-host-shared, > which I did not use. Based on the failure message, the in-tree gettext > seems to be built as a shared library. If you explicitly > pass --disable-shared to the in-tree configure, you may get farther. I'm > currently using --disable-shared --disable-threads. > As we have discussed, the current gettext will retain some references to > pthreads despite the configure option. Sure, but my patch does insert --disable-shared: --8<---------------cut here---------------start------------->8--- host_modules= { module= gettext; bootstrap=true; no_install=true; module_srcdir= "gettext/gettext-runtime"; // We always build gettext with pic, because some packages (e.g. gdbserver) // need it in some configuratons, which is determined via nontrivial tests. // Always enabling pic seems to make sense for something tied to // user-facing output. extra_configure_flags='--disable-shared --disable-java --disable-csharp --with-pic'; lib_path=intl/.libs; }; --8<---------------cut here---------------end--------------->8--- ... and it is applied: --8<---------------cut here---------------start------------->8--- -bash-5.1$ ./config.status --config --srcdir=../../gcc/gettext/gettext-runtime --cache-file=./config.cache --disable-werror --with-gmp=/opt/cfarm --with-libiconv-prefix=/opt/cfarm --disable-libstdcxx-pch --with-included-gettext --program-transform-name=s,y,y, --disable-option-checking --build=powerpc-ibm-aix7.3.1.0 --host=powerpc-ibm-aix7.3.1.0 --target=powerpc-ibm-aix7.3.1.0 --disable-intermodule --enable-checking=yes,types,extra --disable-coverage --enable-languages=c,c++ --disable-build-format-warnings --disable-shared --disable-java --disable-csharp --with-pic build_alias=powerpc-ibm-aix7.3.1.0 host_alias=powerpc-ibm-aix7.3.1.0 target_alias=powerpc-ibm-aix7.3.1.0 CC=gcc CFLAGS=-g 'LDFLAGS=-static-libstdc++ -static-libgcc -Wl,-bbigtoc' 'CXX=g++ -std=c++11' CXXFLAGS=-g --8<---------------cut here---------------end--------------->8--- I'm unsure how to tell what the produced binaries are w.r.t static or shared, but I only see .o files inside intl/.libs/libintl.a, while I see a .so.1 in (e.g.) /lib/libz.a, hinting at it not being shared (?) I do see that the build system adds intl to the LD_LIBRARY_PATH. I will be testing dropping lib_path from the module definition above. It might be superflous (I think it is only used for LD_LIBRARY_PATH, for when the libs built by the build system are shared - which they never are for in-tree gettext). I'll take the shot to add --disable-threads, too, for this test.