David Edelsohn writes: > On Thu, Nov 16, 2023 at 5:52 PM Arsen Arsenović wrote: > > [snip] >> 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 (?) >> > > An AIX shared library created by libtool will look like > libfoo.a[libfoo.so.N], where N is the package major version number. > Normally with one file. > An AIX static library will look like libfoo.a[a.o, b.o, c.o] > with multiple object files. > > An AIX archive can contain a combination of shared objects and > normal object files. > > AIX normally uses the convention shr.o or shr_64.o for the name > of the shared object file. Hint, hint, an AIX archive can contain > both 32 bit and 64 bit object files or shared objects. > > I don't know why the gettext build system would create > /home/arsen/build/./gettext/intl/.libs/libintl.a(libintl.so.8) > if --disable-shared was requested. That clearly is using the > naming of a libtool AIX shared object and failing due to > the missing shared object. Although in this case, the problem > seems to be the shared library load path. AIX uses LIBPATH, > not LD_LIBRARY_PATH. It doesn't create libintl.a with a libintl.so.8 inside of it. The libintl.a contains a bunch of objects, as I'd expect of a static library: --8<---------------cut here---------------start------------->8--- -bash-5.1$ ar -t gettext/intl/.libs/libintl.a | grep libintl -bash-5.1$ ar -t gettext/intl/.libs/libintl.a bindtextdom.o dcgettext.o ... --8<---------------cut here---------------end--------------->8--- > Also, for me, the out of tree path was > > gettext/gettext-runtime/intl/.libs > > Is your search path missing a level? No, the above is generated by the GCC build system and builds gettext-runtime directly (per Brunos recommendation a while ago) as it is replacing intl/ of similar functionality. I'm currently building GCC with libintl with the threads hack you mentioned applied (as I got undefined references to the pthread functions you discovered). I suspect that, bar this issue (which, IIUC, Bruno will fix in a new release?) the patch above will fix the issues you've encountered on AIX (note that if you want to use gettext in-tree, you'd still have to fetch gettext into the tree). Maybe we should provide a download-prerequisite-y script that skips everything but GNU gettext, to retain same behavior? Have a lovely day. -- Arsen Arsenović