File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pimd / configure
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jun 12 07:59:37 2017 UTC (7 years, 6 months ago) by misho
Branches: pimd, MAIN
CVS tags: v2_3_2, HEAD
pimd 2.3.2

#!/bin/sh
#
# --enable-broken-crc:
#   If your RP is buggy cisco PIM-SMv2 implementation that computes
#   the PIM-Register checksum over the whole pkt instead only over
#   the header, you need to define this. Otherwise, all your PIM-Register
#   may be dropped by the cisco-RP.
#DEFS += -DBROKEN_CISCO_CHECKSUM
#
# --enable-kernel-encap:
#   Register kernel encapsulation.  Your kernel must support registers
#   kernel encapsulation to be able to use it.
#DEFS += -DPIM_REG_KERNEL_ENCAP
#
# --enable-kernel-mfc:
#   (*,G) kernel MFC support.  Use it ONLY with (*,G) capable kernel
#DEFS += -DKERNEL_MFC_WC_G
#
# --enable-memory-save:
#   Saves 4 bytes per unconfigured interface per routing entry.  If set,
#   configuring such interface will restart the daemon and will flush
#   the routing table.
#DEFS += -DSAVE_MEMORY
#
# --enable-scoped-acls:
#   Scoped access control list support in pimd.conf.  If you want to
#   install NUL OIF for the "scoped groups", use the following syntax:
#   "phyint IFNAME [scoped <MCAST_ADDR> masklen <PREFIX_LEN>]", e.g.
#      phyint fxp0 scoped "addr" masklen "len"
#   Support contributed by Marian Stagarescu <marian@cidera.com>
#DEFS += -DSCOPED_ACL
#

OS=`uname`
CFG=config.mk
TMP=`mktemp /tmp/XXXXXX`
BUGREPORT_URL="https://github.com/troglobit/pimd/issues"

# Defaults
debug=0
disable_genid=0
embedded_libc=0

print()
{
    case $OS in
	Linux)
	    /bin/echo -ne "$*"
	    ;;

	*)
	    printf "$*"
	    ;;
    esac
}

heading()
{
    echo "# This makefile snippet is generated by the pimd configure script." > $CFG
    echo >> $CFG
    echo "# Initial definitions ..." >> $CFG
    echo "# -D_GNU_SOURCE Use GNU extensions, where possible" >> $CFG
    echo "# -D_BSD_SOURCE Use functions derived from 4.3 BSD Unix rather than POSIX.1" >> $CFG
    echo "#               In GLIBC >= v2.20 this is replaced with -D_DEFAULT_SOURCE  " >> $CFG
    echo "# -DPIM         Enable PIM extensions in RSRR" >> $CFG
    echo "DEFS          = -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_GNU_SOURCE -DPIM" >> $CFG
    echo "# EXTRA_OBJS  = For locally provided objects missing on some platforms, e.g., strlcpy.o"  >> $CFG
    echo "# EXTRA_LIBS  = For platform specific libraries, e.g., -lutil" >> $CFG
    echo >> $CFG
    echo "# $OS specific settings ..." >> $CFG
}

