]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - contrib/ntp/sntp/m4/ntp_libevent.m4
Fix multiple vulnerabilities in ntp. [SA-18:02.ntp]
[FreeBSD/releng/10.3.git] / contrib / ntp / sntp / m4 / ntp_libevent.m4
1 # SYNOPSIS                                              -*- Autoconf -*-
2 #
3 #  NTP_ENABLE_LOCAL_LIBEVENT
4 #  NTP_LIBEVENT_CHECK([MINVERSION [, DIR]])
5 #  NTP_LIBEVENT_CHECK_NOBUILD([MINVERSION [, DIR]])
6 #
7 # DESCRIPTION
8 #
9 # AUTHOR
10 #
11 #  Harlan Stenn
12 #
13 # LICENSE
14 #
15 #  This file is Copyright (c) 2014 Network Time Foundation
16
17 #  Copying and distribution of this file, with or without modification, are
18 #  permitted in any medium without royalty provided the copyright notice,
19 #  author attribution and this notice are preserved.  This file is offered
20 #  as-is, without any warranty.
21
22 dnl NTP_ENABLE_LOCAL_LIBEVENT
23 dnl
24 dnl Provide only the --enable-local-libevent command-line option.
25 dnl
26 dnl Used standalone by top-level NTP configure.ac, which should have
27 dnl --enable-local-libevent in its --help output but which doesn't do
28 dnl anything differently based upon its presence or value.
29 dnl
30 dnl Also AC_REQUIRE'd by NTP_LIBEVENT_CHECK_NOBUILD.
31 AC_DEFUN([NTP_ENABLE_LOCAL_LIBEVENT], [
32
33 AC_ARG_ENABLE(
34     [local-libevent],
35     [AC_HELP_STRING(
36         [--enable-local-libevent],
37         [Force using the supplied libevent tearoff code]
38     )],
39     [ntp_use_local_libevent=$enableval],
40     [ntp_use_local_libevent=${ntp_use_local_libevent-detect}]
41 )
42
43 ]) dnl NTP_ENABLE_LOCAL_LIBEVENT
44
45 dnl NTP_LIBEVENT_CHECK_NOBUILD([MINVERSION [, DIR]])         -*- Autoconf -*-
46 dnl
47 dnl Look for libevent, which must be at least MINVERSION.
48 dnl DIR is the location of our "bundled" copy of libevent.
49 dnl If NOBUILD is provided as the 3rd argument, do all of the above,
50 dnl but DO NOT invoke DIR/configure if we are going to use our bundled
51 dnl version.  This may be the case for nested packages.
52 dnl
53 dnl provides: --enable-local-libevent 
54 dnl
55 dnl Examples:
56 dnl
57 dnl    NTP_LIBEVENT_CHECK_NOBUILD([2.0.9], [sntp/libevent])
58 dnl    NTP_LIBEVENT_CHECK
59 dnl
60 AC_DEFUN([NTP_LIBEVENT_CHECK_NOBUILD], [
61 AC_REQUIRE([NTP_PKG_CONFIG])dnl
62 AC_REQUIRE([NTP_ENABLE_LOCAL_LIBEVENT])dnl
63
64 ntp_libevent_min_version=m4_default([$1], [2.0.9])
65 ntp_libevent_tearoff=m4_default([$2], [libevent])
66
67 AC_SUBST([CFLAGS_LIBEVENT])
68 AC_SUBST([CPPFLAGS_LIBEVENT])
69 AC_SUBST([LDADD_LIBEVENT])
70
71 case "$ntp_use_local_libevent" in
72  yes)
73     ;;
74  *) # If we have (a good enough) pkg-config, see if it can find libevent
75     case "$PKG_CONFIG" in
76      /*)
77         AC_MSG_CHECKING([if libevent $ntp_libevent_min_version or later is installed])
78         if $PKG_CONFIG --atleast-version=$ntp_libevent_min_version libevent
79         then
80             ntp_use_local_libevent=no
81             ntp_libevent_version="`$PKG_CONFIG --modversion libevent`"
82             case "$ntp_libevent_version" in
83              *.*) ;;
84              *) ntp_libevent_version='(unknown)' ;;
85             esac
86             AC_MSG_RESULT([yes, version $ntp_libevent_version])
87             CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
88             CPPFLAGS_LIBEVENT=`$PKG_CONFIG --cflags-only-I libevent`
89             # HMS: I hope the following is accurate.
90             # We don't need -levent, we only need  -levent_core.
91             # While we could grab only the -L stuff, there *might* be
92             # other flags there we want.  Originally we just removed -levent
93             # but then somebody decided to install -levent-2.0
94             # LDADD_LIBEVENT=`$PKG_CONFIG --libs libevent | sed 's:-levent::'`
95             # So now we dance...
96             LDADD_LIBEVENT=
97             for i in `$PKG_CONFIG --libs libevent` `$PKG_CONFIG --cflags-only-other libevent_pthreads`
98             do
99                 case "$i" in
100                  -D*) ;;
101                  -levent*) ;;
102                  *) case "$LDADD_LIBEVENT" in
103                      '') LDADD_LIBEVENT="$i" ;;
104                      *) LDADD_LIBEVENT="$LDADD_LIBEVENT $i" ;;
105                     esac
106                     ;;
107                 esac
108             done
109             case "$LIBISC_PTHREADS_NOTHREADS" in
110              pthreads)
111                 LDADD_LIBEVENT="$LDADD_LIBEVENT -levent_pthreads"
112             esac
113             LDADD_LIBEVENT="$LDADD_LIBEVENT -levent_core"
114         else
115             ntp_use_local_libevent=yes
116             # HMS: do we only need to do this if LIBISC_PTHREADS_NOTHREADS
117             # is "pthreads"?
118             CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
119             AC_MSG_RESULT([no])
120         fi
121         ;;
122      *)
123         ntp_use_local_libevent=yes
124         ;;
125     esac
126     ;;
127 esac
128
129 case "$ntp_use_local_libevent" in
130  yes)
131     AC_MSG_NOTICE([Using libevent tearoff])
132     CPPFLAGS_LIBEVENT="-I\$(top_builddir)/$ntp_libevent_tearoff/include -I\$(top_srcdir)/$ntp_libevent_tearoff/include"
133     case "$LIBISC_PTHREADS_NOTHREADS" in
134      pthreads)
135         LDADD_LIBEVENT="\$(top_builddir)/$ntp_libevent_tearoff/libevent_pthreads.la \$(top_builddir)/$ntp_libevent_tearoff/libevent_core.la"
136         ;;
137      *)
138         LDADD_LIBEVENT="\$(top_builddir)/$ntp_libevent_tearoff/libevent_core.la"
139     esac
140 esac
141
142 dnl AC_ARG_ENABLE(
143 dnl     [cflags-libevent],
144 dnl     [AC_HELP_STRING(
145 dnl     [--enable-cflags-libevent=-pthread],
146 dnl     [CFLAGS value to build with pthreads]
147 dnl     )],
148 dnl     [CFLAGS_LIBEVENT=$enableval],
149 dnl     [# See above about LIBISC_PTHREADS_NOTHREADS
150 dnl     case "$CFLAGS_LIBEVENT" in
151 dnl      '') CFLAGS_LIBEVENT="-pthread" ;;      
152 dnl      *) ;;
153 dnl     esac]
154 dnl )
155 dnl AC_MSG_NOTICE([LIBISC_PTHREADS_NOTHREADS is <$LIBISC_PTHREADS_NOTHREADS>])
156 dnl AC_MSG_NOTICE([CFLAGS_LIBEVENT is <$CFLAGS_LIBEVENT>])
157
158 AM_CONDITIONAL([BUILD_LIBEVENT], [test "x$ntp_use_local_libevent" = "xyes"])
159
160 ]) dnl NTP_LIBEVENT_CHECK_NOBUILD
161
162 dnl NTP_LIBEVENT_CHECK([MINVERSION [, DIR]])         -*- Autoconf -*-
163 AC_DEFUN([NTP_LIBEVENT_CHECK], [
164
165 AC_SUBST([NTP_FORCE_LIBEVENT_DIST])
166 NTP_LIBEVENT_CHECK_NOBUILD([$1], [$2])
167
168 case "$ntp_libevent_tearoff" in
169  libevent)
170     ;;
171  *)
172     AC_MSG_ERROR([ntp_libevent.m4 dir must be libevent, not $ntp_libevent_tearoff])
173     ;;
174 esac
175
176 case "$ntp_use_local_libevent" in
177  yes)
178     dnl ac_configure_args is undocumented but widely abused, as here,
179     dnl to modify the defaults of the libevent subpackage, by prefixing
180     dnl our changes to the child configure arguments already assembled.
181     dnl User-supplied contradictory choices should prevail thanks to
182     dnl "last wins".
183     ac_configure_args=" --disable-openssl${ac_configure_args}"
184     ac_configure_args=" --disable-shared${ac_configure_args}"
185     ac_configure_args=" --disable-libevent-regress${ac_configure_args}"
186     ac_configure_args=" --disable-libevent-install${ac_configure_args}"
187     ac_configure_args=" --enable-silent-rules${ac_configure_args}"
188     ac_configure_args=" --enable-function-sections${ac_configure_args}"
189     ac_configure_args=" LEP_CFLAGS='${NTP_HARD_CFLAGS}'${ac_configure_args}"
190     ac_configure_args=" LEP_CPPFLAGS='${NTP_HARD_CPPFLAGS}'${ac_configure_args}"
191     ac_configure_args=" LEP_LDFLAGS='${NTP_HARD_LDFLAGS}'${ac_configure_args}"
192     AC_CONFIG_SUBDIRS([libevent])
193     ;;
194  *)
195     NTP_FORCE_LIBEVENT_DIST=libevent
196     ;;
197 esac
198
199 ]) dnl NTP_LIBEVENT_CHECK
200