Merge tag 'upstream/0.3.7'
[debian/uanytun.git] / src / configure
index d88e333..8044552 100755 (executable)
 #  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
@@ -67,117 +88,210 @@ do
   --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