Re: [exim-dev] Second candidate for 4.52 release -- make fai…

Top Page
Delete this message
Reply to this message
Author: OpenMacNews
Date:  
To: Philip Hazel
CC: exim-dev
Subject: Re: [exim-dev] Second candidate for 4.52 release -- make failure on OSX 10.4.1

hi philip,

>> so, i'm confused ... with BIND_8_COMPAT *defined*, why are we NOT seeing the
>> HEADER struct def?
>
> Good question. I'm afraid I can't offer any answer.


<grumble> hmmm .... </grumble>

>> EDITing dns.c
>>          # include "exim.h"
>>   +++    #include "/usr//include/arpa/nameser_compat.h"

>
> Good idea.


well, not elegant ... but it seems to work 4 the moment.

>> NOW, 'make' *continues* thru the 'missing' HEADER def, ad eventually fails
>> w/:
>>
>>    ...
>>    cc dns.c
>>    In file included from dns.c:13:
>>    /usr/include/arpa/nameser_compat.h:141:1: warning: "T_A" redefined

>
> Hmm. That means that /usr/include/arpa/nameser_compat.h defines it,
> though previously we had a problem with that. Very odd. So why it's
> defining the T_xxx stuff and not HEADER is a mystery. Are there any
> conditional things around the HEADER definition?


well there IS the:

    #ifndef _ARPA_NAMESER_COMPAT_


conditional around the whole kit-n-kaboodle ... but that should be valid for
BOTH the T_XX defs and the HEADER ... for completeness, I've included the file
source at the end of this message.

>>    cc -o exim
>>    /usr/bin/ld: Undefined symbols:
>>    _GETSHORT
>>    _res_9_dn_expand
>>    _res_9_init
>>    _res_9_search
>>    _strnlen

>
> Those are functions in the resolver library. Somehow it's missing those.
> I guess you have to find where they live, and add the appropriate
> -lsomething to EXTRALIBS. In some systems it's -lresolv I think.


adding '-lresolv' to EITHER 'EXTRALIBS' or 'EXTRALIBS_EXIM' (what's the
difference in this case?) reduces the error above to:

    rm -f exim
    cc -o exim
    /usr/bin/ld: Undefined symbols:
    _GETSHORT
    _strnlen
    collect2: ld returned 1 exit status
    make[1]: *** [exim] Error 1
    make: *** [go] Error 2



frustratingly, GETSHORT is defined (again!) in

    % grep GETSHORT `grep -rln GETSHORT /usr/include/arpa`
        ./nameser8_compat.h:#define GETSHORT(s, cp) { \
        ./nameser_compat.h:#define      GETSHORT                NS_GET16


and referenced in exim's:

    % grep -rln GETSHORT exim-snapshot/
        ./src/acl.c
        ./src/dns.c
        ./src/host.c
        ./src/lookups/dnsdb.c



'strnlen' i can find no relevant trace of at 1st glance in exim ...

    % grep -rln strnlen exim-snapshot/
    %


    % grep -rln strnlen /usr/include
        /usr/include/php/main/php_config.h
   (nah ...)


i suppose the GETSHORT reference _might_ be addressed by manually including the
nameser_compat.h again -- but in which file this time?

one last thing to try ...

    =========================================
    (EDITOR) OS/Makefile-Darwin
    --- CFLAGS=-O -no-cpp-precomp -DBIND_8_COMPAT
    +++ CFLAGS=-O -no-cpp-precomp -DBIND_8_COMPAT -DARPA_NAMESER_COMPAT
    =========================================


and (re)make ... same error! argh.

cheers,

richard


======================= cat /usr/include/arpa/nameser_compat.h =================
/* Copyright (c) 1983, 1989
 *    The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by the University of
 *      California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */


/*
 *      from nameser.h  8.1 (Berkeley) 6/2/93
 *      From: Id: nameser_compat.h,v 8.9 1998/03/20 23:25:10 halley Exp
 * $FreeBSD: src/include/arpa/nameser_compat.h,v 1.1.2.1 1999/08/29 14:39:01 
peter Exp $
 */


#ifndef _ARPA_NAMESER_COMPAT_
#define _ARPA_NAMESER_COMPAT_

#define __BIND          19950621        /* (DEAD) interface version stamp. */


#include <machine/endian.h>

#if !defined(BYTE_ORDER) || \
    (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
    BYTE_ORDER != PDP_ENDIAN)
        /* you must determine what the correct bit order is for
         * your compiler - the next line is an intentional error
         * which will force your compiles to bomb until you fix
         * the above macros.
         */
  error "Undefined or invalid BYTE_ORDER";
#endif


/*
* Structure for query header. The order of the fields is machine- and
* compiler-dependent, depending on the byte/bit order and the layout
* of bit fields. We use bit fields only in int variables, as this
* is all ANSI requires. This requires a somewhat confusing rearrangement.
*/