usage()
{
    print "Run this script to configure pimd for your system.\n"
    print "\n"
    print "Usage: configure [ARG]\n"
    print "\n"
    print "  --debug                  Enable debuggable build, -g and -O0\n"
    print "  --prefix=PATH            Base installation directory, default: /usr/local/\n"
    print "  --sysconfdir=PATH        Path to pimd.conf, default: /etc/\n"
    print "  --embedded-libc          Linux system with uClibc or musl libc.  These two\n"
    print "                           C libraries have strlcpy() and strlcat()"
    print "\n"
    print "By default 'make install' installs files to /usr/local/{sbin, share, man} and\n"
    print "/etc/, this can be changed with the --prefix and --syconfdir options. On top of\n"
    print "this you can also set DESTDIR when installing, to get another root directory.\n"
    print "\n"
    print "  --enable-broken-crc      Interop with older broken Cisco firmware that did\n"
    print "                           checksum in PIM Register messages slightly wrong.\n"
    print "                           Should not be needed anymore.\n"
    print "  --enable-kernel-encap    Specialized kernels do PIM Register encapsulation\n"
    print "                           by themselves, speeding up processing considerably.\n"
    print "                           \e[1mNot on Linux/*BSD\e[0m, needs pimkern-PATCH_6!\n"
    print "  --enable-kernel-mfc      Specialized kernels may have (*,G) MFC support.\n"
    print "                           \e[1mNot on Linux/*BSD\e[0m, need pimkern-PATCH_7!\n"
    print "  --enable-memory-save     Save 4 bytes/unconfigured interface/routing entry\n"
    print "                           Must restart pimd and cause routing table to be\n"
    print "                           flushed when configuring new interfaces.\n"
    print "  --enable-scoped-acls     Scoped access control list support in pimd.conf\n"
    print "                           phyint IFNAME [scoped <MCGROUP> masklen <LEN>]\n"
    print "                           phyint fxp0 scoped 239.0.0.0 masklen 8\n"
    print "  --enable-rsrr            Routing Support for Resource Reservations, defined in\n"
    print "                           http://tools.ietf.org/html/draft-ietf-rsvp-routing-02\n"
    print "                           currently used by RSVP.  \e[1mEXPERIMENTAL\e[0m\n"
    print "\n"
    print "  --disable-pim-genid      Disable Generation ID in PIM Hello, RFC3973\n"
    print "  --disable-exit-on-error  Do not exit on error messages (LOG_ERR)\n"
    print "  --disable-masklen-check  Allow virtual tunctl VIFs with masklen 32\n"
    print "\n"
    print "  --with-includes=PATH     Use this if the multicast header files are not in\n"
    print "                           a standard location on your system. E.g., /sys\n"
    print "  --with-max-vifs=MAXVIFS  Kernel maximum number of allowed VIFs, default: 32\n"
    print "                           \e[1mNote:\e[0m Try multiple routing tables instead!\n"
    print "\n"
    print "Report bugs to $BUGREPORT_URL\n"
    print "\n"

    exit 1
}

echo > $TMP
echo "# Configured settings/features ..." >> $TMP

while [ "$*" != "" ]; do
    opt=`expr -- "$1" : "--\([^=]*\)=.*"`
    arg=`expr -- "$1" : "--[^=]*=\(.*\)"`
    if [ -z "$opt" ]; then
        opt=`expr -- "$1" : "--\(.*\)"`
	if [ -z "$opt" ]; then
            opt=`expr -- "$1" : "-\(.*\)"`
	fi
    fi
    shift

    case $opt in
	debug)
	    debug=1;
	    ;;

	prefix)
	    echo "prefix        = $arg"     >> $TMP
	    echo "sysconfdir   += $arg/etc" >> $TMP
	    ;;

	sysconfdir)
	    echo "sysconfdir    = $arg" >> $TMP
	    ;;

	embedded-libc)
	    embedded_libc=1
	    ;;

        enable-broken-crc)
            echo "DEFS         += -DBROKEN_CISCO_CHECKSUM" >> $TMP
            ;;

        enable-kernel-encap)
            echo "DEFS         += -DPIM_REG_KERNEL_ENCAP" >> $TMP
            ;;

        enable-kernel-mfc)
            echo "DEFS         += -DKERNEL_MFC_WC_G" >> $TMP
            ;;

        enable-memory-save)
            echo "DEFS         += -DSAVE_MEMORY" >> $TMP
            ;;

        enable-scoped-acls)
            echo "DEFS         += -DSCOPED_ACL" >> $TMP
            ;;

        enable-rsrr)
            echo "DEFS         += -DRSRR" >> $TMP
            echo "EXTRA_OBJS   += rsrr.o" >> $TMP
            ;;

        enable-pim-hello-genid)
            echo "PIM Hello GenID is enabled by default."
            ;;

	disable-pim-genid)
            disable_genid=1
            ;;

        disable-exit-on-error)
            echo "DEFS         += -DCONTINUE_ON_ERROR" >> $TMP
            ;;

        disable-masklen-check)
            echo "DEFS         += -DDISABLE_MASKLEN_CHECK" >> $TMP
            ;;

        with-includes)
            echo "INCLUDES     += -I$arg" >> $TMP
            ;;

        with-max-vifs)
            echo "DEFS         += -DCUSTOM_MAX_VIFS=$arg" >> $TMP
            ;;

        help | h)
            usage
            ;;

        *)
            echo "Skipping unknown option: $opt"
            ;;
    esac
