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 -------------------------------------------------