typedef struct {
        unsigned        id :16;         /* query identification number */
#if BYTE_ORDER == BIG_ENDIAN
                        /* fields in third byte */
        unsigned        qr: 1;          /* response flag */
        unsigned        opcode: 4;      /* purpose of message */
        unsigned        aa: 1;          /* authoritive answer */
        unsigned        tc: 1;          /* truncated message */
        unsigned        rd: 1;          /* recursion desired */
                        /* fields in fourth byte */
        unsigned        ra: 1;          /* recursion available */
        unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */
        unsigned        ad: 1;          /* authentic data from named */
        unsigned        cd: 1;          /* checking disabled by resolver */
        unsigned        rcode :4;       /* response code */
#endif
#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
                        /* fields in third byte */
        unsigned        rd :1;          /* recursion desired */
        unsigned        tc :1;          /* truncated message */
        unsigned        aa :1;          /* authoritive answer */
        unsigned        opcode :4;      /* purpose of message */
        unsigned        qr :1;          /* response flag */
                        /* fields in fourth byte */
        unsigned        rcode :4;       /* response code */
        unsigned        cd: 1;          /* checking disabled by resolver */
        unsigned        ad: 1;          /* authentic data from named */
        unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */
        unsigned        ra :1;          /* recursion available */
#endif
                        /* remaining bytes */
        unsigned        qdcount :16;    /* number of question entries */
        unsigned        ancount :16;    /* number of answer entries */
        unsigned        nscount :16;    /* number of authority entries */
        unsigned        arcount :16;    /* number of resource entries */
} HEADER;


#define PACKETSZ        NS_PACKETSZ
#define MAXDNAME        NS_MAXDNAME
#define MAXCDNAME       NS_MAXCDNAME
#define MAXLABEL        NS_MAXLABEL
#define HFIXEDSZ        NS_HFIXEDSZ
#define QFIXEDSZ        NS_QFIXEDSZ
#define RRFIXEDSZ       NS_RRFIXEDSZ
#define INT32SZ         NS_INT32SZ
#define INT16SZ         NS_INT16SZ
#define INADDRSZ        NS_INADDRSZ
#define IN6ADDRSZ       NS_IN6ADDRSZ
#define INDIR_MASK      NS_CMPRSFLGS
#define NAMESERVER_PORT NS_DEFAULTPORT


#define S_ZONE          ns_s_zn
#define S_PREREQ        ns_s_pr
#define S_UPDATE        ns_s_ud
#define S_ADDT          ns_s_ar


#define QUERY           ns_o_query
#define IQUERY          ns_o_iquery
#define STATUS          ns_o_status
#define NS_NOTIFY_OP    ns_o_notify
#define NS_UPDATE_OP    ns_o_update


#define NOERROR         ns_r_noerror
#define FORMERR         ns_r_formerr
#define SERVFAIL        ns_r_servfail
#define NXDOMAIN        ns_r_nxdomain
#define NOTIMP          ns_r_notimpl
#define REFUSED         ns_r_refused
#define YXDOMAIN        ns_r_yxdomain
#define YXRRSET         ns_r_yxrrset
#define NXRRSET         ns_r_nxrrset
#define NOTAUTH         ns_r_notauth
#define NOTZONE         ns_r_notzone


#define DELETE          ns_uop_delete
#define ADD             ns_uop_add


#define T_A             ns_t_a
#define T_NS            ns_t_ns
#define T_MD            ns_t_md
#define T_MF            ns_t_mf
#define T_CNAME         ns_t_cname
#define T_SOA           ns_t_soa
#define T_MB            ns_t_mb
#define T_MG            ns_t_mg
#define T_MR            ns_t_mr
#define T_NULL          ns_t_null
#define T_WKS           ns_t_wks
#define T_PTR           ns_t_ptr
#define T_HINFO         ns_t_hinfo
#define T_MINFO         ns_t_minfo
#define T_MX            ns_t_mx
#define T_TXT           ns_t_txt
#define T_RP            ns_t_rp
#define T_AFSDB         ns_t_afsdb
#define T_X25           ns_t_x25
#define T_ISDN          ns_t_isdn
#define T_RT            ns_t_rt
#define T_NSAP          ns_t_nsap
#define T_NSAP_PTR      ns_t_nsap_ptr
#define T_SIG           ns_t_sig
#define T_KEY           ns_t_key
#define T_PX            ns_t_px
#define T_GPOS          ns_t_gpos
#define T_AAAA          ns_t_aaaa
#define T_LOC           ns_t_loc
#define T_NXT           ns_t_nxt
#define T_EID           ns_t_eid
#define T_NIMLOC        ns_t_nimloc
#define T_SRV           ns_t_srv
#define T_ATMA          ns_t_atma
#define T_NAPTR         ns_t_naptr
#define T_IXFR          ns_t_ixfr
#define T_AXFR          ns_t_axfr
#define T_MAILB         ns_t_mailb
#define T_MAILA         ns_t_maila
#define T_ANY           ns_t_any


#define C_IN            ns_c_in
#define C_CHAOS         ns_c_chaos
#define C_HS            ns_c_hs
/* BIND_UPDATE */
#define C_NONE          ns_c_none
#define C_ANY           ns_c_any


#define GETSHORT                NS_GET16
#define GETLONG                 NS_GET32
#define PUTSHORT                NS_PUT16
#define PUTLONG                 NS_PUT32


#endif /* _ARPA_NAMESER_COMPAT_ */
================================================================