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