chiark / gitweb /
svc/watch.in: Check that the crypto is working in adopted peers.
[tripe] / configure.ac
1 dnl -*-autoconf-*-
2 dnl
3 dnl Configuration script for TrIPE
4 dnl
5 dnl (c) 2001 Straylight/Edgeware
6 dnl
7
8 dnl ----- Licensing notice --------------------------------------------------
9 dnl
10 dnl This file is part of Trivial IP Encryption (TrIPE).
11 dnl
12 dnl TrIPE is free software; you can redistribute it and/or modify
13 dnl it under the terms of the GNU General Public License as published by
14 dnl the Free Software Foundation; either version 2 of the License, or
15 dnl (at your option) any later version.
16 dnl
17 dnl TrIPE is distributed in the hope that it will be useful,
18 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
19 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 dnl GNU General Public License for more details.
21 dnl
22 dnl You should have received a copy of the GNU General Public License
23 dnl along with TrIPE; if not, write to the Free Software Foundation,
24 dnl Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 dnl--------------------------------------------------------------------------
27 dnl Initialization.
28
29 mdw_AUTO_VERSION
30 AC_INIT([tripe], AUTO_VERSION, [mdw@distorted.org.uk])
31 AC_CONFIG_SRCDIR([server/tripe.h])
32 AC_CONFIG_AUX_DIR([config])
33 AM_INIT_AUTOMAKE([foreign])
34
35 AC_PROG_CC
36 AM_PROG_CC_C_O
37 AX_CFLAGS_WARN_ALL
38 AC_CANONICAL_HOST
39 AM_PROG_LIBTOOL
40
41 AC_CHECK_PROGS([AUTOM4TE], [autom4te])
42
43 dnl--------------------------------------------------------------------------
44 dnl C programming environment.
45
46 AC_CHECK_HEADERS([stdarg.h])
47
48 AC_SEARCH_LIBS([socket], [socket])
49
50 case "$host_os" in
51   linux)
52     AC_ARG_WITH([linux-includes],
53                 AS_HELP_STRING(
54                   [--with-linux-includes=DIR],
55                   [Linux kernel includes]),
56                 [CFLAGS="$CFLAGS -I$withval"], [:])
57     ;;
58 esac
59
60 PKG_CHECK_MODULES([mLib], [mLib >= 2.1.0])
61 PKG_CHECK_MODULES([catacomb], [catacomb >= 2.1.1])
62
63 CFLAGS="$CFLAGS $mLib_CFLAGS $catacomb_CFLAGS"
64
65 dnl--------------------------------------------------------------------------
66 dnl Directories to install things into.
67
68 dnl TRIPE_DEFINE_PATH(VAR, ARG, HELP, DEFAULT, [DEFINE, DEFINEHELP])
69 AC_DEFUN([TRIPE_DEFINE_PATH], [
70   AC_ARG_WITH([$1], AS_HELP_STRING([--with-$1=$2], [$3]),
71               [$1=$withval], [$1=$4])
72   AC_SUBST([$1])
73   m4_if([$5], [], [], [
74     mdw_DEFINE_PATHS([mdw_DEFINE_PATH([$5], [$][$1], [$6])])
75   ])
76 ])
77
78 dnl Actual options.
79 TRIPE_DEFINE_PATH(
80   [configdir], [DIR], [keys and other configuration [[LOCALSTATE/tripe]]],
81   ['${localstatedir}/tripe'],
82   [CONFIGDIR], [Look for keys and other configuration here.])
83
84 TRIPE_DEFINE_PATH(
85   [socketdir], [DIR], [admin socket [[.]]], [.],
86   [SOCKETDIR], [Create or look for administration socket here.])
87
88 TRIPE_DEFINE_PATH(
89   [pidfile], [FILE], [process-id [[./tripectl.pid]]], [tripectl.pid])
90
91 TRIPE_DEFINE_PATH(
92   [initconfig], [FILE],
93   [configuration for init script [[SYSCONFDIR/tripe.conf]]],
94   ['${sysconfdir}/tripe.conf'])
95
96 TRIPE_DEFINE_PATH(
97   [logfile], [FILE], [logging output [[./tripe.log]]], [tripe.log])
98
99 dnl--------------------------------------------------------------------------
100 dnl Privilege-separation helper.
101
102 mdw_DEFINE_PATHS([
103   AC_DEFINE_UNQUOTED([PRIVSEP_HELPER],
104     ["mdw_PATH([$libexecdir])/mdw_PROG([tripe-privhelper])"],
105     [Pathname of privilege-separation helper.])
106 ])
107
108 dnl--------------------------------------------------------------------------
109 dnl Other options.
110
111 AC_ARG_WITH([tracing],
112             AS_HELP_STRING(
113               [--without-tracing],
114               [compile out tracing support (not recommended)]),
115             [test "$withval" = no &&
116               AC_DEFINE([NTRACE], [1], [Disable all tracing.])],
117             [:])
118
119 dnl--------------------------------------------------------------------------
120 dnl Path MTU discovery.
121
122 case $host_os in
123   linux*)
124     pmtu=yes
125     ;;
126   *)
127     pmtu=no
128     ;;
129 esac
130 AM_CONDITIONAL([PATHMTU], [test $pmtu = yes])
131
132 dnl--------------------------------------------------------------------------
133 dnl Tunnel devices.
134
135 dnl Provide the user with a choice.
136 AC_ARG_WITH([tunnel],
137             AS_HELP_STRING(
138               [--with-tunnel=KIND],
139               [kinds of tunnel device to use (linux, unet, bsd, slip)]),
140             [tun=$withval], [tun=auto])
141
142 dnl If he doesn't choose, pick something sensible.
143 if test "$tun" = auto; then
144   AC_CACHE_CHECK([tunnel drivers to use], [mdw_cv_tunnel], [
145     mdw_cv_tunnel=""
146     case $host_os in
147       linux*)
148         case `uname -r` in
149           [2.[4-9].*] | [2.[1-9][0-9]*.*] | [[3-9].*] | [[1-9][0-9]*.*])
150             mdw_cv_tunnel=linux
151             ;;
152           *)
153             mdw_cv_tunnel=unet
154             ;;
155         esac
156         ;;
157       *bsd*)
158         mdw_cv_tunnel=bsd
159         ;;
160     esac
161     mdw_cv_tunnel=$mdw_cv_tunnel${mdw_cv_tunnel:+ }slip
162   ])
163   tun=$mdw_cv_tunnel
164 fi
165
166 tunnels=""
167 for i in $tun; do
168   case $i in
169     linux) AC_DEFINE([TUN_LINUX], [1],
170                      [Install the Linux TUN/TAP driver.]) ;;
171     bsd) AC_DEFINE([TUN_BSD], [1],
172                    [Install the BSD tunnel driver.]) ;;
173     unet) AC_DEFINE([TUN_UNET], [1],
174                     [Install the obsolete Linux Usernet driver.]) ;;
175     slip) ;;
176     *) AC_MSG_ERROR([Unknown tunnel type]) ;;
177   esac
178   tunnels="$tunnels&tun_$i, "
179 done
180 AC_DEFINE_UNQUOTED([TUN_LIST], [$tunnels 0],
181   [List of tunnel drivers to install.])
182
183 dnl--------------------------------------------------------------------------
184 dnl Python.
185
186 dnl Find out whether Python exists at all.
187 AM_PATH_PYTHON([2.4], [python=yes], [python=no])
188 AM_CONDITIONAL([HAVE_PYTHON], [test $python = yes])
189
190 dnl Find out whether we can use Catacomb and GTK.
191 if test $python = yes; then
192   AC_PYTHON_MODULE([pygtk])
193   AC_PYTHON_MODULE([catacomb])
194 fi
195 AM_CONDITIONAL([HAVE_PYGTK], [test ${HAVE_PYMOD_PYGTK-no} = yes])
196 AM_CONDITIONAL([HAVE_PYCATACOMB], [test ${HAVE_PYMOD_CATACOMB-no} = yes])
197
198 dnl--------------------------------------------------------------------------
199 dnl Wireshark.
200 dnl
201 dnl This is all distressingly ugly and complicated.  Why they can't just
202 dnl provide a pkg-config dropping containing all the useful information about
203 dnl the installation I don't know.
204
205 WIRESHARK_CFLAGS=""
206 : ${wireshark_plugindir=unknown}
207
208 dnl Get the user to help.
209 AC_ARG_WITH([wireshark],
210             AS_HELP_STRING(
211               [--with-wireshark[=DIR]],
212               [build and install Wireshark plugin]),
213             [case "$withval" in
214                no)  haveshark=no needshark=no ;;
215                yes) haveshark=yes needshark=yes ;;
216                *)   haveshark=yes needshark=yes
217                     wireshark_plugindir=$withval ;;
218             esac],
219             [haveshark=yes needshark=no])
220
221 dnl Try to find the Wireshark installation directory the hard way.
222 case "$haveshark,$wireshark_plugindir" in
223   yes,unknown)
224     AC_CACHE_CHECK([where to put Wireshark plugins],
225       [mdw_cv_wireshark_plugin_dir], [
226       mdw_cv_wireshark_plugin_dir="failed"
227       wsprefix=none
228       for i in "${prefix}" /usr/local /usr `echo $PATH | tr : " "`; do
229         if test -x "$i/bin/tshark"; then
230            wsprefix=$i
231            break
232         fi
233       done
234       if test "$wsprefix" != none; then
235         wsbin=$wsprefix/bin/tshark
236         wsver=`$wsbin -v | sed ['s/^[^ ]* \([0-9A-Za-z.]*\).*$/\1/;q']`
237         dir=$wsprefix/lib/wireshark/plugins
238         test -d "$dir/$wsver" && dir="$dir/$wsver"
239         if test -d "$dir"; then
240           mdw_cv_wireshark_plugin_dir=$dir
241         fi
242       fi
243     ])
244     case $mdw_cv_wireshark_plugin_dir in
245       failed) haveshark=no ;;
246       *) wireshark_plugindir=$mdw_cv_wireshark_plugin_dir ;;
247     esac
248 esac
249
250 dnl If we're still interested, find Glib.
251 case "$haveshark" in
252   yes) AM_PATH_GLIB_2_0([2.4.0], [], [haveshark=false], [gmodule]) ;;
253 esac
254
255 dnl Find the include directory.  This would be much easier if they just
256 dnl provided a pkg-config file.
257 case "$haveshark" in
258   yes)
259     bad=yes
260     mdw_CFLAGS=$CFLAGS
261     wsprefix=`echo $wireshark_plugindir | sed 's:/lib/.*$::'`
262     AC_CACHE_CHECK([how to find the Wireshark headers],
263                    [mdw_cv_wireshark_includes], [
264       mdw_cv_wireshark_includes=failed
265       for i in \
266           "" \
267           "-I${wsprefix}/include/wireshark" \
268           "-I${wsprefix}/include" \
269           "-I${prefix}/include/wireshark" \
270           "-I${prefix}/include" \
271           "-I/usr/include/wireshark" \
272           "-I/usr/local/include/wireshark" \
273           "-I/usr/local/include"; do
274         CFLAGS="$GLIB_CFLAGS $i"
275         AC_TRY_COMPILE([
276 #include <netinet/in.h>
277 #include <glib.h>
278 #include <wireshark/config.h>
279 #include <wireshark/epan/packet.h>],
280         [dissector_handle_t dh; dh = create_dissector_handle(0, 0);],
281         [bad=no; break])
282       done
283       case "$bad" in
284         no) mdw_cv_wireshark_includes=$i ;;
285       esac
286       CFLAGS=$mdw_CFLAGS
287     ])
288     case "$mdw_cv_wireshark_includes" in
289       failed) haveshark=no ;;
290     esac
291 esac
292
293 case "$haveshark,$needshark" in
294   no,yes)
295     AC_MSG_ERROR([failed to configure Wireshark plugin])
296     ;;
297   yes,*)
298     WIRESHARK_CFLAGS="$CFLAGS $GLIB_CFLAGS $mdw_cv_wireshark_includes"
299     AC_SUBST(WIRESHARK_CFLAGS)
300     AC_SUBST(wireshark_plugindir)
301     ;;
302 esac
303
304 AM_CONDITIONAL([HAVE_WIRESHARK], [test "$haveshark" = yes])
305
306 dnl--------------------------------------------------------------------------
307 dnl Produce output.
308
309 AC_CONFIG_HEADER([config/config.h])
310 AC_CONFIG_TESTDIR([t])
311
312 AC_CONFIG_FILES(
313   [Makefile]
314   [common/Makefile]
315   [uslip/Makefile]
316   [pathmtu/Makefile]
317   [client/Makefile]
318   [priv/Makefile]
319   [server/Makefile]
320   [proxy/Makefile]
321   [pkstream/Makefile]
322   [wireshark/Makefile]
323   [init/Makefile]
324   [py/Makefile]
325   [peerdb/Makefile]
326   [keys/Makefile]
327   [svc/Makefile]
328   [mon/Makefile]
329   [t/Makefile t/atlocal])
330 AC_OUTPUT
331
332 dnl ----- That's all, folks -------------------------------------------------