#!/bin/sh # # anytun # # The secure anycast tunneling protocol (satp) defines a protocol used # for communication between any combination of unicast and anycast # 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 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-2014 Markus Grüneis, Othmar Gsenger, Erwin Nindl, # Christian Pointner # # This file is part of Anytun. # # Anytun is free software: you can redistribute it and/or modify # 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. # # Anytun is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Anytun. If not, see . # # 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 CROSS_PREFIX='' USE_CLANG=0 CRYPTO_LIB='gcrypt' PASSPHRASE=1 ROUTING=1 PREFIX='/usr/local' BINDIR='' SBINDIR='' LIBDIR='' ETCDIR='' MANDIR='' INSTALLMANPAGE=1 EXAMPLESDIR='' INSTALLEXAMPLES=1 SYSTEMDDIR='' SYSTEMDGENERATORDIR='' TMPFILESDDIR='' INSTALLSYSTEMD=1 BOOST_PREFIX='' GCRYPT_PREFIX='' NETTLE_PREFIX='' OPENSSL_PREFIX='' print_usage() { echo "configure --help print this" echo " --target= build target i.e. Linux (default: autodetect)" echo " --prefix= the installation prefix (default: /usr/local)" echo " --bindir= the path to the bin directory (default: $PREFIX/bin)" echo " --sbindir= the path to the sbin directory (default: $PREFIX/sbin)" echo " --libdir= the path to the lib directory (default: $PREFIX/lib)" echo " --sysconfdir= the path to the system configuration directory (default: $PREFIX/etc" echo " --mandir= the path to the system man pages (default: $PREFIX/share/man)" echo " --no-manpage don't install manpages" echo " --examplesdir= the path to the examples files (default: $PREFIX/share/examples)" echo " --no-examples don't install example files" echo " --systemddir= the path to the systemd service unit directory (default: from pkg-config)" echo " --systemdgeneratordir= the path to the systemd generator directory (default: from pkg-config)" echo " --tmpfilesddir= the path to the systemd tmpfiles.d configuration file (default: from pkg-config)" echo " --no-systemd don't install systemd units" 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-routing disable built-in routing capability" echo " --enable-routing enable built-in routing capability" echo " --cross-prefix= add PREFIX to compiler calls" echo " --with-boost= don't use systemwide boost" echo " --with-gcrypt= don't use systemwide gcrypt" echo " --with-nettle= don't use systemwide nettle" echo " --with-openssl= don't use systemwide openssl" echo " --use-clang use clang/llvm as compiler/linker" } for arg do case $arg in --target=*) TARGET=${arg#--target=} ;; --use-clang) USE_CLANG=1 ;; --prefix=*) PREFIX=${arg#--prefix=} ;; --bindir=*) SBINDIR=${arg#--bindir=} ;; --sbindir=*) SBINDIR=${arg#--sbindir=} ;; --libdir=*) LIBDIR=${arg#--libdir=} ;; --sysconfdir=*) ETCDIR=${arg#--sysconfdir=} ;; --mandir=*) MANDIR=${arg#--mandir=} ;; --no-manpage) INSTALLMANPAGE=0 ;; --examplesdir=*) EXAMPLESDIR=${arg#--examplesdir=} ;; --no-examples) INSTALLEXAMPLES=0 ;; --systemddir=*) SYSTEMDDIR=${arg#--systemddir=} ;; --systemdgeneratordir=*) SYSTEMDGENERATORDIR=${arg#--systemdgeneratordir=} ;; --tmpfilesddir=*) TMPFILESDDIR=${arg#--tmpfilesddir=} ;; --no-systemd) INSTALLSYSTEMD=0 ;; --use-gcrypt) CRYPTO_LIB='gcrypt' ;; --use-nettle) CRYPTO_LIB='nettle' ;; --use-ssl-crypto) CRYPTO_LIB='ssl' ;; --no-crypto) CRYPTO_LIB='none' ;; --enable-passphrase) PASSPHRASE=1 ;; --disable-passphrase) PASSPHRASE=0 ;; --enable-routing) ROUTING=1 ;; --disable-routing) ROUTING=0 ;; --ebuild-compat) EBUILD_COMPAT=1 ;; --cross-prefix=*) CROSS_PREFIX=${arg#--cross-prefix=} ;; --with-boost=*) BOOST_PREFIX=${arg#--with-boost=} ;; --with-gcrypt=*) GCRYPT_PREFIX=${arg#--with-gcrypt=} ;; --with-nettle=*) NETTLE_PREFIX=${arg#--with-nettle=} ;; --with-openssl=*) OPENSSL_PREFIX=${arg#--with-openssl=} ;; --help) print_usage exit 0 ;; *) 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 if [ -z "$CXXFLAGS" ]; then CXXFLAGS='-g -Wall -O2'; fi if [ -z "$LDFLAGS" ]; then LDFLAGS='-g -Wall -O2'; fi COMPILER='g++' else if [ -z "$CXXFLAGS" ]; then CXXFLAGS='-g -O2'; fi if [ -z "$LDFLAGS" ]; then LDFLAGS='-g -O2'; fi COMPILER='clang++' fi rm -f include.mk rm -f version.h case $TARGET in Linux) rm -f tunDevice.cpp ln -sf linux/tunDevice.cpp rm -f signalHandler.hpp ln -sf posix/signalHandler.hpp rm -f sysExec.hpp ln -sf posix/sysExec.hpp rm -f daemonService.h daemonService.cpp ln -sf posix/posixDaemon.h daemonService.h ln -sf posix/posixDaemon.cpp daemonService.cpp echo "loading Linux specific TUN Device" LDFLAGS=$LDFLAGS' -lboost_thread -lboost_serialization -lboost_system -lboost_date_time -lpthread' LOG_TARGETS='-DLOG_SYSLOG -DLOG_FILE -DLOG_STDOUT' ;; OpenBSD|FreeBSD|NetBSD|GNU/kFreeBSD) rm -f tunDevice.cpp ln -sf bsd/tunDevice.cpp rm -f signalHandler.hpp ln -sf posix/signalHandler.hpp rm -f sysExec.hpp ln -sf posix/sysExec.hpp rm -f daemonService.h daemonService.cpp ln -sf posix/posixDaemon.h daemonService.h ln -sf posix/posixDaemon.cpp daemonService.cpp echo "loading BSD specific TUN Device" CPPFLAGS=$CPPFLAGS' -I/usr/local/include' LDFLAGS=$LDFLAGS' -L/usr/local/lib -lboost_thread -lboost_serialization -lboost_system -lboost_date_time -lpthread' LOG_TARGETS='-DLOG_SYSLOG -DLOG_FILE -DLOG_STDOUT' INSTALLSYSTEMD=0 ;; mingw) rm -f tunDevice.cpp rm -f signalHandler.hpp rm -f sysExec.hpp rm -f daemonService.h daemonService.cpp echo "loading Windows specific TUN Device" CPPFLAGS=$CPPFLAGS' -DMINGW -D_WIN32_WINNT=0x0501 -DWIN32_LEAN_AND_MEAN -DBOOST_WINDOWS -fno-strict-aliasing -DBOOST_THREAD_USE_LIB' LDFLAGS=$LDFLAGS' -lboost_thread_win32 -lboost_serialization -lboost_system -lboost_date_time -lwsock32 -lws2_32' LOG_TARGETS='-DWIN_EVENTLOG -DLOG_FILE -DLOG_STDOUT' INSTALLSYSTEMD=0 ;; *) echo "platform not supported" exit 1 ;; esac CPPFLAGS="$CPPFLAGS $LOG_TARGETS" if [ -n "$BOOST_PREFIX" ]; then CPPFLAGS="$CPPFLAGS -I\"$BOOST_PREFIX/include\"" LDFLAGS="$LDFLAGS -L\"$BOOST_PREFIX/lib\"" fi CRYPTO_LIB_NAME="" case $CRYPTO_LIB in gcrypt) CPPFLAGS=$CPPFLAGS' -DUSE_GCRYPT' LDFLAGS=$LDFLAGS' -lgcrypt -lgpg-error' if [ -n "$GCRYPT_PREFIX" ]; then CPPFLAGS="$CPPFLAGS -I\"$GCRYPT_PREFIX/include\"" LDFLAGS="$LDFLAGS -L\"$GCRYPT_PREFIX/lib\"" fi CRYPTO_LIB_NAME="libgcrypt" echo "using gcrypt library" ;; nettle) CPPFLAGS=$CPPFLAGS' -DUSE_NETTLE' LDFLAGS=$LDFLAGS' -lnettle' if [ -n "$NETTLE_PREFIX" ]; then CPPFLAGS="$CPPFLAGS -I\"$NETTLE_PREFIX/include\"" LDFLAGS="$LDFLAGS -L\"$NETTLE_PREFIX/lib\"" fi CRYPTO_LIB_NAME="Nettle" echo "using nettle library" ;; ssl) CPPFLAGS=$CPPFLAGS' -DUSE_SSL_CRYPTO' LDFLAGS=$LDFLAGS' -lcrypto' if [ -n "$OPENSSL_PREFIX" ]; then CPPFLAGS="$CPPFLAGS -I\"$OPENSSL_PREFIX/include\"" LDFLAGS="$LDFLAGS -L\"$OPENSSL_PREFIX/lib\"" fi CRYPTO_LIB_NAME="OpenSSL" echo "using openssl crypto library" ;; none) CPPFLAGS=$CPPFLAGS' -DNO_CRYPT' CRYPTO_LIB_NAME="none" echo "disabling crypto" ;; esac if [ $PASSPHRASE -eq 0 ]; then CPPFLAGS=$CPPFLAGS' -DNO_PASSPHRASE' echo "disabling master key and salt passphrase" fi if [ $ROUTING -eq 0 ]; then CPPFLAGS=$CPPFLAGS' -DNO_ROUTING' echo "disabling built-in routing capability" fi if [ -z "$BINDIR" ]; then BINDIR=$PREFIX/bin fi if [ -z "$SBINDIR" ]; then SBINDIR=$PREFIX/sbin fi if [ -z "$LIBDIR" ]; then LIBDIR=$PREFIX/lib fi 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 if [ $INSTALLSYSTEMD -eq 1 ]; then if [ -z "$SYSTEMDDIR" ]; then SYSTEMDDIR=`pkg-config systemd --variable=systemdsystemunitdir` fi if [ -z "$SYSTEMDGENERATORDIR" ]; then SYSTEMDGENERATORDIR=`pkg-config systemd --variable=systemdsystemgeneratordir` fi if [ -z "$TMPFILESDDIR" ]; then TMPFILESDDIR=`pkg-config systemd --variable=tmpfilesdir` fi fi cat > include.mk <> 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 if [ $INSTALLSYSTEMD -eq 1 ]; then echo "SYSTEMDDIR := $SYSTEMDDIR" >> include.mk echo "SYSTEMDGENERATORDIR := $SYSTEMDGENERATORDIR" >> include.mk echo "TMPFILESDDIR := $TMPFILESDDIR" >> include.mk echo "installing systemd units" else echo "not installing systemd units" 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 <