Hi there! I'm not super familiar with libtool's inner workings, so I was wondering if someone could help point me in the right direction. On AIX, if we configure with --enable-transarc-paths (though I think this happens even without it), and after the make, run "make dest", the resulting binaries don't work.
I'm currently trying this on AIX 7.1. The shared libraries should end up in rs_aix71/dest/lib. Let's say I try to run afsd: ./afsd --help exec(): 0509-036 Cannot load program ./afsd because of the following errors: 0509-150 Dependent module libafshcrypto.a(libafshcrypto.so.2) could not be loaded. 0509-022 Cannot load module libafshcrypto.a(libafshcrypto.so.2). 0509-026 System error: A file or directory in the path name does not exist. Ok, expected with shared libraries. On AIX I can set my LD_LIBRARY_PATH to /wherever/rs_aix71/dest/lib, and try again: $ ./afsd --help exec(): 0509-036 Cannot load program ./afsd because of the following errors: 0509-150 Dependent module /whereever/rs_aix71/dest/lib/libafshcrypto.a(libafshcrypto.so.2) could not be loaded. 0509-152 Member libafshcrypto.so.2 is not found in archive Let's see what is in that archive: $ ar t /wherever/rs_aix71/dest/lib/libafshcrypto.a aes.o camellia.o camellia-ntt.o des.o engine.o evp.o evp-hcrypto.o evp-cc.o hmac.o md2.o md4.o md5.o pkcs5.o rand-egd.o rand-timer.o rand-unix.o rand.o rc2.o rc4.o rijndael-alg-fst.o rnd_keys.o sha.o sha256.o sha512.o ui.o validate.o rand-fortuna.o Sure enough, that's the static archive. Let's see what exists in the build directory: $ find /wherever -name libafshcrypto.a /wherever/lib/libafshcrypto.a /wherever/rs_aix71/dest/lib/libafshcrypto.a /wherever/src/crypto/hcrypto/.libs/libafshcrypto.a /wherever/src/crypto/hcrypto/libafshcrypto.a Ok, we're interested in the contents of src/crypto/hcrypto/libafshcrypto.a and src/crypto/hcrypto/.libs/libafshcrypto.a: $ ar t /whereever/src/crypto/hcrypto/libafshcrypto.a aes.o camellia.o camellia-ntt.o des.o engine.o evp.o evp-hcrypto.o evp-cc.o hmac.o md2.o md4.o md5.o pkcs5.o rand-egd.o rand-timer.o rand-unix.o rand.o rc2.o rc4.o rijndael-alg-fst.o rnd_keys.o sha.o sha256.o sha512.o ui.o validate.o rand-fortuna.o ... That's the static archive... $ ar t /whereever/src/crypto/hcrypto/.libs/libafshcrypto.a libafshcrypto.so.2 Aha, that's the shared library archive! Now, on AIX, you can have an archive file with both static and shared objects in it. So what we really want here is for the installed libafshcrypto.a to have all the .o files, and also the libafshcrypto.so.2 in it. Let's look at the "dest" make rule in src/crypto/hcrypto/Makefile: dest: $(SHARED_LIBS) libafshcrypto.a ${LT_INSTALL_DATA} libafshcrypto.la ${DEST}/lib/libafshcrypto.la ${RM} ${DEST}/lib/libafshcrypto.la ${INSTALL_DATA} libafshcrypto.a ${DEST}/lib/libafshcrypto.a AHA, that looks like the problem! First we install the shared library, then we overwrite it with the static library! Of course this only breaks on AIX because on AIX the names of the shared and the static libraries are the same. I thought that is what the --with-aix=soname=aix configure option is supposed to take care of, which is the default. Ideally libtool could either build the combined library in src/crypto/hcrypto so that this works as-is, or else the Makefile needs to be heavily reworked with some AIX specifics. This library is just one example out of many, all of them have the same issue on AIX with the "dest" target, as well as the "install" target. Another alternative that I might prefer, would be for the default on AIX to be to disable shared libraries altogether. This would be more similar to the original IBM AFS. Would that be possible, something everyone could agree on, and anyone know how to do that? Obviously this is a big problem, as the AIX build doesn't work unless you select only one or the other shared/static library options manually as a ./configure option. Thanks in advance for any suggestions! -Ben