hi philip,

i think i've managed to track dow the missing "strnlen" def'n -- in/related-to libsrs_alt -- but am unclear as to WHY the problem is manifesting itself i the EXIM build ...

DETAILS ::

in trying to track down the errant, undef'd "_strnlen", nothing in exim-src ...

   % grep -rln strnlen .../exim-4.52
   %

but,

% grep -rln strnlen {/usr/lib,/usr/include,/usr/local/lib,/usr/local/include}
       /usr/lib/libcom_err.dylib
       /usr/lib/libdes425.dylib
       /usr/lib/libgssapi_krb5.dylib
       /usr/lib/libk5crypto.dylib
       /usr/lib/libkrb4.dylib
       /usr/lib/libkrb5.dylib
       /usr/lib/libkrb524.dylib
       /usr/lib/libkrb5support.dylib
       /usr/include/php/main/php_config.h
       /usr/local/lib/libsrs_alt.1.0.0.dylib
       /usr/local/lib/libsrs_alt.1.dylib
       /usr/local/lib/libsrs_alt.a
       /usr/local/lib/libsrs_alt.dylib
   %

which leads me to suspect libsrs ...

as a check, changing in Local/Makefile:

        ---     EXPERIMENTAL_SRS=yes

and,

--- LDFLAGS=-L/usr/local/lib -lsrs_alt -lspf2 -ldomainkeys -L/usr/local/pcre50/lib -lpcre
        +++     LDFLAGS=-L/usr/local/lib -lspf2 -ldomainkeys 
-L/usr/local/pcre50/lib -lpcre

cleaning, then make-ing, results in a SUCCESSFUL BUILD (!):

        ...
        awk '{ print ($1+1) }' cnumber.h > cnumber.temp
        rm -f cnumber.h; mv cnumber.temp cnumber.h
        cc version.c
        rm -f exim
        cc -o exim
        /usr/bin/strip exim
        
        >>> exim binary built


% otool -L build-Darwin-powerpc/exim
build-Darwin-powerpc/exim:
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 365.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.0.0) /usr/lib/libpam.1.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/local/berkeley-db/lib/libdb-4.3.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/local/pgsql/lib/libpq.4.dylib (compatibility version 4.0.0, current version 4.0.0) /usr/local/cyrus-sasl/lib/libsasl2.2.dylib (compatibility version 3.0.0, current version 3.22.0) /usr/local/ssl/lib/libssl.0.9.7.dylib (compatibility version 0.9.0, current version 0.9.7) /usr/local/ssl/lib/libcrypto.0.9.7.dylib (compatibility version 0.9.0, current version 0.9.7) /usr/local/lib/libspf2.2.dylib (compatibility version 3.0.0, current version 3.0.0) /usr/local/pcre50/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0) /usr/lib/libmx.A.dylib (compatibility version 1.0.0, current version 92.0.0)


so, at 1st glace, it looks like libsrs is the (a?) culprit.

given the make failuer WITH srs support --> ON,

        ...
        awk '{ print ($1+1) }' cnumber.h > cnumber.temp
        rm -f cnumber.h; mv cnumber.temp cnumber.h
        cc version.c
        rm -f exim
        cc -o exim
        /usr/bin/ld: Undefined symbols:
        _strnlen
        collect2: ld returned 1 exit status
        make[1]: *** [exim] Error 1
        make: *** [go] Error 2

poking around in ".../exim-4.52/build-Darwin-powerpc/Makefile" finds the point of failure @478:

        ...
        exim:   pcre/libpcre.a lookups/lookups.a auths/auths.a \
                        routers/routers.a transports/transports.a \
                        $(OBJ_EXIM) version.c
                @echo " "
                awk '{ print ($$1+1) }' cnumber.h > cnumber.temp
                rm -f cnumber.h; mv cnumber.temp cnumber.h
                @echo "$(CC) version.c"
                $(FE)$(CC) -c $(CFLAGS) $(INCLUDE) $(IPV6_INCLUDE) 
$(TLS_INCLUDE) version.c
                rm -f exim
                @echo "$(LNCC) -o exim"
---> $(FE)$(PURIFY) $(LNCC) -o exim $(LFLAGS) $(OBJ_EXIM) version.o \
--->   pcre/libpcre.a \
--->   routers/routers.a transports/transports.a lookups/lookups.a \
--->   auths/auths.a \
--->   $(LIBRESOLV) $(LIBS) $(LIBS_EXIM) $(IPV6_LIBS) $(EXTRALIBS) \
--->   $(EXTRALIBS_EXIM) $(DBMLIB) $(LOOKUP_LIBS) $(AUTH_LIBS) \
--->   $(PERL_LIBS) $(TLS_LIBS) $(LDFLAGS)
                @if [ x"$(STRIP_COMMAND)" != x"" ]; then \
                  echo $(STRIP_COMMAND) exim; \
                  $(STRIP_COMMAND) exim; \
                fi
                $(EXIM_CHMOD)
                @echo " "
                @echo ">>> exim binary built"
                @echo " "
        ...


now, 'echo'-ing the indicated (--->) stanza, we get:

@ cc -o exim acl.o child.o crypt16.o daemon.o dbfn.o debug.o deliver.o directory.o dns.o drtables.o enq.o exim.o expand.o filter.o filtertest.o globals.o header.o host.o ip.o log.o lss.o match.o moan.o os.o parse.o queue.o rda.o readconf.o receive.o retry.o rewrite.o rfc2047.o route.o search.o sieve.o smtp_in.o smtp_out.o spool_in.o spool_out.o store.o string.o tls.o tod.o transport.o tree.o verify.o local_scan.o malware.o mime.o regex.o spam.o spool_mbox.o demime.o bmi_spam.o spf.o srs.o dk.o version.o pcre/libpcre.a routers/routers.a transports/transports.a lookups/lookups.a auths/auths.a -lresolv -ldl -lpam -lwrap /usr/local/berkeley-db/lib/libdb.dylib -L/usr/local/pgsql/lib -lpq -L/usr/local/cyrus-sasl/lib -lsasl2 -L/usr/local/ssl/lib -lssl -lcrypto -L/usr/local/lib -lsrs_alt -lspf2 -ldomainkeys -L/usr/local/pcre50/lib -lpcre


which shows libsrs_alt, with its "strnlen" defn(s):

% nm -o /usr/local/lib/libsrs_alt.dylib > temp.txt
% grep strnlen temp.txt
        /usr/local/lib/libsrs_alt.dylib:address.o:          U _strnlen
        /usr/local/lib/libsrs_alt.dylib:srs_alt.o:          U _strnlen

seemingly IS properly targeted for link-ing ...

soooo, why is the _strnlen undef'd in the exim build/compile?

richard


--
## List details at http://www.exim.org/mailman/listinfo/exim-dev Exim details 
at http://www.exim.org/ ##

Reply via email to