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