done

echo "DEFS         += -DPACKAGE_BUGREPORT=\\\"$BUGREPORT_URL\\\"" >> $TMP

if [ $disable_genid -ne 1 ]; then
    echo "DEFS         += -DENABLE_PIM_HELLO_GENID" >> $TMP
fi

## BSDI		-D__bsdi__ is defined by the OS
#INCLUDES     = -Iinclude
#DEFS        +=
#EXTRA_OBJS   = strlcpy.o pidfile.o

## SunOS, OSF1, gcc
#INCLUDES     = -Iinclude -Iinclude/sunos-gcc
#DEFS        += -DSunOS=43
#EXTRA_OBJS   = strlcpy.o pidfile.o

## SunOS, OSF1, cc
#INCLUDES     = -Iinclude -Iinclude/sunos-cc
#DEFS        += -DSunOS=43
#EXTRA_OBJS   = strlcpy.o pidfile.o

## IRIX
#INCLUDES     = -Iinclude
#DEFS        += -D_BSD_SIGNALS -DIRIX
#EXTRA_OBJS   = strlcpy.o pidfile.o

## Solaris 2.5, gcc
#INCLUDES     = -Iinclude
#DEFS        += -DSYSV -DSunOS=55
## Solaris 2.5, cc
#INCLUDES     = -Iinclude
#DEFS        += -DSYSV -DSunOS=55
## Solaris 2.6
#INCLUDES     = -Iinclude
#DEFS        += -DSYSV -DSunOS=56
## Solaris 2.x
#EXTRA_OBJS   = strlcpy.o pidfile.o
#EXTRA_LIBS   = -L/usr/ucblib -lucb -L/usr/lib -lsocket -lnsl
case $OS in
    Linux)
        heading
	echo "INCLUDES     = -Iinclude" >> $CFG
	echo "DEFS        += -DRAW_OUTPUT_IS_RAW -DIOCTL_OK_ON_RAW_SOCKET" >> $CFG
	echo "ROUTER_OBJS += netlink.o" >> $CFG
	if [ $embedded_libc -ne 1 ]; then
	    echo "EXTRA_OBJS   = libite/strlcpy.o libite/strlcat.o" >> $CFG
	fi
	echo "EXTRA_OBJS  += libite/pidfile.o libite/strtonum.o" >> $CFG
	echo "EXTRA_LIBS   =" >> $CFG
	;;

    FreeBSD)
        heading
	echo "INCLUDES     =" >> $CFG
	echo "ROUTER_OBJS += routesock.o" >> $CFG
	echo "EXTRA_OBJS   = libite/pidfile.o" >> $CFG
	echo "EXTRA_LIBS   =" >> $CFG
	;;

    NetBSD)
        heading
	echo "INCLUDES     =" >> $CFG
	echo "ROUTER_OBJS += routesock.o" >> $CFG
	echo "EXTRA_OBJS   = libite/strtonum.o" >> $CFG
	echo "EXTRA_LIBS   = -lutil" >> $CFG
	;;

    OpenBSD)
        heading
	echo "INCLUDES     =" >> $CFG
	echo "ROUTER_OBJS += routesock.o" >> $CFG
	echo "EXTRA_OBJS   =" >> $CFG
	echo "EXTRA_LIBS   = -lutil" >> $CFG
	;;

    *)
	rm $CFG
	echo "$OS is currently unsupported.  Help out at https://github.com/troglobit/pimd/"
	exit 1
	;;
esac

echo >> $CFG
echo "# Build specific settings ..." >> $CFG
if [ $debug -eq 1 ]; then
    echo "CFLAGS      += -O0 -g" >> $CFG
else
    echo "CFLAGS      += -O2" >> $CFG
fi

cat $TMP >> $CFG
rm $TMP

if [ ! -e libite/lite.h ]; then
    print "  FIXDEP  libite/lite.h missing ... "
    git submodule update --init >/dev/null
    if [ $? -ne 0 ]; then
	print "FAILED!  No Internet access?"
	exit 1
    fi
    print "OK\n"
fi


exit 0


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>