On 18 April 2017 at 14:43, Tim Rühsen wrote: > On 04/18/2017 12:57 PM, Tim Rühsen wrote: >> On 04/18/2017 04:27 AM, Mojca Miklavec wrote: >>> I copiled a folder with bootstrapped wget to the Solaris box, but as >>> expected I ended up with: >>> >>>> ldd src/wget >>> libsocket.so.1 => /lib/libsocket.so.1 >>> libnsl.so.1 => /lib/libnsl.so.1 >>> librt.so.1 => /lib/librt.so.1 >>> libiconv.so.2 => /opt/csw/lib/libiconv.so.2 >>> libunistring.so.2 => /opt/csw/lib/libunistring.so.2 >>> ... >>> >>> And having libraries from /opt/csw there is simply not acceptable >>> since the binaries won't work on machines without OpenCSW installed. >>> >>> So my next question would be: how can I get rid of dependency on libiconv? >>> >>> I didn't have this problem in version 1.17.1. >>> >>> Repeating the configure string: >>> >>> --enable-ipv6 --disable-iri --disable-nls --disable-ntlm \ >>> --disable-pcre --without-libiconv-prefix --without-libintl-prefix \ >>> --without-libuuid --without-libpsl --without-ssl --without-zlib >> >> The OpenCSW Solaris box "unstable10x" and likely all others are >> configured to use a GNU environment for building. That includes a >> separate 'libiconv.so' as well as system headers being loaded from the >> GNU environment. >> >> ./configure correctly finds and uses the 'iconv.h' and 'libiconv.so' >> within the GNU environment. That's not what you want - you basically >> want a build on a plain Solaris box so that the 'wget' executable does >> not reference any GNU libraries. >> >> Solaris has iconv functionality built into the libc - so there is no >> reason for you not to use it. The question is, how you can do do that. >> >> You have to do some manual changes (you could set up a shell script >> doing that with 'sed'): >> >> 1. Change include of iconv.h in src/url.h: >> >> diff --git a/src/url.c b/src/url.c >> index 4aaef63..35b8a49 100644 >> --- a/src/url.c >> +++ b/src/url.c >> @@ -44,7 +44,7 @@ as that of the covered work. */ >> #include "c-strcase.h" >> >> #ifdef HAVE_ICONV >> -# include <iconv.h> >> +# include "/usr/include/iconv.h" >> #endif >> #include <langinfo.h> >> >> 2. edit src/Makefile.am to remove -liconv and -lunistring (each has two >> occurrences) >> >> >> Now cd into src and 'make clean && make' and your 'wget' executable is >> clean: >> >> ldd wget: >> libsocket.so.1 => /lib/libsocket.so.1 >> libnsl.so.1 => /lib/libnsl.so.1 >> librt.so.1 => /lib/librt.so.1 >> libc.so.1 => /lib/libc.so.1 >> libmp.so.2 => /lib/libmp.so.2 >> libmd.so.1 => /lib/libmd.so.1 >> libscf.so.1 => /lib/libscf.so.1 >> libaio.so.1 => /lib/libaio.so.1 >> libdoor.so.1 => /lib/libdoor.so.1 >> libuutil.so.1 => /lib/libuutil.so.1 >> libgen.so.1 => /lib/libgen.so.1 >> libm.so.2 => /lib/libm.so.2 >> >> >> Maybe there is an easier way on OpenCSW. If you find out, let us know.
This sounds a bit complex to do (not that it couldn't be done, but ...) >> The problem with using the Solaris compiler and/or iconv() is that there >> is a known bug in the implementation that ./configure checks for. >> If it finds this bug, HAVE_ICONV will not be defined and compilation of >> src/url.c then fails. > > Just pushed some commits. That should enable you to > $ CC=cc ./configure ... (all your options) > > to get a clean wget executable (with just Solaris system libraries). Thank you. This indeed works, but if I try the gcc compiler again, then I get CCLD wget Undefined first referenced symbol in file bind connect.o recv connect.o getservbyname ../lib/libgnu.a(getaddrinfo.o) getsockname connect.o accept connect.o listen connect.o gethostbyname ../lib/libgnu.a(getaddrinfo.o) socket connect.o setsockopt connect.o connect connect.o getpeername connect.o inet_ntop host.o gai_strerror host.o ld: fatal: symbol referencing errors. No output written to wget and I suspect users on other OSes might experience similar problems. Mojca
