David Edelsohn <dje....@gmail.com> writes:

> On Thu, Nov 16, 2023 at 5:52 PM Arsen Arsenović <ar...@aarsen.me> 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ć

Attachment: signature.asc
Description: PGP signature

Reply via email to