#!/bin/sh test_kver() { req_major=`echo $1 | awk -F . '{ print $1 }'` req_minor=`echo $1 | awk -F . '{ print $2 }'` req_rev=`echo $1 | awk -F . '{ print $3 }'` linux_rev=`uname -r | sed 's/-.*//'` kver_major=`echo $linux_rev | awk -F . '{ print $1 }'` kver_minor=`echo $linux_rev | awk -F . '{ print $2 }'` kver_rev=`echo $linux_rev | awk -F . '{ print $3 }'` if [ "$kver_major" -lt "$req_major" ]; then return 1 fi if [ "$kver_major" = "$req_major" ]; then if [ "$kver_minor" -lt "$req_minor" ]; then return 1 fi if [ "$kver_minor" = "$req_minor" -a "$kver_rev" -lt "$req_rev" ]; then return 1 fi fi return 0 } check_header() { printf "Looking for header: $1 ... " >&2 echo "#include <$1>" >.chkhdr.c if cpp -I/usr/local/include $x11inc .chkhdr.c >/dev/null 2>&1; then echo found >&2 echo "#define HAVE_`basename $1 | tr '[:lower:]' '[:upper:]' | sed 's/\./_/g'`" else echo not found >&2 fi rm -f .chkhdr.c } PREFIX=/usr/local OPT=yes DBG=yes X11=yes HOTPLUG=yes XINPUT=yes VER=`git describe --tags 2>/dev/null` CFGDIR=/etc if [ -z "$VER" ]; then VER=`git rev-parse --short HEAD` if [ -z "$VER" ]; then VER=v`pwd | grep 'spacenavd-[0-9]\+\.' | sed 's/.*spacenavd-\(\([0-9]\+\.\)\+[0-9]\+\).*$/\1/'` if [ $VER = v ]; then VER='' fi fi fi echo "configuring spacenavd - $VER" sys=`uname -s` if [ "$sys" = Linux ]; then # NETLINK_KOBJECT_UEVENT used for hotplug detection requires 2.6.10 if test_kver 2.6.10; then HOTPLUG=yes else HOTPLUG=no fi elif [ "$sys" = Darwin ]; then LDFLAGS='-framework CoreFoundation -framework IOKit' else # TODO implement hotplug for other systems then switch this on HOTPLUG=no fi srcdir="`dirname "$0"`" # process arguments for arg; do case "$arg" in --prefix=*) value=`echo $arg | sed 's/--prefix=//'` PREFIX=${value:-$prefix} ;; --cfgdir=*) value=`echo $arg | sed 's/--cfgdir=//'` CFGDIR=${value:-$cfgdir} ;; --enable-opt) OPT=yes;; --disable-opt) OPT=no;; --enable-debug) DBG=yes;; --disable-debug) DBG=no;; --enable-x11) X11=yes;; --disable-x11) X11=no;; --enable-hotplug) HOTPLUG=yes;; --disable-hotplug) HOTPLUG=no;; --help) echo 'usage: ./configure [options]' echo 'options:' echo ' --prefix=: installation path (default: /usr/local)' echo ' --enable-x11: enable X11 communication mode (default)' echo ' --disable-x11: disable X11 communication mode' echo ' --enable-hotplug: enable hotplug using NETLINK_KOBJECT_UEVENT (default)' echo ' --disable-hotplug: disable hotplug, fallback to polling for the device' echo ' --enable-opt: enable speed optimizations (default)' echo ' --disable-opt: disable speed optimizations' echo ' --enable-debug: include debugging symbols (default)' echo ' --disable-debug: do not include debugging symbols' echo 'all invalid options are silently ignored' exit 0 ;; esac done echo " prefix: $PREFIX" echo " config dir: $CFGDIR" echo " optimize for speed: $OPT" echo " include debugging symbols: $DBG" echo " x11 communication method: $X11" echo " use hotplug: $HOTPLUG" echo "" HAVE_ALLOCA_H=`check_header alloca.h` HAVE_MALLOC_H=`check_header malloc.h` HAVE_STDINT_H=`check_header stdint.h` HAVE_INTTYPES_H=`check_header inttypes.h` if [ "$X11" = "no" ]; then echo "WARNING: you have disabled the X11 interface, the resulting daemon \ won't be compatible with applications written for the proprietary 3Dconnexion \ daemon (3dxserv)!" echo else # find alternate X11 header/lib paths if [ -e /usr/local/include/X11/Xlib.h ]; then x11prefix='/usr/local' elif [ -e /usr/X11/include/X11/Xlib.h ]; then x11prefix='/usr/X11' elif [ -e /usr/X11R6/include/X11/Xlib.h ]; then x11prefix='/usr/X11R6' elif [ -e /opt/homebrew/include/X11/Xlib.h ]; then x11prefix='/opt/homebrew' fi if [ -n "$x11prefix" ]; then echo "X11 prefix: $x11prefix" x11inc=-I$x11prefix/include x11lib=-L$x11prefix/lib fi HAVE_XINPUT2_H=`check_header X11/extensions/XInput2.h` HAVE_XTEST_H=`check_header X11/extensions/XTest.h` if [ -z "$HAVE_XTEST_H" ]; then echo "WARNING: building without XTEST support, makes keyboard emulation \ less reliable (fallback to XSendEvent)." fi fi # create Makefile echo 'creating Makefile ...' echo "PREFIX = $PREFIX" >Makefile echo "srcdir = $srcdir" >>Makefile echo "ver = $VER" >>Makefile if [ "$DBG" = 'yes' ]; then echo 'dbg = -g' >>Makefile fi if [ "$OPT" = 'yes' ]; then echo 'opt = -O2' >>Makefile fi if [ "$X11" = 'yes' ]; then echo "xinc = $x11inc" >>Makefile echo "xlib = $x11lib" >>Makefile if [ -n "$HAVE_XINPUT2_H" ]; then echo 'xlib += -lXi' >>Makefile fi if [ -n "$HAVE_XTEST_H" ]; then echo xlib += -lXtst >>Makefile fi echo 'xlib += -lX11 -lXext' >>Makefile fi if [ -n "$CFLAGS" ]; then echo "add_cflags = $CFLAGS" >>Makefile fi if [ -n "$LDFLAGS" ]; then echo "add_ldflags = $LDFLAGS" >>Makefile fi cat "$srcdir/Makefile.in" >>Makefile # create config.h cfgheader=$srcdir/src/config.h echo 'creating config.h' echo '#ifndef CONFIG_H_' >$cfgheader echo '#define CONFIG_H_' >>$cfgheader echo >>$cfgheader if [ "$X11" = yes ]; then echo '#define USE_X11' >>$cfgheader echo >>$cfgheader fi if [ "$HOTPLUG" = yes ]; then echo '#define USE_NETLINK' >>$cfgheader echo >>$cfgheader fi echo '#define VERSION "'$VER'"' >>$cfgheader echo >>$cfgheader # check for alloca.h [ -n "$HAVE_ALLOCA_H" ] && echo $HAVE_ALLOCA_H >>$cfgheader [ -n "$HAVE_MALLOC_H" ] && echo $HAVE_MALLOC_H >>$cfgheader [ -n "$HAVE_STDINT_H" ] && echo $HAVE_STDINT_H >>$cfgheader [ -n "$HAVE_INTTYPES_H" ] && echo $HAVE_INTTYPES_H >>$cfgheader [ -n "$HAVE_XINPUT2_H" ] && echo $HAVE_XINPUT2_H >>$cfgheader [ -n "$HAVE_XTEST_H" ] && echo $HAVE_XTEST_H >>$cfgheader echo >>$cfgheader echo "#define CFGDIR \"$CFGDIR\"" >>$cfgheader echo >>$cfgheader echo '#endif /* CONFIG_H_ */' >>$cfgheader echo '' echo 'Done. You can now type make (or gmake) to compile spacenavd.' echo ''