summaryrefslogtreecommitdiff
path: root/m4/libevent_openssl.m4
blob: 7d8a8d4265c5cb41f20a52d479218cc48fae7e7c (plain)
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
dnl ######################################################################
dnl OpenSSL support
AC_DEFUN([LIBEVENT_OPENSSL], [

m4_ifndef([PKG_PROG_PKG_CONFIG], [AC_MSG_ERROR([PKG_PROG_PKG_CONFIG not found. Please install pkg-config and re-run autogen.sh])])

PKG_PROG_PKG_CONFIG([0.15.0])
AC_PROG_GREP

case "$host_os" in
    darwin*)
    dnl when compiling for Darwin, attempt to find OpenSSL using brew.
    dnl We append the location given by brew to PKG_CONFIG_PATH path
    dnl and then export it, so that it can be used in detection below.
    AC_CHECK_PROG([BREW],brew, brew)
    if test x$BREW = xbrew; then
        openssl_prefix=$($BREW --prefix openssl 2>/dev/null)
        dnl CI workers has only openssl@1.1,
        dnl while default is openssl@3, see
        dnl https://github.com/Homebrew/brew/issues/12879
        if ! test -d $openssl_prefix; then
            openssl_prefix=$($BREW --prefix $($BREW list | $GREP -m1 openssl) 2>/dev/null)
        fi
        if test x$openssl_prefix != x; then
            OPENSSL_LIBS=`$PKG_CONFIG --libs openssl 2>/dev/null`
            case "$OPENSSL_LIBS" in
             dnl only if openssl is not in PKG_CONFIG_PATH already
             '')
                if test x$PKG_CONFIG_PATH != x; then
                    PKG_CONFIG_PATH="$PKG_CONFIG_PATH:"
                fi
                OPENSSL_PKG_CONFIG="$openssl_prefix/lib/pkgconfig"
                PKG_CONFIG_PATH="$PKG_CONFIG_PATH$OPENSSL_PKG_CONFIG"
                export PKG_CONFIG_PATH
                AC_MSG_NOTICE([PKG_CONFIG_PATH has been set to $PKG_CONFIG_PATH (added openssl from brew)])
                ;;
            esac
        fi
    fi
    ;;
esac

case "$enable_openssl" in
 yes)
    have_openssl=no
    case "$PKG_CONFIG" in
     '')
	;;
     *)
	OPENSSL_LIBS=`$PKG_CONFIG --libs openssl 2>/dev/null`
	case "$OPENSSL_LIBS" in
	 '') ;;
	 *) OPENSSL_LIBS="$OPENSSL_LIBS $EV_LIB_GDI $EV_LIB_WS32 $OPENSSL_LIBADD"
	    have_openssl=yes
	    ;;
	esac
	OPENSSL_INCS=`$PKG_CONFIG --cflags openssl 2>/dev/null`
	;;
    esac
    case "$have_openssl" in
     yes) ;;
     *)
	save_LIBS="$LIBS"
	LIBS=""
	OPENSSL_LIBS=""
	for lib in crypto eay32; do
		dnl clear cache
		unset ac_cv_search_SSL_new
		AC_SEARCH_LIBS([SSL_new], [ssl ssl32],
		    [have_openssl=yes
		    OPENSSL_LIBS="$LIBS -l$lib $EV_LIB_GDI $EV_LIB_WS32 $OPENSSL_LIBADD"],
		    [have_openssl=no],
		    [-l$lib $EV_LIB_GDI $EV_LIB_WS32 $OPENSSL_LIBADD])
		LIBS="$save_LIBS"
		test "$have_openssl" = "yes" && break
	done
	;;
    esac
    AC_MSG_NOTICE([OPENSSL_LIBS is $OPENSSL_LIBS])
    AC_MSG_NOTICE([OPENSSL_INCS is $OPENSSL_INCS])
    CPPFLAGS_SAVE=$CPPFLAGS
    CPPFLAGS="$CPPFLAGS $OPENSSL_INCS"
    AC_CHECK_HEADERS([openssl/ssl.h], [], [have_openssl=no])
    CPPFLAGS=$CPPFLAGS_SAVE
    AC_SUBST(OPENSSL_INCS)
    AC_SUBST(OPENSSL_LIBS)
    case "$have_openssl" in
     yes)  AC_DEFINE(HAVE_OPENSSL, 1, [Define if the system has openssl]) ;;
     *) AC_MSG_ERROR([OpenSSL could not be found. You should add the directory \
     containing 'openssl.pc' to the 'PKG_CONFIG_PATH' environment variable, set \
     'CFLAGS' and 'LDFLAGS' directly, or use '--disable-openssl' to disable \
     support for OpenSSL encryption])
	;;
    esac
    ;;
esac

dnl check if we have and should use OpenSSL
AM_CONDITIONAL(OPENSSL, [test "$enable_openssl" != "no" && test "$have_openssl" = "yes"])
])