David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 1 | dnl @synopsis AX_LIB_EVENT([MINIMUM-VERSION]) |
| 2 | dnl |
David Reiss | faebedd | 2007-09-17 23:20:38 +0000 | [diff] [blame] | 3 | dnl Test for the libevent library of a particular version (or newer). |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 4 | dnl |
| 5 | dnl If no path to the installed libevent is given, the macro will first try |
| 6 | dnl using no -I or -L flags, then searches under /usr, /usr/local, /opt, |
| 7 | dnl and /opt/libevent. |
| 8 | dnl If these all fail, it will try the $LIBEVENT_ROOT environment variable. |
| 9 | dnl |
| 10 | dnl This macro requires that #include <sys/types.h> works and defines u_char. |
| 11 | dnl |
| 12 | dnl This macro calls: |
| 13 | dnl AC_SUBST(LIBEVENT_CPPFLAGS) |
| 14 | dnl AC_SUBST(LIBEVENT_LDFLAGS) |
| 15 | dnl AC_SUBST(LIBEVENT_LIBS) |
| 16 | dnl |
| 17 | dnl And (if libevent is found): |
| 18 | dnl AC_DEFINE(HAVE_LIBEVENT) |
| 19 | dnl |
| 20 | dnl It also leaves the shell variables "success" and "ax_have_libevent" |
| 21 | dnl set to "yes" or "no". |
| 22 | dnl |
| 23 | dnl NOTE: This macro does not currently work for cross-compiling, |
| 24 | dnl but it can be easily modified to allow it. (grep "cross"). |
| 25 | dnl |
| 26 | dnl @category InstalledPackages |
| 27 | dnl @category C |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 28 | dnl @version 2007-09-12 |
| 29 | dnl @license AllPermissive |
David Reiss | f82aee5 | 2009-03-30 22:52:29 +0000 | [diff] [blame] | 30 | dnl |
| 31 | dnl Copyright (C) 2009 David Reiss |
| 32 | dnl Copying and distribution of this file, with or without modification, |
| 33 | dnl are permitted in any medium without royalty provided the copyright |
| 34 | dnl notice and this notice are preserved. |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 35 | |
| 36 | dnl Input: ax_libevent_path, WANT_LIBEVENT_VERSION |
| 37 | dnl Output: success=yes/no |
| 38 | AC_DEFUN([AX_LIB_EVENT_DO_CHECK], |
| 39 | [ |
| 40 | # Save our flags. |
| 41 | CPPFLAGS_SAVED="$CPPFLAGS" |
| 42 | LDFLAGS_SAVED="$LDFLAGS" |
| 43 | LIBS_SAVED="$LIBS" |
| 44 | LD_LIBRARY_PATH_SAVED="$LD_LIBRARY_PATH" |
| 45 | |
| 46 | # Set our flags if we are checking a specific directory. |
| 47 | if test -n "$ax_libevent_path" ; then |
| 48 | LIBEVENT_CPPFLAGS="-I$ax_libevent_path/include" |
| 49 | LIBEVENT_LDFLAGS="-L$ax_libevent_path/lib" |
| 50 | LD_LIBRARY_PATH="$ax_libevent_path/lib:$LD_LIBRARY_PATH" |
| 51 | else |
| 52 | LIBEVENT_CPPFLAGS="" |
| 53 | LIBEVENT_LDFLAGS="" |
| 54 | fi |
| 55 | |
| 56 | # Required flag for libevent. |
| 57 | LIBEVENT_LIBS="-levent" |
| 58 | |
| 59 | # Prepare the environment for compilation. |
| 60 | CPPFLAGS="$CPPFLAGS $LIBEVENT_CPPFLAGS" |
| 61 | LDFLAGS="$LDFLAGS $LIBEVENT_LDFLAGS" |
| 62 | LIBS="$LIBS $LIBEVENT_LIBS" |
| 63 | export CPPFLAGS |
| 64 | export LDFLAGS |
| 65 | export LIBS |
| 66 | export LD_LIBRARY_PATH |
| 67 | |
| 68 | success=no |
| 69 | |
| 70 | # Compile, link, and run the program. This checks: |
| 71 | # - event.h is available for including. |
| 72 | # - event_get_version() is available for linking. |
| 73 | # - The event version string is lexicographically greater |
| 74 | # than the required version. |
| 75 | AC_LANG_PUSH([C]) |
| 76 | dnl This can be changed to AC_LINK_IFELSE if you are cross-compiling, |
| 77 | dnl but then the version cannot be checked. |
Gustavo Zacarias | e856d68 | 2015-04-25 17:53:28 +0200 | [diff] [blame] | 78 | AC_LINK_IFELSE([AC_LANG_PROGRAM([[ |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 79 | #include <sys/types.h> |
| 80 | #include <event.h> |
| 81 | ]], [[ |
| 82 | const char* lib_version = event_get_version(); |
| 83 | const char* wnt_version = "$WANT_LIBEVENT_VERSION"; |
Roger Meier | 013b2e5 | 2011-08-04 22:37:16 +0000 | [diff] [blame] | 84 | int lib_digits; |
| 85 | int wnt_digits; |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 86 | for (;;) { |
| 87 | /* If we reached the end of the want version. We have it. */ |
David Reiss | e657eb4 | 2009-07-29 19:07:27 +0000 | [diff] [blame] | 88 | if (*wnt_version == '\0' || *wnt_version == '-') { |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 89 | return 0; |
| 90 | } |
| 91 | /* If the want version continues but the lib version does not, */ |
| 92 | /* we are missing a letter. We don't have it. */ |
David Reiss | e657eb4 | 2009-07-29 19:07:27 +0000 | [diff] [blame] | 93 | if (*lib_version == '\0' || *lib_version == '-') { |
| 94 | return 1; |
| 95 | } |
| 96 | /* In the 1.4 version numbering style, if there are more digits */ |
| 97 | /* in one version than the other, that one is higher. */ |
David Reiss | e657eb4 | 2009-07-29 19:07:27 +0000 | [diff] [blame] | 98 | for (lib_digits = 0; |
| 99 | lib_version[lib_digits] >= '0' && |
| 100 | lib_version[lib_digits] <= '9'; |
| 101 | lib_digits++) |
| 102 | ; |
David Reiss | e657eb4 | 2009-07-29 19:07:27 +0000 | [diff] [blame] | 103 | for (wnt_digits = 0; |
| 104 | wnt_version[wnt_digits] >= '0' && |
| 105 | wnt_version[wnt_digits] <= '9'; |
| 106 | wnt_digits++) |
| 107 | ; |
| 108 | if (lib_digits > wnt_digits) { |
| 109 | return 0; |
| 110 | } |
| 111 | if (lib_digits < wnt_digits) { |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 112 | return 1; |
| 113 | } |
| 114 | /* If we have greater than what we want. We have it. */ |
| 115 | if (*lib_version > *wnt_version) { |
| 116 | return 0; |
| 117 | } |
| 118 | /* If we have less, we don't. */ |
| 119 | if (*lib_version < *wnt_version) { |
| 120 | return 1; |
| 121 | } |
| 122 | lib_version++; |
| 123 | wnt_version++; |
| 124 | } |
| 125 | return 0; |
| 126 | ]])], [ |
| 127 | success=yes |
| 128 | ]) |
| 129 | AC_LANG_POP([C]) |
| 130 | |
| 131 | # Restore flags. |
| 132 | CPPFLAGS="$CPPFLAGS_SAVED" |
| 133 | LDFLAGS="$LDFLAGS_SAVED" |
| 134 | LIBS="$LIBS_SAVED" |
| 135 | LD_LIBRARY_PATH="$LD_LIBRARY_PATH_SAVED" |
| 136 | ]) |
| 137 | |
| 138 | |
| 139 | AC_DEFUN([AX_LIB_EVENT], |
| 140 | [ |
| 141 | |
| 142 | dnl Allow search path to be overridden on the command line. |
| 143 | AC_ARG_WITH([libevent], |
Jake Farrell | 2fd8a15 | 2012-09-29 00:26:36 +0000 | [diff] [blame] | 144 | AS_HELP_STRING([--with-libevent@<:@=DIR@:>@], [use libevent [default=yes]. Optionally specify the root prefix dir where libevent is installed]), |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 145 | [ |
| 146 | if test "x$withval" = "xno"; then |
| 147 | want_libevent="no" |
| 148 | elif test "x$withval" = "xyes"; then |
| 149 | want_libevent="yes" |
| 150 | ax_libevent_path="" |
| 151 | else |
| 152 | want_libevent="yes" |
| 153 | ax_libevent_path="$withval" |
| 154 | fi |
| 155 | ], |
| 156 | [ want_libevent="yes" ; ax_libevent_path="" ]) |
| 157 | |
| 158 | |
| 159 | if test "$want_libevent" = "yes"; then |
| 160 | WANT_LIBEVENT_VERSION=ifelse([$1], ,1.2,$1) |
| 161 | |
| 162 | AC_MSG_CHECKING(for libevent >= $WANT_LIBEVENT_VERSION) |
| 163 | |
| 164 | # Run tests. |
| 165 | if test -n "$ax_libevent_path"; then |
| 166 | AX_LIB_EVENT_DO_CHECK |
| 167 | else |
jfarrell | 4d3f937 | 2014-10-08 23:35:05 -0400 | [diff] [blame] | 168 | for ax_libevent_path in "" $lt_sysroot/usr $lt_sysroot/usr/local $lt_sysroot/opt $lt_sysroot/opt/local $lt_sysroot/opt/libevent "$LIBEVENT_ROOT" ; do |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 169 | AX_LIB_EVENT_DO_CHECK |
| 170 | if test "$success" = "yes"; then |
| 171 | break; |
| 172 | fi |
| 173 | done |
| 174 | fi |
| 175 | |
| 176 | if test "$success" != "yes" ; then |
| 177 | AC_MSG_RESULT(no) |
| 178 | LIBEVENT_CPPFLAGS="" |
| 179 | LIBEVENT_LDFLAGS="" |
| 180 | LIBEVENT_LIBS="" |
| 181 | else |
| 182 | AC_MSG_RESULT(yes) |
| 183 | AC_DEFINE(HAVE_LIBEVENT,,[define if libevent is available]) |
David Reiss | ad55742 | 2009-07-29 19:07:33 +0000 | [diff] [blame] | 184 | ax_have_libevent_[]m4_translit([$1], [.], [_])="yes" |
David Reiss | 79ae0f8 | 2007-09-17 21:15:47 +0000 | [diff] [blame] | 185 | fi |
| 186 | |
| 187 | ax_have_libevent="$success" |
| 188 | |
| 189 | AC_SUBST(LIBEVENT_CPPFLAGS) |
| 190 | AC_SUBST(LIBEVENT_LDFLAGS) |
| 191 | AC_SUBST(LIBEVENT_LIBS) |
| 192 | fi |
| 193 | |
| 194 | ]) |