]> git.proxmox.com Git - ovs.git/blob - acinclude.m4
datapath: clear l4_rxhash in skb_clear_hash.
[ovs.git] / acinclude.m4
1 # -*- autoconf -*-
2
3 # Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at:
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 dnl OVS_ENABLE_WERROR
18 AC_DEFUN([OVS_ENABLE_WERROR],
19 [AC_ARG_ENABLE(
20 [Werror],
21 [AC_HELP_STRING([--enable-Werror], [Add -Werror to CFLAGS])],
22 [], [enable_Werror=no])
23 AC_CONFIG_COMMANDS_PRE(
24 [if test "X$enable_Werror" = Xyes; then
25 CFLAGS="$CFLAGS -Werror"
26 fi])])
27
28 dnl OVS_CHECK_LINUX
29 dnl
30 dnl Configure linux kernel source tree
31 AC_DEFUN([OVS_CHECK_LINUX], [
32 AC_ARG_WITH([linux],
33 [AC_HELP_STRING([--with-linux=/path/to/linux],
34 [Specify the Linux kernel build directory])])
35 AC_ARG_WITH([linux-source],
36 [AC_HELP_STRING([--with-linux-source=/path/to/linux-source],
37 [Specify the Linux kernel source directory
38 (usually figured out automatically from build
39 directory)])])
40
41 # Deprecated equivalents to --with-linux, --with-linux-source.
42 AC_ARG_WITH([l26])
43 AC_ARG_WITH([l26-source])
44
45 if test X"$with_linux" != X; then
46 KBUILD=$with_linux
47 elif test X"$with_l26" != X; then
48 KBUILD=$with_l26
49 AC_MSG_WARN([--with-l26 is deprecated, please use --with-linux instead])
50 else
51 KBUILD=
52 fi
53
54 if test X"$KBUILD" != X; then
55 if test X"$with_linux_source" != X; then
56 KSRC=$with_linux_source
57 elif test X"$with_l26_source" != X; then
58 KSRC=$with_l26_source
59 AC_MSG_WARN([--with-l26-source is deprecated, please use --with-linux-source instead])
60 else
61 KSRC=
62 fi
63 elif test X"$with_linux_source" != X || test X"$with_l26_source" != X; then
64 AC_MSG_ERROR([Linux source directory may not be specified without Linux build directory])
65 fi
66
67 if test -n "$KBUILD"; then
68 KBUILD=`eval echo "$KBUILD"`
69 case $KBUILD in
70 /*) ;;
71 *) KBUILD=`pwd`/$KBUILD ;;
72 esac
73
74 # The build directory is what the user provided.
75 # Make sure that it exists.
76 AC_MSG_CHECKING([for Linux build directory])
77 if test -d "$KBUILD"; then
78 AC_MSG_RESULT([$KBUILD])
79 AC_SUBST(KBUILD)
80 else
81 AC_MSG_RESULT([no])
82 AC_ERROR([source dir $KBUILD doesn't exist])
83 fi
84
85 # Debian breaks kernel headers into "source" header and "build" headers.
86 # We want the source headers, but $KBUILD gives us the "build" headers.
87 # Use heuristics to find the source headers.
88 AC_MSG_CHECKING([for Linux source directory])
89 if test -n "$KSRC"; then
90 KSRC=`eval echo "$KSRC"`
91 case $KSRC in
92 /*) ;;
93 *) KSRC=`pwd`/$KSRC ;;
94 esac
95 if test ! -e $KSRC/include/linux/kernel.h; then
96 AC_MSG_ERROR([$KSRC is not a kernel source directory])
97 fi
98 else
99 KSRC=$KBUILD
100 if test ! -e $KSRC/include/linux/kernel.h; then
101 # Debian kernel build Makefiles tend to include a line of the form:
102 # MAKEARGS := -C /usr/src/linux-headers-3.2.0-1-common O=/usr/src/linux-headers-3.2.0-1-486
103 # First try to extract the source directory from this line.
104 KSRC=`sed -n 's/.*-C \([[^ ]]*\).*/\1/p' "$KBUILD"/Makefile`
105 if test ! -e "$KSRC"/include/linux/kernel.h; then
106 # Didn't work. Fall back to name-based heuristics that used to work.
107 case `echo "$KBUILD" | sed 's,/*$,,'` in # (
108 */build)
109 KSRC=`echo "$KBUILD" | sed 's,/build/*$,/source,'`
110 ;; # (
111 *)
112 KSRC=`(cd $KBUILD && pwd -P) | sed 's,-[[^-]]*$,-common,'`
113 ;;
114 esac
115 fi
116 fi
117 if test ! -e "$KSRC"/include/linux/kernel.h; then
118 AC_MSG_ERROR([cannot find source directory (please use --with-linux-source)])
119 fi
120 fi
121 AC_MSG_RESULT([$KSRC])
122
123 AC_MSG_CHECKING([for kernel version])
124 version=`sed -n 's/^VERSION = //p' "$KSRC/Makefile"`
125 patchlevel=`sed -n 's/^PATCHLEVEL = //p' "$KSRC/Makefile"`
126 sublevel=`sed -n 's/^SUBLEVEL = //p' "$KSRC/Makefile"`
127 if test X"$version" = X || test X"$patchlevel" = X; then
128 AC_ERROR([cannot determine kernel version])
129 elif test X"$sublevel" = X; then
130 kversion=$version.$patchlevel
131 else
132 kversion=$version.$patchlevel.$sublevel
133 fi
134 AC_MSG_RESULT([$kversion])
135
136 if test "$version" -ge 3; then
137 if test "$version" = 3 && test "$patchlevel" -le 14; then
138 : # Linux 3.x
139 else
140 AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 3.14.x is not supported (please refer to the FAQ for advice)])
141 fi
142 else
143 if test "$version" -le 1 || test "$patchlevel" -le 5 || test "$sublevel" -le 31; then
144 AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version 2.6.32 or later is required])
145 else
146 : # Linux 2.6.x
147 fi
148 fi
149 if (test ! -e "$KBUILD"/include/linux/version.h && \
150 test ! -e "$KBUILD"/include/generated/uapi/linux/version.h)|| \
151 (test ! -e "$KBUILD"/include/linux/autoconf.h && \
152 test ! -e "$KBUILD"/include/generated/autoconf.h); then
153 AC_MSG_ERROR([Linux kernel source in $KBUILD is not configured])
154 fi
155 OVS_CHECK_LINUX_COMPAT
156 fi
157 AM_CONDITIONAL(LINUX_ENABLED, test -n "$KBUILD")
158 ])
159
160 dnl OVS_CHECK_DPDK
161 dnl
162 dnl Configure DPDK source tree
163 AC_DEFUN([OVS_CHECK_DPDK], [
164 AC_ARG_WITH([dpdk],
165 [AC_HELP_STRING([--with-dpdk=/path/to/dpdk],
166 [Specify the DPDP build directory])])
167
168 if test X"$with_dpdk" != X; then
169 RTE_SDK=$with_dpdk
170
171 DPDK_INCLUDE=$RTE_SDK/include
172 DPDK_LIB_DIR=$RTE_SDK/lib
173 DPDK_LIBS="$DPDK_LIB_DIR/libintel_dpdk.a"
174
175 LIBS="$DPDK_LIBS $LIBS"
176 CPPFLAGS="-I$DPDK_INCLUDE $CPPFLAGS"
177
178 AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.])
179 else
180 RTE_SDK=
181 fi
182
183 AM_CONDITIONAL([DPDK_NETDEV], test -n "$RTE_SDK")
184 ])
185
186 dnl OVS_GREP_IFELSE(FILE, REGEX, [IF-MATCH], [IF-NO-MATCH])
187 dnl
188 dnl Greps FILE for REGEX. If it matches, runs IF-MATCH, otherwise IF-NO-MATCH.
189 dnl If IF-MATCH is empty then it defines to OVS_DEFINE(HAVE_<REGEX>), with
190 dnl <REGEX> translated to uppercase.
191 AC_DEFUN([OVS_GREP_IFELSE], [
192 AC_MSG_CHECKING([whether $2 matches in $1])
193 if test -f $1; then
194 grep '$2' $1 >/dev/null 2>&1
195 status=$?
196 case $status in
197 0)
198 AC_MSG_RESULT([yes])
199 m4_if([$3], [], [OVS_DEFINE([HAVE_]m4_toupper([$2]))], [$3])
200 ;;
201 1)
202 AC_MSG_RESULT([no])
203 $4
204 ;;
205 *)
206 AC_MSG_ERROR([grep exited with status $status])
207 ;;
208 esac
209 else
210 AC_MSG_RESULT([file not found])
211 $4
212 fi
213 ])
214
215 dnl OVS_DEFINE(NAME)
216 dnl
217 dnl Defines NAME to 1 in kcompat.h.
218 AC_DEFUN([OVS_DEFINE], [
219 echo '#define $1 1' >> datapath/linux/kcompat.h.new
220 ])
221
222 AC_DEFUN([OVS_CHECK_LOG2_H], [
223 AC_MSG_CHECKING([for $KSRC/include/linux/log2.h])
224 if test -e $KSRC/include/linux/log2.h; then
225 AC_MSG_RESULT([yes])
226 OVS_DEFINE([HAVE_LOG2_H])
227 else
228 AC_MSG_RESULT([no])
229 fi
230 ])
231
232 dnl OVS_CHECK_LINUX_COMPAT
233 dnl
234 dnl Runs various Autoconf checks on the Linux 2.6 kernel source in
235 dnl the directory in $KBUILD.
236 AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
237 rm -f datapath/linux/kcompat.h.new
238 mkdir -p datapath/linux
239 : > datapath/linux/kcompat.h.new
240
241 OVS_GREP_IFELSE([$KSRC/arch/x86/include/asm/checksum_32.h], [src_err,],
242 [OVS_DEFINE([HAVE_CSUM_COPY_DBG])])
243
244 OVS_GREP_IFELSE([$KSRC/include/linux/err.h], [ERR_CAST])
245
246 OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [eth_hw_addr_random])
247 OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [ether_addr_copy])
248
249 OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_set_encap_proto])
250
251 OVS_GREP_IFELSE([$KSRC/include/linux/in.h], [ipv4_is_multicast])
252
253 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_disable_lro])
254 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_get_stats])
255 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_get_by_index_rcu])
256 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [__skb_gso_segment])
257 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [can_checksum_protocol])
258 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_features_t])
259 OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [pcpu_sw_netstats])
260
261 OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32])
262
263 OVS_GREP_IFELSE([$KSRC/include/linux/rcupdate.h], [rcu_read_lock_held], [],
264 [OVS_GREP_IFELSE([$KSRC/include/linux/rtnetlink.h],
265 [rcu_read_lock_held])])
266 OVS_GREP_IFELSE([$KSRC/include/linux/rtnetlink.h], [lockdep_rtnl_is_held])
267
268 # Check for the proto_data_valid member in struct sk_buff. The [^@]
269 # is necessary because some versions of this header remove the
270 # member but retain the kerneldoc comment that describes it (which
271 # starts with @). The brackets must be doubled because of m4
272 # quoting rules.
273 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [[[^@]]proto_data_valid],
274 [OVS_DEFINE([HAVE_PROTO_DATA_VALID])])
275 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [rxhash])
276 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_dst(],
277 [OVS_DEFINE([HAVE_SKB_DST_ACCESSOR_FUNCS])])
278 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
279 [skb_copy_from_linear_data_offset])
280 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
281 [skb_reset_tail_pointer])
282 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_cow_head])
283 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_transport_header],
284 [OVS_DEFINE([HAVE_SKBUFF_HEADER_HELPERS])])
285 OVS_GREP_IFELSE([$KSRC/include/linux/icmpv6.h], [icmp6_hdr],
286 [OVS_DEFINE([HAVE_ICMP6_HDR])])
287 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_warn_if_lro],
288 [OVS_DEFINE([HAVE_SKB_WARN_LRO])])
289 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [consume_skb])
290 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_frag_page])
291 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_has_frag_list])
292 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [__skb_fill_page_desc])
293 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_reset_mac_len])
294 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_unclone])
295 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_orphan_frags])
296 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash])
297 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_clear_hash])
298 OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [l4_rxhash])
299
300 OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [bool],
301 [OVS_DEFINE([HAVE_BOOL_TYPE])])
302 OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [__wsum],
303 [OVS_DEFINE([HAVE_CSUM_TYPES])])
304 OVS_GREP_IFELSE([$KSRC/include/uapi/linux/types.h], [__wsum],
305 [OVS_DEFINE([HAVE_CSUM_TYPES])])
306
307 OVS_GREP_IFELSE([$KSRC/include/net/checksum.h], [csum_replace4])
308 OVS_GREP_IFELSE([$KSRC/include/net/checksum.h], [csum_unfold])
309
310 OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [parallel_ops])
311 OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_cisco_register])
312 OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_get_be16])
313 OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_be16])
314 OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_be32])
315 OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_be64])
316 OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_find_nested])
317
318 OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
319
320 OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD],
321 [OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])])
322
323 OVS_GREP_IFELSE([$KSRC/include/linux/percpu.h], [this_cpu_ptr])
324
325 OVS_GREP_IFELSE([$KSRC/include/linux/openvswitch.h], [openvswitch_handle_frame_hook],
326 [OVS_DEFINE([HAVE_RHEL_OVS_HOOK])])
327
328 OVS_CHECK_LOG2_H
329
330 if cmp -s datapath/linux/kcompat.h.new \
331 datapath/linux/kcompat.h >/dev/null 2>&1; then
332 rm datapath/linux/kcompat.h.new
333 else
334 mv datapath/linux/kcompat.h.new datapath/linux/kcompat.h
335 fi
336 ])
337
338 dnl Checks for net/if_packet.h.
339 AC_DEFUN([OVS_CHECK_IF_PACKET],
340 [AC_CHECK_HEADER([net/if_packet.h],
341 [HAVE_IF_PACKET=yes],
342 [HAVE_IF_PACKET=no])
343 AM_CONDITIONAL([HAVE_IF_PACKET], [test "$HAVE_IF_PACKET" = yes])
344 if test "$HAVE_IF_PACKET" = yes; then
345 AC_DEFINE([HAVE_IF_PACKET], [1],
346 [Define to 1 if net/if_packet.h is available.])
347 fi])
348
349 dnl Checks for net/if_dl.h.
350 dnl
351 dnl (We use this as a proxy for checking whether we're building on FreeBSD
352 dnl or NetBSD.)
353 AC_DEFUN([OVS_CHECK_IF_DL],
354 [AC_CHECK_HEADER([net/if_dl.h],
355 [HAVE_IF_DL=yes],
356 [HAVE_IF_DL=no])
357 AM_CONDITIONAL([HAVE_IF_DL], [test "$HAVE_IF_DL" = yes])
358 if test "$HAVE_IF_DL" = yes; then
359 AC_DEFINE([HAVE_IF_DL], [1],
360 [Define to 1 if net/if_dl.h is available.])
361
362 # On these platforms we use libpcap to access network devices.
363 AC_SEARCH_LIBS([pcap_open_live], [pcap])
364 fi])
365
366 dnl Checks for buggy strtok_r.
367 dnl
368 dnl Some versions of glibc 2.7 has a bug in strtok_r when compiling
369 dnl with optimization that can cause segfaults:
370 dnl
371 dnl http://sources.redhat.com/bugzilla/show_bug.cgi?id=5614.
372 AC_DEFUN([OVS_CHECK_STRTOK_R],
373 [AC_CACHE_CHECK(
374 [whether strtok_r macro segfaults on some inputs],
375 [ovs_cv_strtok_r_bug],
376 [AC_RUN_IFELSE(
377 [AC_LANG_PROGRAM([#include <stdio.h>
378 #include <string.h>
379 ],
380 [[char string[] = ":::";
381 char *save_ptr = (char *) 0xc0ffee;
382 char *token1, *token2;
383 token1 = strtok_r(string, ":", &save_ptr);
384 token2 = strtok_r(NULL, ":", &save_ptr);
385 freopen ("/dev/null", "w", stdout);
386 printf ("%s %s\n", token1, token2);
387 return 0;
388 ]])],
389 [ovs_cv_strtok_r_bug=no],
390 [ovs_cv_strtok_r_bug=yes],
391 [ovs_cv_strtok_r_bug=yes])])
392 if test $ovs_cv_strtok_r_bug = yes; then
393 AC_DEFINE([HAVE_STRTOK_R_BUG], [1],
394 [Define if strtok_r macro segfaults on some inputs])
395 fi
396 ])
397
398 dnl ----------------------------------------------------------------------
399 dnl These macros are from GNU PSPP, with the following original license:
400 dnl Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
401 dnl This file is free software; the Free Software Foundation
402 dnl gives unlimited permission to copy and/or distribute it,
403 dnl with or without modifications, as long as this notice is preserved.
404
405 AC_DEFUN([_OVS_CHECK_CC_OPTION], [dnl
406 m4_define([ovs_cv_name], [ovs_cv_[]m4_translit([$1], [-], [_])])dnl
407 AC_CACHE_CHECK([whether $CC accepts $1], [ovs_cv_name],
408 [ovs_save_CFLAGS="$CFLAGS"
409 dnl Include -Werror in the compiler options, because without -Werror
410 dnl clang's GCC-compatible compiler driver does not return a failure
411 dnl exit status even though it complains about options it does not
412 dnl understand.
413 CFLAGS="$CFLAGS $WERROR $1"
414 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,)], [ovs_cv_name[]=yes], [ovs_cv_name[]=no])
415 CFLAGS="$ovs_save_CFLAGS"])
416 if test $ovs_cv_name = yes; then
417 m4_if([$2], [], [:], [$2])
418 else
419 m4_if([$3], [], [:], [$3])
420 fi
421 ])
422
423 dnl OVS_CHECK_WERROR
424 dnl
425 dnl Check whether the C compiler accepts -Werror.
426 dnl Sets $WERROR to "-Werror", if so, and otherwise to the empty string.
427 AC_DEFUN([OVS_CHECK_WERROR],
428 [WERROR=
429 _OVS_CHECK_CC_OPTION([-Werror], [WERROR=-Werror])])
430
431 dnl OVS_CHECK_CC_OPTION([OPTION], [ACTION-IF-ACCEPTED], [ACTION-IF-REJECTED])
432 dnl Check whether the given C compiler OPTION is accepted.
433 dnl If so, execute ACTION-IF-ACCEPTED, otherwise ACTION-IF-REJECTED.
434 AC_DEFUN([OVS_CHECK_CC_OPTION],
435 [AC_REQUIRE([OVS_CHECK_WERROR])
436 _OVS_CHECK_CC_OPTION([$1], [$2], [$3])])
437
438 dnl OVS_ENABLE_OPTION([OPTION])
439 dnl Check whether the given C compiler OPTION is accepted.
440 dnl If so, add it to WARNING_FLAGS.
441 dnl Example: OVS_ENABLE_OPTION([-Wdeclaration-after-statement])
442 AC_DEFUN([OVS_ENABLE_OPTION],
443 [OVS_CHECK_CC_OPTION([$1], [WARNING_FLAGS="$WARNING_FLAGS $1"])
444 AC_SUBST([WARNING_FLAGS])])
445
446 dnl OVS_CONDITIONAL_CC_OPTION([OPTION], [CONDITIONAL])
447 dnl Check whether the given C compiler OPTION is accepted.
448 dnl If so, enable the given Automake CONDITIONAL.
449
450 dnl Example: OVS_CONDITIONAL_CC_OPTION([-Wno-unused], [HAVE_WNO_UNUSED])
451 AC_DEFUN([OVS_CONDITIONAL_CC_OPTION],
452 [OVS_CHECK_CC_OPTION(
453 [$1], [ovs_have_cc_option=yes], [ovs_have_cc_option=no])
454 AM_CONDITIONAL([$2], [test $ovs_have_cc_option = yes])])
455 dnl ----------------------------------------------------------------------
456
457 dnl Check for too-old XenServer.
458 AC_DEFUN([OVS_CHECK_XENSERVER_VERSION],
459 [AC_CACHE_CHECK([XenServer release], [ovs_cv_xsversion],
460 [if test -e /etc/redhat-release; then
461 ovs_cv_xsversion=`sed -n 's/^XenServer DDK release \([[^-]]*\)-.*/\1/p' /etc/redhat-release`
462 fi
463 if test -z "$ovs_cv_xsversion"; then
464 ovs_cv_xsversion=none
465 fi])
466 case $ovs_cv_xsversion in
467 none)
468 ;;
469
470 [[1-9]][[0-9]]* | dnl XenServer 10 or later
471 [[6-9]]* | dnl XenServer 6 or later
472 5.[[7-9]]* | dnl XenServer 5.7 or later
473 5.6.[[1-9]][[0-9]][[0-9]][[0-9]]* | dnl XenServer 5.6.1000 or later
474 5.6.[[2-9]][[0-9]][[0-9]]* | dnl XenServer 5.6.200 or later
475 5.6.1[[0-9]][[0-9]]) dnl Xenserver 5.6.100 or later
476 ;;
477
478 *)
479 AC_MSG_ERROR([This appears to be XenServer $ovs_cv_xsversion, but only XenServer 5.6.100 or later is supported. (If you are really using a supported version of XenServer, you may override this error message by specifying 'ovs_cv_xsversion=5.6.100' on the "configure" command line.)])
480 ;;
481 esac])
482
483 dnl OVS_MAKE_HAS_IF([if-true], [if-false])
484 dnl
485 dnl Checks whether make has the GNU make $(if condition,then,else) extension.
486 dnl Runs 'if-true' if so, 'if-false' otherwise.
487 AC_DEFUN([OVS_CHECK_MAKE_IF],
488 [AC_CACHE_CHECK(
489 [whether ${MAKE-make} has GNU make \$(if) extension],
490 [ovs_cv_gnu_make_if],
491 [cat <<'EOF' > conftest.mk
492 conftest.out:
493 echo $(if x,y,z) > conftest.out
494 .PHONY: all
495 EOF
496 rm -f conftest.out
497 AS_ECHO(["$as_me:$LINENO: invoking ${MAKE-make} -f conftest.mk all:"]) >&AS_MESSAGE_LOG_FD 2>&1
498 ${MAKE-make} -f conftest.mk conftest.out >&AS_MESSAGE_LOG_FD 2>&1
499 AS_ECHO(["$as_me:$LINENO: conftest.out contains:"]) >&AS_MESSAGE_LOG_FD 2>&1
500 cat conftest.out >&AS_MESSAGE_LOG_FD 2>&1
501 result=`cat conftest.out`
502 rm -f conftest.mk conftest.out
503 if test "X$result" = "Xy"; then
504 ovs_cv_gnu_make_if=yes
505 else
506 ovs_cv_gnu_make_if=no
507 fi])])
508
509 dnl OVS_CHECK_GNU_MAKE
510 dnl
511 dnl Checks whether make is GNU make (because Linux kernel Makefiles
512 dnl only work with GNU make).
513 AC_DEFUN([OVS_CHECK_GNU_MAKE],
514 [AC_CACHE_CHECK(
515 [whether ${MAKE-make} is GNU make],
516 [ovs_cv_gnu_make],
517 [rm -f conftest.out
518 AS_ECHO(["$as_me:$LINENO: invoking ${MAKE-make} --version:"]) >&AS_MESSAGE_LOG_FD 2>&1
519 ${MAKE-make} --version >conftest.out 2>&1
520 cat conftest.out >&AS_MESSAGE_LOG_FD 2>&1
521 result=`cat conftest.out`
522 rm -f conftest.mk conftest.out
523
524 case $result in # (
525 GNU*) ovs_cv_gnu_make=yes ;; # (
526 *) ovs_cv_gnu_make=no ;;
527 esac])
528 AM_CONDITIONAL([GNU_MAKE], [test $ovs_cv_gnu_make = yes])])
529
530 dnl OVS_CHECK_SPARSE_TARGET
531 dnl
532 dnl The "cgcc" script from "sparse" isn't very good at detecting the
533 dnl target for which the code is being built. This helps it out.
534 AC_DEFUN([OVS_CHECK_SPARSE_TARGET],
535 [AC_CACHE_CHECK(
536 [target hint for cgcc],
537 [ac_cv_sparse_target],
538 [AS_CASE([`$CC -dumpmachine 2>/dev/null`],
539 [i?86-* | athlon-*], [ac_cv_sparse_target=x86],
540 [x86_64-*], [ac_cv_sparse_target=x86_64],
541 [ac_cv_sparse_target=other])])
542 AS_CASE([$ac_cv_sparse_target],
543 [x86], [SPARSEFLAGS= CGCCFLAGS=-target=i86],
544 [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS=-target=x86_64],
545 [SPARSEFLAGS= CGCCFLAGS=])
546 AC_SUBST([SPARSEFLAGS])
547 AC_SUBST([CGCCFLAGS])])
548
549 dnl OVS_SPARSE_EXTRA_INCLUDES
550 dnl
551 dnl The cgcc script from "sparse" does not search gcc's default
552 dnl search path. Get the default search path from GCC and pass
553 dnl them to sparse.
554 AC_DEFUN([OVS_SPARSE_EXTRA_INCLUDES],
555 AC_SUBST([SPARSE_EXTRA_INCLUDES],
556 [`$CC -v -E - </dev/null 2>&1 >/dev/null | sed -n -e '/^#include.*search.*starts.*here:/,/^End.*of.*search.*list\./s/^ \(.*\)/-I \1/p' |grep -v /usr/lib | grep -x -v '\-I /usr/include' | tr \\\n ' ' `] ))
557
558 dnl OVS_ENABLE_SPARSE
559 AC_DEFUN([OVS_ENABLE_SPARSE],
560 [AC_REQUIRE([OVS_CHECK_SPARSE_TARGET])
561 AC_REQUIRE([OVS_CHECK_MAKE_IF])
562 AC_REQUIRE([OVS_SPARSE_EXTRA_INCLUDES])
563 : ${SPARSE=sparse}
564 AC_SUBST([SPARSE])
565 AC_CONFIG_COMMANDS_PRE(
566 [if test $ovs_cv_gnu_make_if = yes; then
567 CC='$(if $(C),env REAL_CC="'"$CC"'" CHECK="$(SPARSE) -I $(top_srcdir)/include/sparse $(SPARSEFLAGS) $(SPARSE_EXTRA_INCLUDES) " cgcc $(CGCCFLAGS),'"$CC"')'
568 fi])])
569
570 dnl OVS_PTHREAD_SET_NAME
571 dnl
572 dnl This checks for three known variants of pthreads functions for setting
573 dnl the name of the current thread:
574 dnl
575 dnl glibc: int pthread_setname_np(pthread_t, const char *name);
576 dnl NetBSD: int pthread_setname_np(pthread_t, const char *format, void *arg);
577 dnl FreeBSD: int pthread_set_name_np(pthread_t, const char *name);
578 dnl
579 dnl For glibc and FreeBSD, the arguments are just a thread and its name. For
580 dnl NetBSD, 'format' is a printf() format string and 'arg' is an argument to
581 dnl provide to it.
582 dnl
583 dnl This macro defines:
584 dnl
585 dnl glibc: HAVE_GLIBC_PTHREAD_SETNAME_NP
586 dnl NetBSD: HAVE_NETBSD_PTHREAD_SETNAME_NP
587 dnl FreeBSD: HAVE_PTHREAD_SET_NAME_NP
588 AC_DEFUN([OVS_CHECK_PTHREAD_SET_NAME],
589 [AC_CHECK_FUNCS([pthread_set_name_np])
590 if test $ac_cv_func_pthread_set_name_np != yes; then
591 AC_CACHE_CHECK(
592 [for pthread_setname_np() variant],
593 [ovs_cv_pthread_setname_np],
594 [AC_LINK_IFELSE(
595 [AC_LANG_PROGRAM([#include <pthread.h>
596 ], [pthread_setname_np(pthread_self(), "name");])],
597 [ovs_cv_pthread_setname_np=glibc],
598 [AC_LINK_IFELSE(
599 [AC_LANG_PROGRAM([#include <pthread.h>
600 ], [pthread_setname_np(pthread_self(), "%s", "name");])],
601 [ovs_cv_pthread_setname_np=netbsd],
602 [ovs_cv_pthread_setname_np=none])])])
603 case $ovs_cv_pthread_setname_np in # (
604 glibc)
605 AC_DEFINE(
606 [HAVE_GLIBC_PTHREAD_SETNAME_NP], [1],
607 [Define to 1 if pthread_setname_np() is available and takes 2 parameters (like glibc).])
608 ;; # (
609 netbsd)
610 AC_DEFINE(
611 [HAVE_NETBSD_PTHREAD_SETNAME_NP], [1],
612 [Define to 1 if pthread_setname_np() is available and takes 3 parameters (like NetBSD).])
613 ;;
614 esac
615 fi])
616
617 dnl OVS_CHECK_LINUX_HOST.
618 dnl
619 dnl Checks whether we're building for a Linux host, based on the presence of
620 dnl the __linux__ preprocessor symbol, and sets up an Automake conditional
621 dnl LINUX based on the result.
622 AC_DEFUN([OVS_CHECK_LINUX_HOST],
623 [AC_CACHE_CHECK(
624 [whether __linux__ is defined],
625 [ovs_cv_linux],
626 [AC_COMPILE_IFELSE(
627 [AC_LANG_PROGRAM([enum { LINUX = __linux__};], [])],
628 [ovs_cv_linux=true],
629 [ovs_cv_linux=false])])
630 AM_CONDITIONAL([LINUX], [$ovs_cv_linux])])