1dnl
2dnl	aprsc
3dnl
4dnl	(c) Matti Aarnio, OH2MQK,  <oh2mqk@sral.fi>
5dnl	(c) Heikki Hannikainen, OH7LZB
6dnl
7dnl	This program is licensed under the BSD license, which can be found
8dnl	in the file LICENSE.
9dnl
10
11dnl Process this file with autoconf to produce a configure script.
12AC_INIT
13AC_CONFIG_SRCDIR([aprsc.c])
14
15dnl For automake
16VERSION="`cat VERSION`"
17PACKAGE=aprsc
18dnl AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
19
20AC_PROG_MAKE_SET
21
22AC_CONFIG_HEADERS([ac-hdrs.h])
23
24dnl Checks for programs.
25AC_PROG_CC
26AC_PROG_GCC_TRADITIONAL
27
28
29dnl AC_PATH_PROG(LD, ld, ld)dnl
30if test -z "$LD" ; then
31  LD="$CC"
32fi
33AC_SUBST(LD,"$LD")
34
35dnl If on i686, we'll need -march=i686 to get the atomic instructions
36dnl On FreeBSD, the architecture is i386.
37MACHINE="`uname -m`"
38if test "$MACHINE" == "i686" -o "$MACHINE" == "i386"; then
39  CFLAGS_ARCH="-march=i686"
40fi
41OS="`uname`"
42if test "$OS" == "Darwin"; then
43  CFLAGS_ARCH=""
44fi
45AC_SUBST(CFLAGS_ARCH)
46
47dnl Check for GNU make
48AX_CHECK_GNU_MAKE()
49
50AC_ARG_ENABLE([static-libevent],
51	[AS_HELP_STRING([--enable-static-libevent=path],
52	[link against static libevent.a @<:@default=do not@:>@])],
53	[static_libevent=$enableval],
54	[])
55
56dnl Check for libevent
57AC_CHECK_HEADER([event2/event.h],,[AC_MSG_ERROR([libevent2 header not found - remember to install the development package too])])
58AC_CHECK_HEADER([event2/http.h],,[AC_MSG_ERROR([libevent2 http header not found - remember to install the development package too])])
59AC_CHECK_HEADER([event2/buffer.h],,[AC_MSG_ERROR([libevent2 buffer header not found - remember to install the development package too])])
60AC_SUBST(LIBEVENT)
61AC_CHECK_LIB(event,event_base_new,[LIBEVENT="-levent"],[AC_MSG_ERROR([libevent2 not found])])
62
63AS_IF([test "x$static_libevent" != x],
64	[LIBEVENT="$static_libevent"])
65
66dnl Check for POSIX capabilities
67AC_CHECK_HEADERS([sys/capability.h], AC_DEFINE([HAVE_CAPABILITY_H], [], [POSIX capabilities]))
68AC_CHECK_HEADERS([sys/prctl.h], AC_DEFINE([HAVE_PRCTL_H], [], [Linux process control prctl.h]))
69AC_SUBST(LIBCAP)
70AC_CHECK_LIB(cap,cap_init,[LIBCAP="-lcap"])
71
72dnl Check for
73AC_CHECK_HEADERS([sys/eventfd.h], AC_DEFINE([HAVE_EVENTFD_H], [], [Linux event fd support]))
74
75dnl Checks for system headers
76AC_CHECK_HEADERS([alloca.h],    AC_DEFINE([HAVE_ALLOCA_H]))
77AC_CHECK_HEADERS([poll.h],      AC_DEFINE([HAVE_POLL_H]))
78dnl AC_CHECK_FUNC(ppoll,,[Probably have ppoll of Linux])
79AC_CHECK_HEADERS([sys/epoll.h], AC_DEFINE([HAVE_SYS_EPOLL_H]))
80
81dnl SCTP checks
82AC_CHECK_HEADERS([netinet/sctp.h], AC_DEFINE([HAVE_NETINET_SCTP_H]))
83
84dnl Checks for libraries.
85
86dnl Checks for library functions.
87AC_SUBST(LIBM)
88AC_CHECK_FUNCS(atan2f,,
89	       AC_CHECK_LIB(m, atan2f,
90			    [LIBM="-lm"]))
91
92AC_SUBST(LIBPTHREAD)
93dnl AC_CHECK_FUNCS(pthread_exit,,
94	       AC_CHECK_LIB(pthread, pthread_exit,
95			    [LIBPTHREAD="-lpthread"])
96dnl)
97
98dnl Solaris resolver solution:
99AC_SUBST(LIBGETNAMEINFO)
100AC_CHECK_FUNCS(getnameinfo,,
101	       AC_CHECK_LIB(nsl, getnameinfo,
102			    [LIBGETNAMEINFO="-lnsl"]))
103
104dnl
105dnl We check for various libraries
106dnl  - SysVr4 style of "-lsocket" at first (unless in libc)
107dnl    The hallmark is  connect()  routine (we presume)
108dnl
109AC_SUBST(LIBSOCKET)dnl
110ac_cv_libsocket_both=1
111AC_CHECK_FUNC(connect, ac_cv_libsocket_both=0)
112AC_CHECK_FUNC(gethostbyname, ac_cv_libsocket_both=0)
113if test "$ac_cv_libsocket_both" = 1 ; then
114  # Check cache
115  if test "$ac_cv_func_socket_lxnet" = yes ; then
116    AC_MSG_RESULT([need -lxnet library (cached)])
117    LIBSOCKET="-lnsl -lsocket -lxnet"
118  else
119  if test "$ac_cv_func_socket_lsocket" = yes ; then
120    AC_MSG_RESULT([need -lsocket library (cached)])
121    LIBSOCKET="-lsocket"
122    if test "$ac_cv_func_gethostbyname_lnsl" = yes ; then
123        LIBSOCKET="-lnsl -lsocket"
124    fi
125  else
126    # Well, will this work ?  SysVR4, but not Sun Solaris ?
127    AC_CHECK_LIB(xnet, connect, [LIBSOCKET="-lnsl -lsocket -lxnet"
128                                 ac_cv_func_socket_lsocket=no
129                                 ac_cv_func_socket_lxnet=yes],[
130      AC_CHECK_LIB(socket, connect, [LIBSOCKET="-lsocket"
131                                     ac_cv_func_socket_lsocket=yes],
132                                     ac_cv_func_socket_lsocket=no)
133      if test "$ac_cv_func_socket_lsocket" = yes ; then
134        t_oldLibs="$LIBS"
135        LIBS="$LIBS -lsocket"
136        AC_TRY_LINK([],[gethostbyname();], ,[
137          LIBS="$LIBS -lnsl" # Add this Solaris library..
138          AC_TRY_LINK([],[gethostbyname();],[
139                        LIBSOCKET="-lsocket -lnsl"
140                        ac_cv_func_gethostbyname_lnsl=yes
141                ], [
142                   AC_MSG_ERROR([Weird, '$LIBS' not enough to find  gethostnyname() ?!])
143                ])
144          ])
145        LIBS="$t_oldLibs"
146      fi
147    ])
148  fi
149  fi
150fi
151
152# See about the routines that possibly exist at the libraries..
153LIBS="$t_oldLibs $LIBSOCKET"
154AC_CHECK_FUNCS(socket socketpair)
155LIBS="$t_oldLibs"
156
157if test "$ac_cv_func_socket" = no -a "$LIBSOCKET" != ""; then
158  LIBS="$LIBS $LIBSOCKET"
159  AC_TRY_LINK([],[socket();], ac_cv_func_socket=yes)
160  if test $ac_cv_func_socket = yes; then
161    AC_DEFINE(HAVE_SOCKET)
162    AC_MSG_RESULT([Has  socket()  when using  $LIBSOCKET])
163  fi
164  LIBS="$t_oldLibs"
165fi
166if test "$ac_cv_func_socketpair" = no -a "$LIBSOCKET" != ""; then
167  LIBS="$LIBS $LIBSOCKET"
168  AC_TRY_LINK([],[socketpair();], ac_cv_func_socketpair=yes)
169  if test $ac_cv_func_socketpair = yes; then
170    AC_DEFINE(HAVE_SOCKETPAIR)
171    AC_MSG_RESULT([Has  socketpair()  when using  $LIBSOCKET])
172  fi
173  LIBS="$t_oldLibs"
174fi
175
176ac_with_ipv6_replacement_libc=0
177AC_ARG_WITH(ipv6-replacement-libc, [  --with-ipv6-replacement-libc If system has broken  getaddrinfo() and friends],
178        ac_with_ipv6_replacement_libc=1)
179
180LIBS="$LIBSOCKET $LIBS"
181AC_CHECK_FUNCS(getnameinfo gai_strerror inet_ntop inet_pton)
182LIBS="$t_oldLibs"
183
184
185t_oldLibs="$LIBS"
186LIBS="$LIBS $LIBSOCKET"
187
188#  Following stuff may exist in our LIBC, or in separate -linet6
189# AC_CHECK_FUNCS(inet_ntop inet_pton getaddrinfo getnameinfo gai_strerror)
190#  If not found in LIBC, try to use  -linet6,  if it fails too,
191#  THEN call the AC_REPLACE_FUNCS()
192if test "$ac_cv_func_gai_strerror" = no ; then
193    LIBS="$LIBS -linet6"
194    AC_TRY_LINK([],[gai_strerror();], ac_cv_func_gai_strerror=yes)
195    LIBS="$t_oldLibs"
196    if test "$ac_cv_func_gai_strerror" = yes; then
197        LIBSOCKET="$LIBSOCKET -linet6"
198        AC_MSG_RESULT([Has IPv6 API  gai_strerror()  when using  $LIBSOCKET])
199    else
200      AC_LIBOBJ([inet_ntop])
201      AC_LIBOBJ([inet_pton])
202      AC_LIBOBJ([getnameinfo])
203      AC_LIBOBJ([gai_strerror])
204    fi
205fi
206
207LIBS="$t_oldLibs"
208
209AC_SUBST(LIBS,"$LIBS")
210
211dnl Check for the __sync_fetch_and_add builtin
212dnl the check needs to use long long x, since we're incrementing a long long in the stats.
213AC_CACHE_CHECK([for __sync_fetch_and_add], ac_cv_func_sync_fetch_and_add,
214[AC_TRY_LINK([],[long long x;__sync_fetch_and_add(&x,1);],ac_cv_func_sync_fetch_and_add=yes,ac_cv_func_sync_fetch_and_add=no)])
215if test "$ac_cv_func_sync_fetch_and_add" = yes; then
216  AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD,1,[Define if you have the __sync_fetch_and_add function])
217fi
218
219dnl Check for clock_gettime, and a library to have it
220AC_SUBST(LIBRT)
221AC_SEARCH_LIBS([clock_gettime], [rt], [
222  AC_DEFINE(HAVE_CLOCK_GETTIME, 1,[Have clock_gettime])
223])
224
225if test "$ac_cv_search_clock_gettime" = "-lrt"; then
226  LIBRT="-lrt"
227fi
228
229dnl Check for setenv and putenv, some might not have one
230AC_CHECK_FUNCS(setenv putenv)
231
232dnl Check for zlib
233AC_SUBST(LIBZ)
234AC_SEARCH_LIBS([deflate], [z], [
235  AC_CHECK_HEADERS([zlib.h], AC_DEFINE(HAVE_LIBZ, 1, [Have libz]))
236])
237
238if test "$ac_cv_search_deflate" = "-lz"; then
239  LIBZ="-lz"
240fi
241
242dnl Check for openssl
243AC_ARG_WITH(openssl, [  --with-openssl[=DIR]    Include OpenSSL support (requires OpenSSL >= 0.9.7)], [with_openssl=$withval], [with_openssl=no])
244AC_SUBST(LIBSSL)
245AC_SUBST(LIBCRYPTO)
246if test "$with_openssl" != "no" ; then
247  AC_CHECK_HEADERS([openssl/ssl.h])
248  AC_SEARCH_LIBS(TLSv1_server_method, ssl, AC_DEFINE(HAVE_TLSV1_SERVER_METHOD, 1, [OpenSSL 0.9.7 or later]))
249  AC_SEARCH_LIBS(X509_free, crypto, AC_DEFINE(HAVE_X509_FREE, 1, [OpenSSL 0.9.7 or later]))
250
251  if test "$ac_cv_search_TLSv1_server_method" = "-lssl"; then
252    LIBSSL="-lssl"
253  fi
254  if test "$ac_cv_search_X509_free" = "-lcrypto"; then
255    LIBCRYPTO="-lcrypto"
256  fi
257fi
258
259dnl Output files
260AC_CONFIG_FILES([Makefile])
261AC_OUTPUT
262
263dnl If GNU make is not the default, deal with it
264if test "$_cv_gnu_make_command" != "" -a "$_cv_gnu_make_command" != "make" ; then
265	mv Makefile GNUmakefile
266	echo all clean distclean install: > Makefile ;
267	echo \	$_cv_gnu_make_command \$@ >> Makefile;
268fi
269
270