# tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
# mode and allows tunneling of every ETHER TYPE protocol (e.g.
# ethernet, ip, arp ...). satp directly includes cryptography and
-# message authentication based on the methodes used by SRTP. It is
+# message authentication based on the methods used by SRTP. It is
# intended to deliver a generic, scaleable and secure solution for
# tunneling and relaying of packets of any protocol.
-#
#
-# Copyright (C) 2007-2008 Christian Pointner <equinox@anytun.org>
+#
+# Copyright (C) 2007-2014 Christian Pointner <equinox@anytun.org>
#
# This file is part of uAnytun.
#
# uAnytun is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 3 as
-# published by the Free Software Foundation.
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
#
# uAnytun is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# You should have received a copy of the GNU General Public License
# along with uAnytun. If not, see <http://www.gnu.org/licenses/>.
#
+# In addition, as a special exception, the copyright holders give
+# permission to link the code of portions of this program with the
+# OpenSSL library under certain conditions as described in each
+# individual source file, and distribute linked combinations
+# including the two.
+# You must obey the GNU General Public License in all respects
+# for all of the code used other than OpenSSL. If you modify
+# file(s) with this exception, you may extend this exception to your
+# version of the file(s), but you are not obligated to do so. If you
+# do not wish to do so, delete this exception statement from your
+# version. If you delete this exception statement from all source
+# files in the program, then also delete it here.
+#
TARGET=`uname -s`
+EBUILD_COMPAT=0
-CFLAGS='-g -O2'
-LDFLAGS='-g -Wall -O2'
+USE_CLANG=0
CRYPTO_LIB='gcrypt'
PASSPHRASE=1
-V4_MAPPED=1
PREFIX='/usr/local'
-USERNAME='uanytun'
-USERHOME='/var/run/uanytun'
+SBINDIR=''
+ETCDIR=''
+MANDIR=''
+INSTALLMANPAGE=1
+EXAMPLESDIR=''
+INSTALLEXAMPLES=1
print_usage() {
echo "configure --help print this"
echo " --target=<TARGET> build target i.e. Linux (default: autodetect)"
echo " --prefix=<PREFIX> the installation prefix (default: /usr/local)"
- echo " --username=<USERNAME> create this user when installing (default: uanytun)"
- echo " --userhome=<PATH> the home directory of the user to be created (default: /var/run/uanytun)"
- echo " --use-ssl-crypto use ssl crypto library instead of libgcrypt"
+ echo " --sbindir=<DIR> the path to the sbin directory (default: $PREFIX/sbin)"
+ echo " --sysconfdir=<DIR> the path to the system configuration directory (default: $PREFIX/etc"
+ echo " --mandir=<DIR> the path to the system man pages (default: $PREFIX/share/man)"
+ echo " --no-manpage dont't install manpage"
+ echo " --examplesdir=<DIR> the path to the examples files (default: $PREFIX/share/examples)"
+ echo " --no-examples dont't install example files"
+ echo " --use-gcrypt use libgcrypt (this is the default)"
+ echo " --use-nettle use libnettle instead of libgcrypt"
+ echo " --use-ssl-crypto use openssl crypto library instead of libgcrypt"
echo " --no-crypto disable crypto at all (only NULL cipher)"
echo " --disable-passphrase disable master key and salt passphrase"
echo " --enable-passphrase enable master key and salt passphrase"
- echo " --disable-v4-mapped disable V4-Mapped addresses (this means to disable"
- echo " simultanious use of IPv4 and IPv6)"
- echo " --enable-v4-mapped enable V4-Mapped addresses"
+ echo " --use-clang use clang/llvm as compiler/linker"
}
for arg
--target=*)
TARGET=${arg#--target=}
;;
+ --use-clang)
+ USE_CLANG=1
+ ;;
--prefix=*)
PREFIX=${arg#--prefix=}
;;
- --username=*)
- USERNAME=${arg#--username=}
+ --sbindir=*)
+ SBINDIR=${arg#--sbindir=}
+ ;;
+ --sysconfdir=*)
+ ETCDIR=${arg#--sysconfdir=}
+ ;;
+ --mandir=*)
+ MANDIR=${arg#--mandir=}
+ ;;
+ --no-manpage)
+ INSTALLMANPAGE=0
;;
- --userhome=*)
- USERHOME=${arg#--userhome=}
+ --examplesdir=*)
+ EXAMPLESDIR=${arg#--examplesdir=}
+ ;;
+ --no-examples)
+ INSTALLEXAMPLES=0
+ ;;
+ --use-gcrypt)
+ CRYPTO_LIB='gcrypt'
+ ;;
+ --use-nettle)
+ CRYPTO_LIB='nettle'
;;
--use-ssl-crypto)
CRYPTO_LIB='ssl'
;;
--no-crypto)
CRYPTO_LIB='none'
- ;;
+ ;;
--disable-passphrase)
PASSPHRASE=0
;;
--enable-passphrase)
PASSPHRASE=1
;;
- --disable-v4-mapped)
- V4_MAPPED=0
- ;;
- --enable-v4-mapped)
- V4_MAPPED=2
- ;;
+ --ebuild-compat)
+ EBUILD_COMPAT=1
+ ;;
--help)
print_usage
exit 0
;;
*)
- echo "Unknown argument: $arg"
- print_usage
- exit 1
+ ERRORS="$ERRORS $arg"
;;
esac
done
+if [ -n "$ERRORS" ] && [ $EBUILD_COMPAT -ne 1 ]; then
+ for error in $ERRORS; do
+ echo "Unknown argument: $error"
+ done
+
+ print_usage
+ exit 1
+fi
+
+if [ $USE_CLANG -eq 0 ]; then
+ CFLAGS=$CFLAGS'-g -Wall -O2'
+ LDFLAGS=$LDFLAGS'-g -Wall -O2'
+ COMPILER='gcc'
+else
+ CFLAGS=$CFLAGS'-g -O2'
+ LDFLAGS=$LDFLAGS'-g -O2'
+ COMPILER='clang'
+fi
+
+rm -f version.h
rm -f include.mk
-case $TARGET in
+case $TARGET in
Linux)
rm -f tun.c
ln -sf linux/tun.c
echo "loading Linux specific TUN Device"
;;
- OpenBSD|FreeBSD|NetBSD)
+ OpenBSD|FreeBSD|NetBSD|GNU/kFreeBSD)
rm -f tun.c
ln -sf bsd/tun.c
echo "loading BSD specific TUN Device"
CFLAGS=$CFLAGS' -I/usr/local/include'
LDFLAGS=$LDFLAGS' -L/usr/local/lib'
- if [ $V4_MAPPED -ne 2 ]; then
- V4_MAPPED=0
- fi
;;
*)
- echo "Plattform not supported"
+ echo "platform not supported"
exit 1;
;;
esac
-
+CRYPTO_LIB_NAME=""
case $CRYPTO_LIB in
gcrypt)
+ CFLAGS=$CFLAGS' -DUSE_GCRYPT'
LDFLAGS=$LDFLAGS' -lgcrypt'
- echo "using libgcrypt library"
+ CRYPTO_LIB_NAME="libgcrypt"
+ ;;
+ nettle)
+ CFLAGS=$CFLAGS' -DUSE_NETTLE'
+ LDFLAGS=$LDFLAGS' -lnettle'
+ CRYPTO_LIB_NAME="Nettle"
;;
ssl)
CFLAGS=$CFLAGS' -DUSE_SSL_CRYPTO'
LDFLAGS=$LDFLAGS' -lcrypto'
- echo "using ssl crypto library"
+ CRYPTO_LIB_NAME="OpenSSL"
;;
none)
CFLAGS=$CFLAGS' -DNO_CRYPT'
- echo "NO_CRYPT_OBJ = 1" >> include.mk
- echo "disabling crypto"
+ CRYPTO_LIB_NAME="none"
+ ;;
+ *)
+ echo "unknown crypto library: $$CRYPTO_LIB"
+ exit 1
;;
esac
+echo "crypto-library: $CRYPTO_LIB_NAME"
if [ $PASSPHRASE -eq 0 ]; then
CFLAGS=$CFLAGS' -DNO_PASSPHRASE'
echo "disabling master key and salt passphrase"
fi
-if [ $V4_MAPPED -eq 0 ]; then
- CFLAGS=$CFLAGS' -DNO_V4MAPPED'
- echo "WARNING: disabling V4 mapped addresses, this prevents uanytun from using IPv6 and IPv4 Sockets at the same time"
+if [ -z "$SBINDIR" ]; then
+ SBINDIR=$PREFIX/sbin
fi
-if [ "x$PREFIX" = "x/usr" ]; then
- ETCDIR=/etc
-else
- ETCDIR=$PREFIX/etc
+if [ -z "$ETCDIR" ]; then
+ ETCDIR=$PREFIX/etc
+fi
+
+if [ -z "$MANDIR" ]; then
+ MANDIR=$PREFIX/share/man
+fi
+
+if [ -z "$EXAMPLESDIR" ]; then
+ EXAMPLESDIR=$PREFIX/share/examples
fi
-cat >> include.mk <<EOF
+cat > include.mk <<EOF
# this file was created automatically
-# do not edit this file directly
+# do not edit this file directly
# use ./configure instead
TARGET := $TARGET
-CC := gcc
+CC := $COMPILER
CFLAGS := $CFLAGS
LDFLAGS := $LDFLAGS
+STRIP := strip
+INSTALL := install
-SBINDIR := $PREFIX/sbin
-MANDIR := $PREFIX/share/man
+prefix := $PREFIX
+SBINDIR := $SBINDIR
ETCDIR := $ETCDIR
-USERNAME := $USERNAME
-USERHOME := $USERHOME
+EOF
+
+if [ $CRYPTO_LIB = "none" ]; then
+ echo "NO_CRYPT_OBJ = 1" >> include.mk
+fi
+
+if [ $INSTALLMANPAGE -eq 1 ]; then
+ echo "MANDIR := $MANDIR" >> include.mk
+ echo "installing manpage"
+else
+ echo "not installing manpage"
+fi
+
+if [ $INSTALLEXAMPLES -eq 1 ]; then
+ echo "EXAMPLESDIR := $EXAMPLESDIR" >> include.mk
+ echo "installing example files"
+else
+ echo "not installing example files"
+fi
+
+VERSION=`cat ../version`
+if which git >/dev/null; then
+ GIT_HASH=`git rev-parse HEAD 2> /dev/null`
+ if [ -n "$GIT_HASH" ]; then
+ VERSION="$VERSION (git $GIT_HASH)"
+ fi
+fi
+
+cat > version.h <<EOF
+/*
+ * uanytun version info
+ *
+ * this file was created automatically
+ * do not edit this file directly
+ * use ./configure instead
+ */
+
+#ifndef UANYTUN_version_h_INCLUDED
+#define UANYTUN_version_h_INCLUDED
+
+#define VERSION_STRING "uanytun version $VERSION"
+#define CRYPTO_LIB_NAME "$CRYPTO_LIB_NAME"
+
+#endif
+
EOF
exit 0