1dnl ###################################################################### 2dnl OpenSSL support shared by top-level and sntp/configure.ac 3AC_DEFUN([NTP_OPENSSL], [ 4 5AC_SUBST([OPENSSL]) 6AC_SUBST([OPENSSL_INC]) 7AC_SUBST([OPENSSL_LIB]) 8 9AC_MSG_CHECKING([for openssl library directory]) 10AC_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) 24case "$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 ;; 32esac 33case "$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 ;; 59esac 60AC_MSG_RESULT([$ans]) 61 62AC_MSG_CHECKING([for openssl include directory]) 63AC_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) 77case "$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 ;; 85esac 86case "$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 ;; 104esac 105AC_MSG_RESULT([$ans]) 106 107AC_MSG_CHECKING([if we will use crypto]) 108AC_ARG_WITH( 109 [crypto], 110 [AS_HELP_STRING( 111 [--with-crypto], 112 [+ =openssl] 113 )], 114 [ans=$withval], 115 [ans=yes] 116) 117case "$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 127esac 128ntp_openssl=$ans 129AC_MSG_RESULT([$ans]) 130 131case "$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?]) 154esac 155 156# 157# check for linking with -lcrypto failure, and try -lz -lcrypto. 158# Helps m68k-atari-mint 159# 160case "$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]) 210esac 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# 225openssl_triggers_warnings=unknown 226SAVED_CFLAGS="$CFLAGS" 227 228case "$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" 280esac 281 282]) 283dnl ====================================================================== 284