source: configure.in @ 62ee4ec

cachetimestampsdevelopetsiliverc-4.0.4ringdecrementfixringperformance
Last change on this file since 62ee4ec was 62ee4ec, checked in by Shane Alcock <salcock@…>, 3 years ago

Add extra check for openssl/evp.h in configure.

On Mac OS X, it is common to have the library present but not the
header files, so the traceanon build will still fail.

This check will prevent the build from failing, but might make it
hard for Mac users to get traceanon building.

Solution: use homebrew to install openssl, then add
CPPFLAGS=-I/opt/local/include/ to your ./configure command.

  • Property mode set to 100644
File size: 22.2 KB
Line 
1# Process this file with autoconf to produce a configure script.
2
3# Now you only need to update the version number in two places - below,
4# and in the README
5
6AC_INIT([libtrace],[4.0.3],[contact@wand.net.nz],[libtrace])
7
8LIBTRACE_MAJOR=4
9LIBTRACE_MID=0
10LIBTRACE_MINOR=3
11
12# OpenSolaris hides libraries like libncurses in /usr/gnu/lib, which is not
13# searched by default - add it to LDFLAGS so we at least have a chance of
14# finding it
15if test -d "/usr/gnu/lib"; then
16        LDFLAGS+=" -L/usr/gnu/lib"
17fi
18
19AC_CONFIG_MACRO_DIR([m4])
20AC_CONFIG_SRCDIR(lib/trace.c)
21AM_INIT_AUTOMAKE([subdir-objects])
22
23# Make sure we use the relatively silent automake output
24m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
25
26# Define our libtrace version number externally so we can use it in the source
27# as well, if needed.
28AC_DEFINE([LIBTRACE_MAJOR],${LIBTRACE_MAJOR},[libtrace major version])
29AC_DEFINE([LIBTRACE_MID],${LIBTRACE_MID},[libtrace mid version])
30AC_DEFINE([LIBTRACE_MINOR],${LIBTRACE_MINOR},[libtrace minor version])
31
32# These are all the files we want to be built for us by configure
33AC_CONFIG_FILES([Makefile lib/Makefile docs/Makefile libpacketdump/Makefile
34        tools/Makefile tools/traceanon/Makefile tools/tracepktdump/Makefile
35        tools/tracemerge/Makefile tools/tracereport/Makefile
36        tools/tracertstats/Makefile tools/tracesplit/Makefile
37        tools/tracestats/Makefile tools/tracetop/Makefile
38        tools/tracereplay/Makefile tools/tracediff/Makefile
39        tools/traceends/Makefile
40        examples/Makefile examples/skeleton/Makefile examples/rate/Makefile
41        examples/stats/Makefile examples/tutorial/Makefile examples/parallel/Makefile
42        docs/libtrace.doxygen
43        lib/libtrace.h
44        ])
45
46
47# Function that checks if the C++ compiler actually works - there's a bit of
48# oversight in autoconf that will set the C++ compiler to g++ if no compiler
49# is found, even if g++ is not present! So we need an extra test to make sure
50# that the compiler works :(
51
52AC_DEFUN([rw_PROG_CXX_WORKS],
53[AC_REQUIRE([AC_PROG_CXX])dnl
54AC_CACHE_CHECK([whether the C++ compiler works],
55        [rw_cv_prog_cxx_works],
56        [AC_LANG_PUSH([C++])
57        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
58                [rw_cv_prog_cxx_works=yes],
59                [rw_cv_prog_cxx_works=no])
60        AC_LANG_POP([C++])])
61])
62
63# Put all our automake definitions in config.h
64AM_CONFIG_HEADER([config.h])
65
66# Checks for C and C++ compilers
67AC_PROG_CC
68AC_PROG_CXX
69rw_PROG_CXX_WORKS
70
71if test "$rw_cv_prog_cxx_works" = "no"; then
72        AC_MSG_ERROR("Failed to find working C++ compiler")
73fi
74
75# Checking for 'install'
76AC_PROG_INSTALL
77
78# Checking for bison and flex
79AC_CHECK_PROGS(YACC, 'bison -y' byacc yacc)
80AM_PROG_LEX
81
82# All our source files for function replacements are in lib/
83AC_CONFIG_LIBOBJ_DIR(lib)
84
85# Check for various "replacement" functions
86AC_FUNC_MALLOC
87AC_FUNC_REALLOC
88
89# *BSD doesn't have strndup. Currently provide our own.
90AC_REPLACE_FUNCS(strndup)
91
92
93# Checks for typedefs, structures, and compiler characteristics.
94AC_C_CONST
95AC_C_INLINE
96AC_C_BIGENDIAN
97AC_TYPE_SIZE_T
98AC_HEADER_TIME
99AC_SYS_LARGEFILE
100
101LIBPKTDUMP_LIBS="-ltrace "
102ADD_LDFLAGS="$ADD_LDFLAGS -L\$(abs_top_srcdir)/lib"
103LIBTRACE_LIBS=""
104TOOLS_LIBS=""
105
106CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wextra -DLT_BUILDING_DLL=1"
107CXXFLAGS="$CXXFLAGS -Wall -DLT_BUILDING_DLL=1"
108
109# Check for -fvisibility
110gl_VISIBILITY
111
112gcc_PACKED
113gcc_DEPRECATED
114gcc_UNUSED
115gcc_PURE
116gcc_FORMAT
117
118# Check for gcc style TLS (__thread)
119gcc_TLS
120       
121# Check for libtool
122AC_PROG_LIBTOOL
123
124# Checks for library functions.
125AC_PROG_GCC_TRADITIONAL
126
127# Fail if any of these functions are missing
128AC_CHECK_FUNCS(socket strdup strlcpy strcasecmp strncasecmp snprintf vsnprintf recvmmsg)
129
130AC_CHECK_SIZEOF([long int])
131
132
133# Checks for header files.
134AC_HEADER_STDC
135AC_CHECK_HEADERS(pcap.h pcap-int.h pcap-bpf.h net/bpf.h sys/limits.h stddef.h inttypes.h limits.h net/ethernet.h sys/prctl.h)
136
137
138# OpenSolaris puts ncurses.h in /usr/include/ncurses rather than /usr/include,
139# so check for that
140AC_CHECK_HEADERS(ncurses.h,,[missing_ncurses=true])
141
142if test "x$missing_ncurses" = xtrue; then
143        if test -f "/usr/include/ncurses/ncurses.h"; then
144                AC_DEFINE(HAVE_NCURSES_NCURSES_H,1,[Has nested ncurses header])
145        fi
146fi
147
148
149# Check for the presence of various networking headers and define appropriate
150# macros
151AC_CHECK_HEADERS(netinet/in.h)
152AC_CHECK_HEADERS(netpacket/packet.h,[
153        libtrace_netpacket_packet_h=true
154        AC_DEFINE(HAVE_NETPACKET_PACKET_H,1,[has net])
155])
156AC_CHECK_HEADER(net/if.h,
157        AC_DEFINE(HAVE_NET_IF_H,1,[has net/if.h header]),,[
158 #include <sys/types.h>
159 #include <sys/socket.h>
160])
161
162AC_CHECK_HEADER(netinet/ether.h,
163        AC_DEFINE(HAVE_NETINET_ETHER_H,1,[has netinet/ether.h header]),,[
164 #include <sys/types.h>
165 #include <sys/socket.h>
166 #include <netinet/in.h>
167 #include <net/if.h>
168])
169
170AC_CHECK_HEADER(netinet/if_ether.h,
171        AC_DEFINE(HAVE_NETINET_IF_ETHER_H,1,[has netinet/if_ether.h]),,[
172 #include <sys/types.h>
173 #include <sys/socket.h>
174 #include <netinet/in.h>
175 #include <net/if.h>
176])
177
178AC_CHECK_HEADER(net/if_arp.h,
179        AC_DEFINE(HAVE_NET_IF_ARP_H,1,[has net/if_arp.h]),,[
180 #include <sys/types.h>
181 #include <sys/socket.h>
182 #include <netinet/in.h>
183 #include <net/if.h>
184])
185
186# Check for sdl_len in sockaddr_dl - sockaddr_dl is used on BSD systems
187if test "$libtrace_netpacket_packet_h" != "true"; then
188        AC_CHECK_MEMBER([struct sockaddr_dl.sdl_len],
189                AC_DEFINE(HAVE_SDL_LEN,1,[Has sdl_len in sockaddr_dl]),,[
190 #include <sys/types.h>
191 #include <sys/socket.h>
192 #include <net/if_dl.h>
193                ])
194fi
195
196# Checking for the right bpf header to include
197AC_CHECK_HEADER(pcap-bpf.h)
198AC_CHECK_HEADER(net/bpf.h)
199
200# Checking for libgdc
201AC_CHECK_HEADER(gdc.h,AC_DEFINE(HAVE_LIBGDC,1,[has gdc.h]))
202
203# Check for libwandio (no longer bundled with libtrace)
204AC_CHECK_LIB(wandio,wandio_create,wandiofound=1,wandiofound=0)
205if test "$wandiofound" = 0; then
206        AC_MSG_ERROR(libwandio is required to compile libtrace. If you have installed it in a non-standard location please use LDFLAGS to specify the location of the library. WANDIO can be obtained from http://research.wand.net.nz/software/libwandio.php)
207else
208        LIBTRACE_LIBS="$LIBTRACE_LIBS -lwandio"
209        TOOLS_LIBS="$TOOLS_LIBS -lwandio"
210        AC_DEFINE([HAVE_LIBWANDIO],1,[compile with libwandio support])
211fi
212
213AC_CHECK_LIB(crypto, EVP_EncryptInit_ex, cryptofound=1, cryptofound=0)
214if test "$cryptofound" = 1; then
215        AC_CHECK_HEADER(openssl/evp.h, cryptofound=1, cryptofound=0)
216fi
217
218# Check for libpcap
219AC_CHECK_LIB(pcap,pcap_next_ex,pcapfound=1,pcapfound=0)
220AC_CHECK_LIB(pcap,pcap_create,pcapcreate=1,pcapcreate=0)
221AC_CHECK_LIB(pcap,pcap_set_immediate_mode,pcapimmediate=1,pcapimmediate=0)
222AC_CHECK_DECLS([BIOCSETIF],,,[
223#include <sys/types.h>
224#include <sys/time.h>
225#include <sys/ioctl.h>
226#include <net/bpf.h>
227])
228
229AC_ARG_ENABLE(memory-debugging,
230                AS_HELP_STRING(--enable-memory-debugging, prints internal memory statistics),[
231                if test "$HAVE_TLS" = 1
232                then
233                    AC_DEFINE([ENABLE_MEM_STATS], 1, [print debug memory statistics])
234                fi
235],[])
236
237# Configure options for man pages
238AC_ARG_WITH(man,
239            AS_HELP_STRING(--with-man,install man pages by default),[
240             if test "$withval" = yes
241             then
242                     MANPAGES="docs/man/man3/[a-zA-Z]*.3"
243             else
244                     MANPAGES=""
245             fi
246])
247
248# Complain if we didn't find a suitable libpcap
249if test "$pcapfound" = 0; then
250        AC_MSG_ERROR(libpcap0.8 or greater is required to compile libtrace. If you have installed it in a non-standard location please use LDFLAGS to specify the location of the library)
251else
252        TOOLS_LIBS="$TOOLS_LIBS -lpcap"
253        LIBTRACE_LIBS="$LIBTRACE_LIBS -lpcap"
254        AC_DEFINE([HAVE_LIBPCAP],1,[compile with libpcap support])
255
256        LIBS="-lpcap"
257        AC_CHECK_FUNCS(pcap_inject pcap_sendpacket pcap_setnonblock)
258        LIBS=""
259
260fi
261
262if test "$pcapcreate" = 1; then
263        AC_DEFINE([HAVE_PCAP_CREATE],1,[compile with libpcap 1.0 support])
264fi
265
266if test "$pcapimmediate" = 1; then
267        AC_DEFINE([HAVE_PCAP_IMMEDIATE],1,[able to use pcap_set_immediate_mode])
268fi       
269
270# Configure options for use of DAG cards
271# Originally borrowed from libpcap, but extended quite a bit :)
272# More details on how this check works:
273#       http://wand.net.nz/trac/libtrace/wiki/DAGNotes
274
275AC_ARG_WITH(dag,
276            AS_HELP_STRING(--with-dag[=DIR],include DAG live capture support (located in directory DIR, if supplied)),
277[
278        if test "$withval" = no
279        then
280                want_dag=no
281        elif test "$withval" = yes
282        then
283                want_dag=yes
284                dag_root=/usr/local/dag
285        else
286                want_dag=yes
287                dag_root=$withval
288        fi
289],[
290        #
291        # Use DAG API if present, otherwise don't
292        #
293        want_dag=ifpresent
294        dag_root=/usr/local/dag
295])
296
297# DAG 3.0 actually puts header files and shared libraries into sensible
298# places now, so we should be able to do a simple CHECK_LIB to see if
299# they're there!
300
301# Addendum: It turns out DAG 2.5 does this too, so we'll match DAG2.5 in here
302# also. This isn't such a bad thing, the DAG2.5 API is essentially the same as
303# DAG 3.0 and libtrace will use the same format_dagXX source for both
304libtrace_dag=false
305libtrace_dag_version=none
306
307if test "$with_dag" != no; then
308        AC_CHECK_LIB(dag, dag_open, dag_found=1, dag_found=0)
309        if test "$dag_found" = 1; then
310                ADD_LIBS="$ADD_LIBS -ldag"
311                LIBTRACE_LIBS="$LIBTRACE_LIBS -ldag"
312                AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
313                AC_DEFINE(HAVE_DAG,1,[conditional for building with DAG live capture support])
314                libtrace_dag=true
315               
316                AC_DEFINE(DAG_VERSION,25,[defines the DAG driver version])
317                libtrace_dag_version=25
318
319                AC_CHECK_HEADERS(dag_config_api.h,[csapi_found=1],,)
320                if test "$csapi_found" = 1; then
321                        LIBTRACE_LIBS="$LIBTRACE_LIBS -ldagconf"
322                fi
323        fi     
324fi
325
326# TODO: turn the test part of the next block into a function, so it can be
327# called multiple times for $dag_root, /root/dag, /usr/local/lib
328dag_drv_v="DAG not present"
329
330# Now check for 2.4 DAG drivers which don't install as cleanly!
331if test "$with_dag" != no -a "$libtrace_dag" = false; then
332        AC_MSG_CHECKING(whether we have DAG 2.4 API instead)
333
334        if test -r "$dag_root/lib"; then
335                dag_lib_dir="$dag_root/lib"
336        else
337                dag_lib_dir="$dag_root"
338        fi
339       
340        if test -r "$dag_root/include"; then
341                dag_tools_dir="$dag_root/tools"
342                dag_include_dir="$dag_root/include"
343        else
344                dag_tools_dir="$dag_root"
345                dag_include_dir="$dag_root"
346        fi
347
348        if test -r "$dag_include_dir/dagapi.h" -a -r "$dag_lib_dir/libdag.a";
349        then
350                ADD_INCLS="$ADD_INCLS -I $dag_include_dir"
351                ADD_LIBS="$ADD_LIBS -ldag"
352                ADD_LDFLAGS="$ADD_LDFLAGS -L$dag_lib_dir"
353                DAG_TOOLS_DIR=$dag_tools_dir
354                AC_SUBST([DAG_TOOLS_DIR])
355                libtrace_dag=true
356               
357                AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
358                AC_DEFINE(HAVE_DAG,1,[conditional for building with DAG live capture support])
359                AC_DEFINE(DAG_VERSION, 24, [defines the DAG driver version])
360                libtrace_dag_version=24
361        else
362                if test "$want_dag" = yes; then
363                        AC_MSG_ERROR(DAG API not found under directory $dag_root
364; use --without-dag)
365                fi
366                libtrace_dag=false
367        fi
368        AC_MSG_RESULT($libtrace_dag)
369
370fi
371
372# Try to determine the DAG driver version
373#if test x"$libtrace_dag" = xtrue; then
374#       dag_drv_v="Unknown"
375#       files=`locate /usr/*dag*/VERSION`
376#       file_count=0
377#
378#       for i in $files; do
379#                if $file_count > 0; then
380#                        dag_drv_v="Indeterminate"
381#                        break
382#                fi
383#                dag_drv_v=`cat $i`
384#                file_count=$file_count+1
385#        done
386#fi
387#DAG_VERSION_NUM=$dag_drv_v
388
389# Check for DPDK
390AC_ARG_WITH(dpdk,
391            AS_HELP_STRING(--with-dpdk,include DPDK live capture support (From either the RTE_SDK/_TARGET environment variable or the dpdk-dev package)),
392[
393        if test "$withval" = no
394        then
395            want_dpdk=no
396        else
397            want_dpdk=ifpresent
398        fi
399],[
400        # Default to building without DPDK format
401        want_dpdk=no
402])
403
404libtrace_dpdk=false
405if test "$want_dpdk" != no; then
406        # So instead simply check for existence
407        if test "$RTE_SDK" != ""; then
408                AC_CHECK_FILE("$RTE_SDK/$RTE_TARGET/lib/libintel_dpdk.a", dpdk_found=":libintel_dpdk.a", dpdk_found=0)
409        fi
410        # DPDK 2.1.0+ renames this to libdpdk from libintel_dpdk
411        if test "$dpdk_found" = 0 -a "$RTE_SDK" != ""; then
412                AC_CHECK_FILE("$RTE_SDK/$RTE_TARGET/lib/libdpdk.a", dpdk_found=":libdpdk.a", dpdk_found=0)
413        fi
414        if test "$dpdk_found" = 0 -a "$RTE_SDK" != ""; then
415                AC_CHECK_FILE("$RTE_SDK/$RTE_TARGET/lib/libdpdk.so", dpdk_found="dpdk", dpdk_found=0)
416        fi
417        if test "$dpdk_found" != 0 -a "$RTE_SDK" != ""; then
418                # Save these now so that they can be re-exported later
419                AC_SUBST([RTE_TARGET])
420                AC_SUBST([RTE_SDK])
421                # Force dpdk library to be statically linked to allow compiler optimisations
422                LIBTRACE_LIBS="$LIBTRACE_LIBS -Wl,--whole-archive -Wl,-l$dpdk_found -Wl,--no-whole-archive -Wl,-lm"
423                AC_DEFINE(HAVE_DPDK,1,[conditional for building with DPDK live capture support])
424                libtrace_dpdk=true
425        fi
426        if test "$RTE_SDK" = ""; then
427                AC_MSG_NOTICE([No RTE_SDK given, checking for system dpdk-dev package])
428                # Search the system, maybe it is installed? Ethdev is one of the main libraries
429                AC_CHECK_LIB(ethdev, rte_eth_dev_configure, dpdk_found="system", dpdk_found=0)
430                # We also need to check that rte.vars.mk is installed from dpdk-dev (as well as libdpdk-dev)
431                if test "$dpdk_found" != 0 -a -e /usr/share/dpdk/mk/rte.vars.mk ; then
432                        RTE_TARGET="x86_64-default-linuxapp-gcc"
433                        RTE_SDK="/usr/share/dpdk/"
434                        RTE_INCLUDE="/usr/include/dpdk"
435                        AC_SUBST([RTE_TARGET])
436                        AC_SUBST([RTE_SDK])
437                        AC_SUBST([RTE_INCLUDE])
438                        # include libethdev this is part of DPDK
439                        LIBTRACE_LIBS="$LIBTRACE_LIBS -lethdev"
440                        # Include all rte libs note we need to escape '[' and ']'
441                        LIBTRACE_LIBS="$LIBTRACE_LIBS $(ldconfig -p | sed 's/.*lib\([[^.]]*\).*/-l\1/' | grep rte_ | tr '\n' ' ')"
442                        AC_MSG_NOTICE([Building against system DPDK])
443
444                        AC_DEFINE(HAVE_DPDK,1,[conditional for building with DPDK live capture support])
445                        libtrace_dpdk=true
446                fi
447        fi
448fi
449
450# Check for PACKET_FANOUT (borrowed from Suricata)
451AC_CHECK_DECL([PACKET_FANOUT],
452        AC_DEFINE([HAVE_PACKET_FANOUT],[1],
453        [Recent packet fanout support is available]),
454        [],
455        [[#include <linux/if_packet.h>]])
456
457# If we use DPDK we might be able to use libnuma
458AC_CHECK_LIB(numa, numa_node_to_cpus, have_numa=1, have_numa=0)
459
460# Checks for various "optional" libraries
461AC_CHECK_LIB(pthread, pthread_create, have_pthread=1, have_pthread=0)
462
463AC_CHECK_LIB(pthread, pthread_setname_np, have_pthread_setname_np=1, have_pthread_setname_np=0)
464
465# Check for ncurses
466
467# These libraries have to be explicitly linked in OpenSolaris
468AC_SEARCH_LIBS(getservent, socket, have_socket=1, have_socket=0, -lnsl)
469LIBS=
470
471AC_SEARCH_LIBS(inet_ntop, nsl, have_nsl=1, have_nsl=0, -lsocket)
472LIBS=
473
474# Check to see if we have libdl - *BSD has built-in libdl
475AC_SEARCH_LIBS(dlopen,dl, dlfound=1,dlfound=0 )
476LIBS=
477
478# Check for clock_gettime
479AC_CHECK_LIB(rt, clock_gettime, have_clock_gettime=1, have_clock_gettime=0)
480LIBS=
481
482if test "$have_numa" = 1; then
483        LIBTRACE_LIBS="$LIBTRACE_LIBS -lnuma"
484        AC_DEFINE(HAVE_LIBNUMA, 1, [Set to 1 if libnuma is supported])
485        with_numa=yes
486else
487        AC_DEFINE(HAVE_LIBNUMA, 0, [Set to 1 if libnuma is supported])
488        with_numa=no
489fi
490
491if test "$dlfound" = 0; then
492        AC_MSG_ERROR("Unable to find dlopen. Please use LDFLAGS to specify the location of libdl and re-run configure")
493fi
494
495if test "$ac_cv_search_dlopen" != "none required"; then
496        LIBPKTDUMP_LIBS="$LIBPKTDUMP_LIBS $ac_cv_search_dlopen"
497        if test "$dpdk_found" != 0; then
498                LIBTRACE_LIBS="$LIBTRACE_LIBS -Wl,$ac_cv_search_dlopen"
499        fi
500fi
501
502if test "$have_pthread" = 1; then
503        AC_DEFINE(HAVE_LIBPTHREAD, 1, [Set to 1 if pthreads are supported])
504fi
505
506if test "$have_pthread_setname_np" = 1; then
507        AC_DEFINE(HAVE_PTHREAD_SETNAME_NP, 1, [Set to 1 if pthread_setname_np is found])
508fi
509
510if test "$cryptofound" = 1; then
511        AC_DEFINE(HAVE_LIBCRYPTO, 1, [Set to 1 if libcrypto is available])
512        TOOLS_LIBS="$TOOLS_LIBS -lcrypto"
513        have_crypto=yes
514else
515        have_crypto=no
516fi
517
518if test "$have_nsl" = 1; then
519        if test "$ac_cv_search_inet_ntop" != "none required"; then
520                LIBTRACE_LIBS="$LIBTRACE_LIBS $ac_cv_search_inet_ntop"
521                LIBPKTDUMP_LIBS="$LIBPKTDUMP_LIBS $ac_cv_search_inet_ntop"
522        fi
523fi
524
525if test "$have_socket" = 1; then
526        if test "$ac_cv_search_getservent" != "none required"; then
527                LIBTRACE_LIBS="$LIBTRACE_LIBS $ac_cv_search_getservent"
528                LIBPKTDUMP_LIBS="$LIBPKTDUMP_LIBS $ac_cv_search_getservent"
529        fi
530fi
531
532
533if test "$have_clock_gettime" = 1; then
534        LIBTRACE_LIBS="$LIBTRACE_LIBS -lrt"
535        AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Set to 1 if clock_gettime is supported])
536        with_clock_gettime=yes
537else
538        AC_DEFINE(HAVE_CLOCK_GETTIME, 0, [Set to 1 if clock_gettime is supported])
539        with_clock_gettime=no
540fi
541
542
543# Stupid AC_SEARCH_LIB appends stuff to LIBS even when I don't want it to, so
544# just set libs to null here to avoid linking against them by default
545LIBS=
546
547# For now, the user has to explicitly ask for the LLVM stuff, as it's a bit
548# rough around the edges :(
549AC_ARG_WITH([llvm],
550        [AC_HELP_STRING([--with-llvm],
551                [support Just In Time compiler])],
552        use_llvm="yes",
553        use_llvm="no")
554JIT=no
555
556# Search for LLVM and the libraries that it requires
557if (test "$use_llvm" != "no"); then
558        AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
559
560        # XXX Hard coding the path is REALLY bad.
561        # llvm-gcc is installed in a stupid place in Debian / Ubuntu. Hard luck
562        # if you've installed it somewhere custom.
563        # Hopefully in future we can replace this with clang, which may or may
564        # not be installed somewhere intelligent.
565        AC_PATH_PROG(LLVM_GCC, llvm-gcc, no, /usr/lib/llvm/llvm/gcc-4.2/bin)
566
567        AC_LANG_PUSH([C++])
568        AC_CHECK_HEADERS([boost/lexical_cast.hpp], boost="yes", boost="no")
569        AC_LANG_POP([C++])
570
571               
572        if test "$boost" = "no"; then
573                AC_MSG_NOTICE([Unabled to find boost libraries.  JIT support disabled.])
574                JIT=no
575        elif test "$LLVM_CONFIG" = "no" ; then
576                AC_MSG_NOTICE([Unable to find llvm-config.  JIT support disabled.])
577                JIT=no
578        elif test "$LLVM_GCC" = "no"; then
579                AC_MSG_NOTICE([Unable to find llvm-gcc.  JIT support disabled.])
580                JIT=no
581        else
582                LIBCXXFLAGS="`$LLVM_CONFIG --cxxflags` $CXXFLAGS"
583                LIBTRACE_LIBS="$LIBRACE_LIBS `$LLVM_CONFIG --libs all`";
584                LDFLAGS="`$LLVM_CONFIG --ldflags` $LDFLAGS";
585                JIT=yes
586                AC_DEFINE(HAVE_LLVM, 1, [Set to 1 if you have LLVM installed])
587        fi
588fi
589
590AC_ARG_WITH([ncurses],
591        AC_HELP_STRING([--with-ncurses], [build tracetop (requires ncurses)]))
592
593AS_IF([test "x$with_ncurses" != "xno"],
594        [AC_SEARCH_LIBS(mvprintw, ncurses, have_ncurses=yes, have_ncurses=no)
595         LIBS=
596        ], [have_ncurses=no])
597
598AS_IF([test "x$have_ncurses" = "xyes"], [
599        if test "$ac_cv_search_mvprintw" != "none required"; then
600                TOOLS_LIBS="$TOOLS_LIBS $ac_cv_search_mvprintw"
601        fi
602        AC_DEFINE(HAVE_NCURSES, 1, "Compiled with ncurses support")
603        with_ncurses=yes],
604
605       
606        [AS_IF([test "x$with_ncurses" = "xyes"],
607                [AC_MSG_ERROR([ncurses requested but not found])])
608        AC_DEFINE(HAVE_NCURSES, 0, "Compiled with ncurses support")
609        with_ncurses=no]
610)
611
612# Define automake conditionals for use in our Makefile.am files
613AM_CONDITIONAL([HAVE_BPF_CAPTURE], [test "$ac_cv_have_decl_BIOCSETIF" = yes ])
614AM_CONDITIONAL([HAVE_DAG], [test "$libtrace_dag" = true])
615AM_CONDITIONAL([HAVE_DPDK], [test "$libtrace_dpdk" = true])
616AM_CONDITIONAL([DAG2_4], [test "$libtrace_dag_version" = 24])
617AM_CONDITIONAL([DAG2_5], [test "$libtrace_dag_version" = 25])
618AM_CONDITIONAL([HAVE_NETPACKET_PACKET_H], [test "$libtrace_netpacket_packet_h" = true])
619AM_CONDITIONAL([HAVE_LIBGDC], [test "$ac_cv_header_gdc_h" = yes])
620AM_CONDITIONAL([HAVE_LLVM], [test "x$JIT" != "xno" ])
621AM_CONDITIONAL([HAVE_NCURSES], [test "x$with_ncurses" != "xno"])
622
623# Check for miscellaneous programs
624AC_CHECK_PROG([libtrace_doxygen], [doxygen], [true], [false])
625
626AM_CONDITIONAL(HAS_DOXYGEN, [test x"$libtrace_doxygen" = xtrue])
627
628# Set all our output variables
629AC_SUBST([LIBTRACE_LIBS])
630AC_SUBST([LIBPKTDUMP_LIBS])
631AC_SUBST([TOOLS_LIBS])
632#AC_SUBST([ADD_LIBS])
633AC_SUBST([ADD_LDFLAGS])
634AC_SUBST([ADD_INCLS])
635AC_SUBST([LTLIBOBJS])
636AC_SUBST([MANPAGES])
637AC_SUBST([PACKAGE_VERSION])
638AC_SUBST([LIBTRACE_MAJOR])
639AC_SUBST([LIBTRACE_MID])
640AC_SUBST([LIBTRACE_MINOR])
641AC_SUBST([DAG_VERSION_NUM])
642AC_SUBST([HAVE_BPF_CAPTURE])
643AC_SUBST([HAVE_LIBGDC])
644AC_SUBST([HAVE_LLVM])
645AC_SUBST([HAVE_NCURSES])
646AC_SUBST([LIBCFLAGS])
647AC_SUBST([LIBCXXFLAGS])
648
649
650# Finally, output our Makefiles
651AC_OUTPUT
652
653# Function for reporting whether an option was set or not
654reportopt() {
655        if test x"$2" = xtrue -o x"$2" = xyes; then
656                AC_MSG_NOTICE([$1: Yes])
657        else
658                AC_MSG_NOTICE([$1: No])
659        fi
660}
661
662
663# Report which configure options were set
664echo
665AC_MSG_NOTICE([Libtrace version $PACKAGE_VERSION])
666if test "$pcapcreate" = 1; then
667        AC_MSG_NOTICE([Compiled with PCAP support: >= 1.0])
668else
669        AC_MSG_NOTICE([Compiled with PCAP support: < 1.0])
670fi
671
672if test x"$libtrace_dag" = xtrue; then
673        if test "$libtrace_dag_version" = 24; then
674                AC_MSG_NOTICE([Compiled with DAG live capture support: 2.4])
675        elif test "$libtrace_dag_version" = 30; then
676                AC_MSG_NOTICE([Compiled with DAG live capture support: 3.0])
677        else
678                AC_MSG_NOTICE([Compiled with DAG live capture support: 2.5])
679        fi     
680else
681        AC_MSG_NOTICE([Compiled with DAG live capture support: No])
682fi
683
684if test x"$libtrace_dpdk" = xtrue; then
685        AC_MSG_NOTICE([Compiled with DPDK live capture support: Yes])
686        reportopt "Compiled with DPDK trace NUMA support" $with_numa
687        reportopt "Compiled with clock_gettime support" $with_clock_gettime
688elif test x"$want_dpdk" != "xno"; then
689#   We don't officially support DPDK so only report failure if the user
690#   explicitly asked for DPDK. That way, we can hopefully keep it hidden
691#   from most users for now...
692
693        AC_MSG_NOTICE([Compiled with DPDK live capture support: No])
694        AC_MSG_NOTICE([Note: Requires DPDK v1.5 or newer])
695fi
696reportopt "Compiled with LLVM BPF JIT support" $JIT
697reportopt "Building man pages/documentation" $libtrace_doxygen
698reportopt "Building tracetop (requires libncurses)" $with_ncurses
699reportopt "Building traceanon with CryptoPan (requires libcrypto and openssl/evp.h)" $have_crypto
700
701# Report any errors relating to missing bison, flex, etc.
702echo
703ac_cv_errcount=0;
704if test -z "$YACC"; then
705        AC_MSG_WARN(bison or yacc not found. Please install bison before continuing)
706        ac_cv_errcount=$((ac_cv_errcount + 1))
707fi
708
709if test "x$LEX" != xflex -a "x$LEX" != xlex; then
710        AC_MSG_WARN(flex or lex not found. Please install flex before continuing)
711        ac_cv_errcount=$((ac_cv_errcount + 1))
712fi
713
714if test $ac_cv_errcount -gt 0; then
715        AC_MSG_ERROR(Critical packages are missing and compilation will fail. Please install the packages listed above and rerun ./configure)
716fi
717
Note: See TracBrowser for help on using the repository browser.