Imported Upstream version 0.3.6
[debian/uanytun.git] / src / configure
1 #!/bin/sh
2 #
3 #  uAnytun
4 #
5 #  uAnytun is a tiny implementation of SATP. Unlike Anytun which is a full
6 #  featured implementation uAnytun has no support for multiple connections
7 #  or synchronisation. It is a small single threaded implementation intended
8 #  to act as a client on small platforms.
9 #  The secure anycast tunneling protocol (satp) defines a protocol used
10 #  for communication between any combination of unicast and anycast
11 #  tunnel endpoints.  It has less protocol overhead than IPSec in Tunnel
12 #  mode and allows tunneling of every ETHER TYPE protocol (e.g.
13 #  ethernet, ip, arp ...). satp directly includes cryptography and
14 #  message authentication based on the methods used by SRTP.  It is
15 #  intended to deliver a generic, scaleable and secure solution for
16 #  tunneling and relaying of packets of any protocol.
17 #
18 #
19 #  Copyright (C) 2007-2014 Christian Pointner <equinox@anytun.org>
20 #
21 #  This file is part of uAnytun.
22 #
23 #  uAnytun is free software: you can redistribute it and/or modify
24 #  it under the terms of the GNU General Public License as published by
25 #  the Free Software Foundation, either version 3 of the License, or
26 #  any later version.
27 #
28 #  uAnytun is distributed in the hope that it will be useful,
29 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
30 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
31 #  GNU General Public License for more details.
32 #
33 #  You should have received a copy of the GNU General Public License
34 #  along with uAnytun. If not, see <http://www.gnu.org/licenses/>.
35 #
36 #   In addition, as a special exception, the copyright holders give
37 #   permission to link the code of portions of this program with the
38 #   OpenSSL library under certain conditions as described in each
39 #   individual source file, and distribute linked combinations
40 #   including the two.
41 #   You must obey the GNU General Public License in all respects
42 #   for all of the code used other than OpenSSL.  If you modify
43 #   file(s) with this exception, you may extend this exception to your
44 #   version of the file(s), but you are not obligated to do so.  If you
45 #   do not wish to do so, delete this exception statement from your
46 #   version.  If you delete this exception statement from all source
47 #   files in the program, then also delete it here.
48 #
49
50 TARGET=`uname -s`
51 EBUILD_COMPAT=0
52
53 USE_CLANG=0
54
55 CRYPTO_LIB='gcrypt'
56 PASSPHRASE=1
57
58 PREFIX='/usr/local'
59 SBINDIR=''
60 ETCDIR=''
61 MANDIR=''
62 INSTALLMANPAGE=1
63 EXAMPLESDIR=''
64 INSTALLEXAMPLES=1
65
66 print_usage() {
67   echo "configure --help                    print this"
68   echo "          --target=<TARGET>         build target i.e. Linux (default: autodetect)"
69   echo "          --prefix=<PREFIX>         the installation prefix (default: /usr/local)"
70   echo "          --sbindir=<DIR>           the path to the sbin directory (default: $PREFIX/sbin)"
71   echo "          --sysconfdir=<DIR>        the path to the system configuration directory (default: $PREFIX/etc"
72   echo "          --mandir=<DIR>            the path to the system man pages (default: $PREFIX/share/man)"
73   echo "          --no-manpage              dont't install manpage"
74   echo "          --examplesdir=<DIR>       the path to the examples files (default: $PREFIX/share/examples)"
75   echo "          --no-examples             dont't install example files"
76   echo "          --use-gcrypt              use libgcrypt (this is the default)"
77   echo "          --use-nettle              use libnettle instead of libgcrypt"
78   echo "          --use-ssl-crypto          use openssl crypto library instead of libgcrypt"
79   echo "          --no-crypto               disable crypto at all (only NULL cipher)"
80   echo "          --disable-passphrase      disable master key and salt passphrase"
81   echo "          --enable-passphrase       enable master key and salt passphrase"
82   echo "          --use-clang               use clang/llvm as compiler/linker"
83 }
84
85 for arg
86 do
87   case $arg in
88   --target=*)
89     TARGET=${arg#--target=}
90   ;;
91   --use-clang)
92     USE_CLANG=1
93   ;;
94   --prefix=*)
95     PREFIX=${arg#--prefix=}
96   ;;
97   --sbindir=*)
98     SBINDIR=${arg#--sbindir=}
99   ;;
100   --sysconfdir=*)
101     ETCDIR=${arg#--sysconfdir=}
102   ;;
103   --mandir=*)
104     MANDIR=${arg#--mandir=}
105   ;;
106   --no-manpage)
107     INSTALLMANPAGE=0
108   ;;
109   --examplesdir=*)
110     EXAMPLESDIR=${arg#--examplesdir=}
111   ;;
112   --no-examples)
113     INSTALLEXAMPLES=0
114   ;;
115   --use-gcrypt)
116     CRYPTO_LIB='gcrypt'
117   ;;
118   --use-nettle)
119     CRYPTO_LIB='nettle'
120   ;;
121   --use-ssl-crypto)
122     CRYPTO_LIB='ssl'
123   ;;
124   --no-crypto)
125     CRYPTO_LIB='none'
126   ;;
127   --disable-passphrase)
128     PASSPHRASE=0
129   ;;
130   --enable-passphrase)
131     PASSPHRASE=1
132   ;;
133   --ebuild-compat)
134     EBUILD_COMPAT=1
135   ;;
136   --help)
137     print_usage
138     exit 0
139   ;;
140   *)
141     ERRORS="$ERRORS $arg"
142   ;;
143   esac
144 done
145
146 if [ -n "$ERRORS" ] && [ $EBUILD_COMPAT -ne 1 ]; then
147   for error in $ERRORS; do
148     echo "Unknown argument: $error"
149   done
150
151   print_usage
152   exit 1
153 fi
154
155 if [ $USE_CLANG -eq 0 ]; then
156   CFLAGS=$CFLAGS'-g -Wall -O2'
157   LDFLAGS=$LDFLAGS'-g -Wall -O2'
158   COMPILER='gcc'
159 else
160   CFLAGS=$CFLAGS'-g -O2'
161   LDFLAGS=$LDFLAGS'-g -O2'
162   COMPILER='clang'
163 fi
164
165 rm -f version.h
166 rm -f include.mk
167 case $TARGET in
168   Linux)
169     rm -f tun.c
170     ln -sf linux/tun.c
171     echo "loading Linux specific TUN Device"
172   ;;
173   OpenBSD|FreeBSD|NetBSD|GNU/kFreeBSD)
174     rm -f tun.c
175     ln -sf bsd/tun.c
176     echo "loading BSD specific TUN Device"
177     CFLAGS=$CFLAGS' -I/usr/local/include'
178     LDFLAGS=$LDFLAGS' -L/usr/local/lib'
179   ;;
180   *)
181     echo "platform not supported"
182     exit 1;
183   ;;
184 esac
185
186 CRYPTO_LIB_NAME=""
187 case $CRYPTO_LIB in
188   gcrypt)
189     CFLAGS=$CFLAGS' -DUSE_GCRYPT'
190     LDFLAGS=$LDFLAGS' -lgcrypt'
191     CRYPTO_LIB_NAME="libgcrypt"
192   ;;
193   nettle)
194     CFLAGS=$CFLAGS' -DUSE_NETTLE'
195     LDFLAGS=$LDFLAGS' -lnettle'
196     CRYPTO_LIB_NAME="Nettle"
197   ;;
198   ssl)
199     CFLAGS=$CFLAGS' -DUSE_SSL_CRYPTO'
200     LDFLAGS=$LDFLAGS' -lcrypto'
201     CRYPTO_LIB_NAME="OpenSSL"
202   ;;
203   none)
204     CFLAGS=$CFLAGS' -DNO_CRYPT'
205     CRYPTO_LIB_NAME="none"
206   ;;
207   *)
208     echo "unknown crypto library: $$CRYPTO_LIB"
209     exit 1
210   ;;
211 esac
212 echo "crypto-library: $CRYPTO_LIB_NAME"
213
214 if [ $PASSPHRASE -eq 0 ]; then
215   CFLAGS=$CFLAGS' -DNO_PASSPHRASE'
216   echo "disabling master key and salt passphrase"
217 fi
218
219 if [ -z "$SBINDIR" ]; then
220   SBINDIR=$PREFIX/sbin
221 fi
222
223 if [ -z "$ETCDIR" ]; then
224   ETCDIR=$PREFIX/etc
225 fi
226
227 if [ -z "$MANDIR" ]; then
228   MANDIR=$PREFIX/share/man
229 fi
230
231 if [ -z "$EXAMPLESDIR" ]; then
232   EXAMPLESDIR=$PREFIX/share/examples
233 fi
234
235 cat > include.mk <<EOF
236 # this file was created automatically
237 # do not edit this file directly
238 # use ./configure instead
239
240 TARGET := $TARGET
241 CC := $COMPILER
242 CFLAGS := $CFLAGS
243 LDFLAGS := $LDFLAGS
244 STRIP := strip
245 INSTALL := install
246
247 prefix := $PREFIX
248 SBINDIR := $SBINDIR
249 ETCDIR := $ETCDIR
250 EOF
251
252 if [ $CRYPTO_LIB = "none" ]; then
253   echo "NO_CRYPT_OBJ = 1" >> include.mk
254 fi
255
256 if [ $INSTALLMANPAGE -eq 1 ]; then
257   echo "MANDIR := $MANDIR" >> include.mk
258   echo "installing manpage"
259 else
260   echo "not installing manpage"
261 fi
262
263 if [ $INSTALLEXAMPLES -eq 1 ]; then
264   echo "EXAMPLESDIR := $EXAMPLESDIR" >> include.mk
265   echo "installing example files"
266 else
267   echo "not installing example files"
268 fi
269
270 VERSION=`cat ../version`
271 if which git >/dev/null; then
272     GIT_HASH=`git rev-parse HEAD 2> /dev/null`
273     if [ -n "$GIT_HASH" ]; then
274         VERSION="$VERSION (git $GIT_HASH)"
275     fi
276 fi
277
278 cat > version.h <<EOF
279 /*
280  * uanytun version info
281  *
282  * this file was created automatically
283  * do not edit this file directly
284  * use ./configure instead
285  */
286
287 #ifndef UANYTUN_version_h_INCLUDED
288 #define UANYTUN_version_h_INCLUDED
289
290 #define VERSION_STRING "uanytun version $VERSION"
291 #define CRYPTO_LIB_NAME "$CRYPTO_LIB_NAME"
292
293 #endif
294
295 EOF
296
297 exit 0