forked from AdaCore/PolyORB
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ssl.m4
163 lines (133 loc) · 4.7 KB
/
ssl.m4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
AC_DEFUN([AM_WITH_OPENSSL],
[AC_ARG_WITH(openssl,
AC_HELP_STRING([--with-openssl@<:@=ARG@:>@],
[enable SSL support, will check ARG/ssl <default-system-dirs>
/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr]),
[
HAVE_SSL=no
save_LIBS="$LIBS"
save_CPPFLAGS="$CPPFLAGS"
save_LDFLAGS="$LDFLAGS"
dnl Libcrypto depends on the dynamic linking API: make sure we have
dnl -ldl in LIBS when required. Most systems provide dlopen (),
dnl but HP-UX uses shl_load().
LIBS=""
AC_SEARCH_LIBS(dlopen, dl, [], [AC_SEARCH_LIBS(shl_load, dl)])
SSL_LIBDL="$LIBS"
LIBS="$save_LIBS"
dnl Libcrypto also depends on -lsocket -lnsl on Solaris: get them into
dnl $LIBS if required (but that's just for the purpose of the test,
dnl in real applications this will come from g-soliop.ads).
AC_SEARCH_LIBS([gethostbyname], [nsl])
AC_SEARCH_LIBS([socket], [socket])
dnl Libcrypto depends on -lgdi and -lws2_32 on Windows.
case "$host_os" in
cygwin* | mingw*)
SSL_WINLIBS="-lgdi32 -lws2_32"
LIBS="$LIBS $SSL_WINLIBS"
;;
*)
SSL_WINLIBS=""
;;
esac
dnl If ARG is not specified, $withval is "yes", and we do not have any
dnl additional user defined path to search. Special case if the user
dnl specified --without-openssl: in this case $withval is "no" and we'll
dnl exit early from the loop below.
if test "$withval" != "yes"; then
ssl_user_dir="$withval"
fi
# dir="-" corresponds to the default system locations
for dir in $ssl_user_dir - /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr; do
# Handle case of --without-openssl
if test "$dir" = "no"; then
break
fi
# Set candidate options for this location
if test "$dir" != "-"; then
SSL_INC="$dir/include"
CPPFLAGS="$save_CPPFLAGS -I$SSL_INC"
SSL_INC="${SSL_INC}/"
LDFLAGS="$save_LDFLAGS -L$dir/lib"
SSL_LDFLAGS="$LDFLAGS "
else
SSL_INC=""
LDFLAGS="$save_LDFLAGS"
SSL_LDFLAGS=""
fi
SSL_LDFLAGS="${SSL_LDFLAGS}-lssl -lcrypto ${SSL_LIBDL} ${SSL_WINLIBS}"
# Note that order is important here (-lssl must come before
# -lcrypto), since some undefined symbols in libssl are provided
# by libcrypto.
# Check whether we see appropriate headers and libraries
ssl_fail="no"
AC_CHECK_HEADERS([${SSL_INC}openssl/opensslv.h ${SSL_INC}openssl/ssl.h],
[], [ssl_fail="yes"])
if test "$ssl_fail" = "no"; then
# If headers found, check for valid libcrypto and libssl.
# unset ac_cv_XXX to prevent reuse of cached results from a previous
# iteration.
unset ac_cv_lib_crypto_SSLeay_version
AC_CHECK_LIB(crypto, SSLeay_version, [], [ssl_fail="yes"],
[$SSL_LIBDL])
unset ac_cv_lib_ssl_SSL_CTX_new
AC_CHECK_LIB(ssl, SSL_CTX_new, [], [ssl_fail="yes"],
[$SSL_LIBDL])
fi
# Check for openssl(1)
AC_PATH_PROG([OPENSSL], [openssl], [false], [$dir/bin:$PATH])
if test "$OPENSSL" = "false"; then
ssl_fail="yes"
fi
if test "$ssl_fail" = "no"; then
if test "$dir" = "-"; then
ssldir="default system directory"
else
ssldir="$dir"
fi
AC_MSG_NOTICE([OpenSSL found in $ssldir])
CPPFLAGS="$CPPFLAGS -DHAVE_SSL"
# Special case for RedHat Linux 9
if test -f /usr/kerberos/include/krb5.h; then
CPPFLAGS="-I/usr/kerberos/include/ ${CPPFLAGS}"
fi
HAVE_SSL=yes
break;
else
CPPFLAGS="$save_CPPFLAGS"
unset SSL_LDFLAGS
fi
done
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
AC_MSG_CHECKING(if OpenSSL is available)
AC_MSG_RESULT($HAVE_SSL)
if test x$HAVE_SSL != xyes; then
NO_SSL="-- "
fi
],
[
NO_SSL="-- "
])
# Convert the space-separated SSL_LDFLAGS into a sequence of string literals
# concatenated with ASCII.NUL separators, which is what prama Linker_Options
# expects.
set_linker_options() {
while test @S|@# -gt 0; do
SSL_LINKER_OPTIONS="${SSL_LINKER_OPTIONS}\"@S|@1\""
if test @S|@# -gt 1; then
SSL_LINKER_OPTIONS="${SSL_LINKER_OPTIONS} & ASCII.NUL & "
fi
shift
done
if test -z "${SSL_LINKER_OPTIONS}"; then
NO_SSL_LINKER_OPTIONS="-- "
fi
}
set_linker_options $SSL_LDFLAGS
AC_SUBST(SSL_LINKER_OPTIONS)
AC_SUBST(NO_SSL_LINKER_OPTIONS)
AC_SUBST(HAVE_SSL)
AC_SUBST(NO_SSL)
AC_SUBST(OPENSSL)
])dnl