Annotation of embedaddon/ntp/m4/ntp_openssl.m4, revision 1.1.1.1

1.1       misho       1: dnl ######################################################################
                      2: dnl OpenSSL support shared by top-level and sntp/configure.ac
                      3: AC_DEFUN([NTP_OPENSSL], [
                      4:        
                      5: AC_SUBST([OPENSSL])
                      6: AC_SUBST([OPENSSL_INC])
                      7: AC_SUBST([OPENSSL_LIB])
                      8: 
                      9: AC_MSG_CHECKING([for openssl library directory])
                     10: AC_ARG_WITH(
                     11:     [openssl-libdir],
                     12:     [AS_HELP_STRING(
                     13:        [--with-openssl-libdir], 
                     14:        [+ =/something/reasonable]
                     15:     )],
                     16:     [ans=$withval],
                     17:     [
                     18:        case "$build" in
                     19:         $host) ans=yes ;;
                     20:         *)     ans=no ;;
                     21:        esac
                     22:     ]
                     23: )
                     24: case "$ans" in
                     25:  no) 
                     26:     ;;
                     27:  yes) # Look in:
                     28:     ans="/usr/lib /usr/lib/openssl /usr/sfw/lib /usr/local/lib /usr/local/ssl/lib /lib"
                     29:     ;;
                     30:  *) # Look where they said
                     31:     ;;
                     32: esac
                     33: case "$ans" in
                     34:  no)
                     35:     ;;
                     36:  *) # Look for libcrypto.a and libssl.a:
                     37:     for i in $ans no
                     38:     do
                     39:        case "$host" in
                     40:         *-*-darwin*)
                     41:            test -f $i/libcrypto.dylib -a -f $i/libssl.dylib && break
                     42:            ;;
                     43:         *)
                     44:            test -f $i/libcrypto.so -a -f $i/libssl.so && break
                     45:            test -f $i/libcrypto.a -a -f $i/libssl.a && break
                     46:            ;;
                     47:        esac
                     48:     done
                     49:     case "$i" in
                     50:      no)
                     51:        ans=no
                     52:        OPENSSL_LIB=
                     53:        ;;
                     54:      *) ans=$i
                     55:        OPENSSL_LIB=$ans
                     56:        ;;
                     57:     esac
                     58:     ;;
                     59: esac
                     60: AC_MSG_RESULT([$ans])
                     61: 
                     62: AC_MSG_CHECKING([for openssl include directory])
                     63: AC_ARG_WITH(
                     64:     [openssl-incdir],
                     65:     [AS_HELP_STRING(
                     66:        [--with-openssl-incdir],
                     67:        [+ =/something/reasonable]
                     68:     )],
                     69:     [ans=$withval],
                     70:     [
                     71:        case "$build" in
                     72:         $host) ans=yes ;;
                     73:         *)     ans=no ;;
                     74:        esac
                     75:     ]
                     76: )
                     77: case "$ans" in
                     78:  no)
                     79:     ;;
                     80:  yes) # look in:
                     81:     ans="/usr/include /usr/sfw/include /usr/local/include /usr/local/ssl/include"
                     82:     ;;
                     83:  *) # Look where they said
                     84:     ;;
                     85: esac
                     86: case "$ans" in
                     87:  no)
                     88:     ;;
                     89:  *) # look for openssl/opensslconf.h:
                     90:     for i in $ans no
                     91:     do
                     92:        test -f $i/openssl/opensslconf.h && break
                     93:     done
                     94:     case "$i" in
                     95:      no)
                     96:        ans=no
                     97:        OPENSSL_INC=
                     98:        ;;
                     99:      *) ans=$i
                    100:        OPENSSL_INC=$ans
                    101:        ;;
                    102:     esac
                    103:     ;;
                    104: esac
                    105: AC_MSG_RESULT([$ans])
                    106: 
                    107: AC_MSG_CHECKING([if we will use crypto])
                    108: AC_ARG_WITH(
                    109:     [crypto],
                    110:     [AS_HELP_STRING(
                    111:        [--with-crypto],
                    112:        [+ =openssl]
                    113:     )],
                    114:     [ans=$withval],
                    115:     [ans=yes]
                    116: )
                    117: case "$ans" in
                    118:  no)
                    119:     ;;
                    120:  yes|openssl)
                    121:     if test -z "$OPENSSL_LIB" -o -z "$OPENSSL_INC"
                    122:     then
                    123:        ans=no
                    124:     else
                    125:        ans=yes
                    126:     fi
                    127: esac
                    128: ntp_openssl=$ans
                    129: AC_MSG_RESULT([$ans])
                    130: 
                    131: case "$ntp_openssl" in
                    132:  yes)
                    133:     # We have OpenSSL inc/lib - use them.
                    134:     case "$OPENSSL_INC" in
                    135:      /usr/include)
                    136:        ;;
                    137:      *)        
                    138:        CPPFLAGS="$CPPFLAGS -I$OPENSSL_INC"
                    139:        ;;
                    140:     esac
                    141:     case "$OPENSSL_LIB" in
                    142:      /usr/lib)
                    143:        ;;
                    144:      *)        
                    145:        LDFLAGS="$LDFLAGS -L$OPENSSL_LIB"
                    146:        case "$need_dash_r" in
                    147:         1)
                    148:            LDFLAGS="$LDFLAGS -R$OPENSSL_LIB"
                    149:        esac
                    150:        ;;
                    151:     esac
                    152:     AC_SUBST([LCRYPTO], [-lcrypto])
                    153:     AC_DEFINE([OPENSSL], [1], [Use OpenSSL?])
                    154: esac
                    155: 
                    156: #
                    157: # check for linking with -lcrypto failure, and try -lz -lcrypto.
                    158: # Helps m68k-atari-mint
                    159: #
                    160: case "$ntp_openssl" in
                    161:  yes)
                    162:     NTPO_SAVED_LIBS="$LIBS"
                    163:     LIBS="$NTPO_SAVED_LIBS $LCRYPTO"
                    164:     AC_CACHE_CHECK(
                    165:        [if linking with $LCRYPTO alone works],
                    166:        [ntp_cv_bare_lcrypto],
                    167:        [AC_LINK_IFELSE(
                    168:            [AC_LANG_PROGRAM(
                    169:                [[
                    170:                    #include "openssl/err.h"
                    171:                    #include "openssl/evp.h"
                    172:                ]],
                    173:                [[
                    174:                    ERR_load_crypto_strings();
                    175:                    OpenSSL_add_all_algorithms();
                    176:                ]]
                    177:            )],
                    178:            [ntp_cv_bare_lcrypto=yes],
                    179:            [ntp_cv_bare_lcrypto=no]
                    180:        )]
                    181:     )
                    182:     case "$ntp_cv_bare_lcrypto" in
                    183:      no)
                    184:        LIBS="$NTPO_SAVED_LIBS $LCRYPTO -lz"
                    185:        AC_CACHE_CHECK(
                    186:            [if linking with $LCRYPTO -lz works],
                    187:            [ntp_cv_lcrypto_lz],
                    188:            [AC_LINK_IFELSE(
                    189:                [AC_LANG_PROGRAM(
                    190:                    [[
                    191:                        #include "openssl/err.h"
                    192:                        #include "openssl/evp.h"
                    193:                    ]],
                    194:                    [[
                    195:                        ERR_load_crypto_strings();
                    196:                        OpenSSL_add_all_algorithms();
                    197:                    ]]
                    198:                )],
                    199:                [ntp_cv_lcrypto_lz=yes],
                    200:                [ntp_cv_lcrypto_lz=no]
                    201:            )]
                    202:        )
                    203:        case "$ntp_cv_lcrypto_lz" in
                    204:         yes)
                    205:             LCRYPTO="$LCRYPTO -lz"
                    206:        esac
                    207:     esac
                    208:     LIBS="$NTPO_SAVED_LIBS"
                    209:     AS_UNSET([NTPO_SAVED_LIBS])
                    210: esac
                    211: 
                    212: #
                    213: # Older OpenSSL headers have a number of callback prototypes inside
                    214: # other function prototypes which trigger copious warnings with gcc's
                    215: # -Wstrict-prototypes, which is included in -Wall.
                    216: #
                    217: # An example:
                    218: #
                    219: # int i2d_RSA_NET(const RSA *a, unsigned char **pp, 
                    220: #                int (*cb)(), int sgckey);
                    221: #                ^^^^^^^^^^^
                    222: #
                    223: # 
                    224: #
                    225: openssl_triggers_warnings=unknown
                    226: SAVED_CFLAGS="$CFLAGS"
                    227: 
                    228: case "$GCC$ntp_openssl" in
                    229:  yesyes)
                    230:     CFLAGS="$CFLAGS -Werror"
                    231:     AC_COMPILE_IFELSE(
                    232:        [AC_LANG_PROGRAM(
                    233:            [[
                    234:            ]],
                    235:            [[
                    236:                /* see if -Werror breaks gcc */
                    237:            ]]
                    238:        )],
                    239:        [gcc_handles_Werror=yes],
                    240:        [gcc_handles_Werror=no]
                    241:     )
                    242:     case "$gcc_handles_Werror" in
                    243:      no)
                    244:        # if this gcc doesn't do -Werror go ahead and use
                    245:        # -Wstrict-prototypes.
                    246:        openssl_triggers_warnings=yes
                    247:        ;;
                    248:      yes)
                    249:        CFLAGS="$CFLAGS -Wstrict-prototypes"
                    250:        AC_COMPILE_IFELSE(
                    251:            [AC_LANG_PROGRAM(
                    252:                [[
                    253:                    #include "openssl/asn1_mac.h"
                    254:                    #include "openssl/bn.h"
                    255:                    #include "openssl/err.h"
                    256:                    #include "openssl/evp.h"
                    257:                    #include "openssl/pem.h"
                    258:                    #include "openssl/rand.h"
                    259:                    #include "openssl/x509v3.h"
                    260:                ]],
                    261:                [[
                    262:                    /* empty body */
                    263:                ]]
                    264:            )],
                    265:            [openssl_triggers_warnings=no],
                    266:            [openssl_triggers_warnings=yes]
                    267:        )
                    268:     esac
                    269:     case "$openssl_triggers_warnings" in
                    270:      yes)
                    271:        CFLAGS="$SAVED_CFLAGS -Wno-strict-prototypes"
                    272:        ;;
                    273:      *)
                    274:        CFLAGS="$SAVED_CFLAGS -Wstrict-prototypes"
                    275:     esac
                    276:     ;;
                    277:  yesno)
                    278:     # gcc without OpenSSL
                    279:     CFLAGS="$SAVED_CFLAGS -Wstrict-prototypes"
                    280: esac
                    281: 
                    282: ])
                    283: dnl ======================================================================

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>