#!/bin/bash # # Configure # # linux-wlan Open Sourc Project # # Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. # ------------------------------------------------------------------------- # # Inquiries regarding the linux-wlan Open Source Project can be # made directly to: # # AbsoluteValue Systems Inc. # info@linux-wlan.com # http://www.linux-wlan.com # # ------------------------------------------------------------------------- # TODO: Since we're dependent on configured pcmcia source, we should change # this such that it will ask for the pcmcia source dir and then read # all our stuff from pcmcia/config.mk. Would simplify alot of things. # ------------------------------------------------------------------------- # # This script adapted from the pcmcia-cs/Configure file, license statement below: # # pcmcia-cs/Configure 1.110 1999/06/24 17:37:36 # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and # limitations under the License. # # The initial developer of the Configure code is David A. Hinds # . Portions created by David A. Hinds # are Copyright (C) 1998 David A. Hinds. All Rights Reserved. #------------------------------------------------------------------------- ECHO="/bin/echo -e " fail () { $ECHO "" $ECHO "Configuration failed" $ECHO "" exit 1 } usage () { $ECHO "usage: Configure [-h|help|-d [filename]|-f ]" $ECHO "" $ECHO " -h|help - display usage info" $ECHO " -d [filename] - automated configuration with option to specify input file" $ECHO " -f - read configuration data from file and prompt user" exit 1 } if [ ! -r config.in ]; then $ECHO "config.in does not exist!" fail fi . ./config.in if [ -r config.out ]; then . ./config.out 2>/dev/null fi PROMPT=y if [ $# -gt 0 ] ; then if [ "$1" = "-h" -o "$1" = "help" ] ; then usage fi if [ "$1" = "-d" -o "$1" = "-f" ] ; then if [ $# -gt 1 ] ; then if [ -r $2 ]; then . $2 else $ECHO "$2 does not exist" fail fi else if [ "$1" = "-f" ] ; then usage fi fi if [ "$1" = "-d" ] ; then PROMPT=n fi fi fi #======================================================================= CONFIG=config.new CONFIG_MK=config.mk rm -f $CONFIG $CONFIG_MK $MODVER cat << 'EOF' > $CONFIG # # Automatically generated by 'make config' -- don't edit! # EOF write_bool() { value=`eval $ECHO '$'$1` if [ "$value" = "y" ] ; then $ECHO "$1=y" >> $CONFIG $ECHO "$1=y" >> $CONFIG_MK else $ECHO "# $1 is not defined" >> $CONFIG $ECHO "# $1 is not defined" >> $CONFIG_MK fi } write_str () { value=`eval $ECHO '$'$1` $ECHO "$1"=\"$value\" >> $CONFIG $ECHO "$1=$value" >> $CONFIG_MK } dump_str () { $ECHO "$1" >> $CONFIG $ECHO "$1" >> $CONFIG_MK } prompt () { eval $3=\"$2\" if [ "$PROMPT" = "y" ] ; then $ECHO "$1 [$2]: \c" read tmp if [ -n "$tmp" ] ; then eval $3=\"$tmp\" ; fi else $ECHO "$1 [$2]" fi } ask_bool () { default=`eval $ECHO '$'$2` if [ ! "$default" ] ; then default=n ; fi answer="" while [ "$answer" != "n" -a "$answer" != "y" ] ; do prompt "$1 (y/n)" "$default" answer done eval "$2=$answer" write_bool $2 } ask_str () { default=`eval $ECHO '$'$2` prompt "$1" "`$ECHO $default`" answer eval $2=\"$answer\" write_str $2 } mkversionh () { versionh=src/include/wlan/version.h cp src/version.h.in $versionh DATE=`date` printf '#define WLAN_RELEASE\t"%d.%d.%d%s"\n' \ ${WLAN_VERSION} \ ${WLAN_PATCHLEVEL} \ ${WLAN_SUBLEVEL} \ ${WLAN_EXTRAVERSION} >> $versionh printf '#define WLAN_RELEASE_CODE 0x%02x%02x%02x\n' \ ${WLAN_VERSION} \ ${WLAN_PATCHLEVEL} \ ${WLAN_SUBLEVEL} >> $versionh echo "#define WLAN_BUILD_DATE \"$DATE\" " >> $versionh printf '\n' >> $versionh printf '#endif\n' >> $versionh } #======================================================================= # If the src/include/wlan/version.h file needs a touchup, fix or create it if [ -r src/include/wlan/version.h ]; then WLAN_RELEASE="${WLAN_VERSION}.${WLAN_PATCHLEVEL}.${WLAN_SUBLEVEL}${WLAN_EXTRAVERSION}" OLD_RELEASE=`sed --quiet -e '/#define.*WLAN_RELEASE[^_].*\"\(.*\)\"/s//\1/p' < src/include/wlan/version.h` if [ "${WLAN_RELEASE}" != "${OLD_RELEASE}" ]; then # Overwrite the file mkversionh fi else # File doesn't exist, create it mkversionh fi $ECHO "" $ECHO "-------------- Linux WLAN Configuration Script -------------" $ECHO "" $ECHO "The default responses are correct for most users." $ECHO "" #======================================================================= # Should we build for PCMCIA Card Services? ask_bool "Build Prism2.x PCMCIA Card Services (_cs) driver?" PRISM2_PCMCIA #======================================================================= # Should we build for PLX9052 based PCI adapters? ask_bool "Build Prism2 PLX9052 based PCI (_plx) adapter driver?" PRISM2_PLX #======================================================================= # Should we build for Prism2 native PCI? ask_bool "Build Prism2.5 native PCI (_pci) driver?" PRISM2_PCI #======================================================================= # Should we build for Prism2.5 USB? ask_bool "Build Prism2.5 USB (_usb) driver?" PRISM2_USB $ECHO "" #======================================================================= # Collect the kernel source tree and test for sanity ask_str "Linux source directory" LINUX_SRC if [ ! -f $LINUX_SRC/include/linux/version.h ] ; then $ECHO "Linux source tree $LINUX_SRC is incomplete or missing!" if [ -d $LINUX_SRC/include/linux ] ; then $ECHO " The kernel header files are present, but not " \ "the full source code." fi $ECHO " See the HOWTO for a list of FTP sites for current" \ "kernel sources." fail fi KERNEL_SOURCE=$LINUX_SRC make -Cscripts 2>&1 > /dev/null . scripts/make.opts # What kernel are we compiling for? version () { expr $1 \* 65536 + $2 \* 256 + $3 } $ECHO "" SRC_RELEASE="$KERNEL_RELEASE" VERSION_CODE=`grep LINUX_VERSION_CODE $LINUX_SRC/include/linux/version.h | \ sed -e 's/[^0-9]//g'` $ECHO "The kernel source tree is version $SRC_RELEASE." if [ $VERSION_CODE -lt `version 2 2 0` ] ; then $ECHO "This package requires at least a 2.2.x series kernel." fail fi if [ $VERSION_CODE -gt `version 2 5 0` ] ; then $ECHO "Kernel 2.5/2.6 support is highly experimental." KERN_25=y write_bool KERN_25 fi CUR_RELEASE=`uname -r` if [ "$SRC_RELEASE" != "$CUR_RELEASE" ] ; then $ECHO "WARNING: the current running kernel is actually version $CUR_RELEASE." fi if [ ! -f $LINUX_SRC/.config ] ; then $ECHO "WARNING: .config not present in kernel source tree. This will" $ECHO " screw up modversions detection and build optimizations." $ECHO " Is this a RedHat kernel? Workarounds enabled." if [ -f $LINUX_SRC/include/linux/modversions.h ] ; then KERNEL_MODFLAGS="-DMODULE -DMODVERSIONS -include $LINUX_SRC/include/linux/modversions.h" fi $ECHO " For an optimized build, copy over the relevent file from" $ECHO " $LINUX_SRC/configs/ to $LINUX_SRC/.config" fi # Check for consistent kernel build dates CUR_D=`uname -v | sed -e 's/^#[0-9]* //;s/SMP //'` CUR_D=`$ECHO $CUR_D | sed -e 's/\(:[0-9][0-9]\) .* \([12][90]\)/\1 \2/'` $ECHO "The current kernel build date is $CUR_D." UTS_VERSION="unknown"; if [ -f $LINUX_SRC/include/linux/compile.h ] ; then UTS_VERSION=`grep UTS_VERSION $LINUX_SRC/include/linux/compile.h | sed -e 's/.*"\(.*\)"/\1/'` SRC_D=`$ECHO $UTS_VERSION | sed -e 's/^#[0-9]* //;s/SMP //'` SRC_D=`$ECHO $SRC_D | sed -e 's/\(:[0-9][0-9]\) .* \([12][90]\)/\1 \2/'` if [ $SRC_RELEASE = $CUR_RELEASE -a "$SRC_D" != "$CUR_D" ] ; then $ECHO "WARNING: the source tree has a build date of $SRC_D." if [ `date -d "$SRC_D" +%s` -gt `date -d "$CUR_D" +%s` ] ; then $ECHO " Did you forget to install your new kernel?!?" fi fi fi $ECHO "" # Test for netlink availability in the kernel if grep -sq "#define.*CONFIG_NETLINK.*1" ${LINUX_SRC}/include/linux/autoconf.h; then CONFIG_NETLINK=y else CONFIG_NETLINK=n fi write_bool CONFIG_NETLINK # Test for pf_packet availability in the kernel if grep -sq "#define.*CONFIG_PACKET.*1" ${LINUX_SRC}/include/linux/autoconf.h; then CONFIG_PACKET=y else CONFIG_PACKET=n fi write_bool CONFIG_PACKET # Test for pf_packet availability in the kernel if grep -sq "#define.*CONFIG_HOTPLUG.*1" ${LINUX_SRC}/include/linux/autoconf.h; then CONFIG_HOTPLUG=y else CONFIG_HOTPLUG=n fi write_bool CONFIG_HOTPLUG # test to see if __KERNEL__ is defined in KERNEL_CFLAGS # if not, $KERNEL_CFLAGS += __KERNEL__ grep __KERNEL__ < scripts/make.opts > /dev/null if [ $? = 1 ] ; then KERNEL_CFLAGS="-D__KERNEL__ -I$LINUX_SRC/include $KERNEL_CFLAGS" fi dump_str "KERNEL_CFLAGS=$KERNEL_CFLAGS" dump_str "KERNEL_MODFLAGS=$KERNEL_MODFLAGS" #======================================================================= # If compiling for pcmcia-cs, find the PCMCIA source tree if [ $PRISM2_PCMCIA = "y" ] ; then # Should we build for Kernel based PCMCIA? WLAN_KERN_PCMCIA=y grep 'define CONFIG_PCMCIA' < $LINUX_SRC/include/linux/autoconf.h > /dev/null if [ $? = 1 ] ; then WLAN_KERN_PCMCIA=n fi write_bool WLAN_KERN_PCMCIA # We only need the pcmcia source directory if we're NOT building for # kernel PCMCIA. if [ $WLAN_KERN_PCMCIA != "y" ] ; then if [ ! "$PCMCIA_SRC" ] ; then if [ -f /sbin/cardctl ] ; then PCMCIA_SRC=`/sbin/cardctl -V 2>&1 | sed -e 's/cardctl version //'` PCMCIA_SRC=/usr/src/pcmcia-cs-$PCMCIA_SRC fi fi ask_str "pcmcia-cs source dir" PCMCIA_SRC if [ ! -f $PCMCIA_SRC/Makefile ] ; then $ECHO "pcmcia-cs source tree $PCMCIA_SRC is incomplete or missing!" $ECHO "The wlan driver for pcmcia cannot be built without " $ECHO "the pcmcia-cs source tree present and configured." fail fi if [ ! -f $PCMCIA_SRC/include/pcmcia/config.h ] ; then $ECHO "The pcmcia-cs source tree does not appear to be configured." $ECHO "The wlan driver for pcmcia cannot be built without "\ $ECHO "the pcmcia-cs source tree present and configured." fail fi $ECHO "" # Now we need to generate the module options flags. # It's only relevant if modversions is turned on. grep CONFIG_MODVERSIONS=y < $PCMCIA_SRC/config.mk > /dev/null if [ $? = 0 ] ; then PCMCIA_MODFLAGS="-DMODULE -DMODVERSIONS -include $PCMCIA_SRC/include/linux/modversions.h" else PCMCIA_MODFLAGS="-DMODULE" fi # new versions of pcmcia-cs don't generate their own modversion.h # if they don't have it, use the kernel module flags instead. if [ ! -f $PCMCIA_SRC/include/linux/modversions.h ] ; then PCMCIA_MODFLAGS="$KERNEL_MODFLAGS" fi dump_str "PCMCIA_MODFLAGS=$PCMCIA_MODFLAGS" fi fi #======================================================================= # Alternate target install root dir - the value of this variable # will prefix other variables, such as modules and pcmcia directories ask_str "Alternate target install root directory on host" TARGET_ROOT_ON_HOST if [ $PRISM2_PCMCIA = "y" ] ; then # PCMCIA script dir ask_str "PCMCIA script directory" PCMCIA_DIR TARGET_PCMCIA_DIR=$TARGET_ROOT_ON_HOST$PCMCIA_DIR write_str TARGET_PCMCIA_DIR fi MODDIR=/lib/modules/$SRC_RELEASE ask_str " Module install directory" MODDIR TARGET_MODDIR=$TARGET_ROOT_ON_HOST$MODDIR write_str TARGET_MODDIR $ECHO "" # Just write some out (we're not prompting right now) write_str INST_EXEDIR TARGET_INST_EXEDIR=$TARGET_ROOT_ON_HOST$INST_EXEDIR write_str TARGET_INST_EXEDIR #======================================================================= # How should the startup scripts be configured? SYSV_INIT=n if [ "$PREFIX" = "" ] ; then if [ -d /etc/rc.d/init.d -o -d /etc/init.d -o -d /sbin/init.d ] ; then $ECHO "It looks like you have a System V init file setup." SYSV_INIT=y if [ -d /etc/rc.d/init.d ] ; then $ECHO "RC_DIR=/etc/rc.d" >> $CONFIG $ECHO "RC_DIR=/etc/rc.d" >> $CONFIG_MK elif [ -d /sbin/init.d ] ; then $ECHO "RC_DIR=/sbin" >> $CONFIG $ECHO "RC_DIR=/sbin" >> $CONFIG_MK else $ECHO "RC_DIR=/etc" >> $CONFIG $ECHO "RC_DIR=/etc" >> $CONFIG_MK fi else $ECHO "It looks like you have a BSD-ish init file setup." if ! grep rc.wlan /etc/rc.d/rc.S >/dev/null ; then $ECHO " You'll need to edit /etc/rc.d/rc.S to invoke" \ "/etc/rc.d/rc.wlan (for ISA/PCMCIA cards)" $ECHO " so that wlan cards will be started at boot time." fi SYSV_INIT=n fi write_bool SYSV_INIT else ask_bool "System V init script layout" SYSV_INIT if [ "$SYSV_INIT" = "y" ] ; then ask_str "Top-level directory for RC scripts" RC_DIR fi fi if [ ! -x $TARGET_ROOT_ON_HOST/sbin/depmod ] ; then INSTALL_DEPMOD=n ; fi write_bool INSTALL_DEPMOD $ECHO "" #======================================================================= # Make sure our target architecture is correct $ECHO "" ask_str "Prefix for build host compiler? (rarely needed)" HOST_COMPILE dump_str "HOST_CFLAGS=$HOST_CFLAGS" $ECHO "" dump_str 'HOST_AS=$(HOST_COMPILE)as' dump_str 'HOST_LD=$(HOST_COMPILE)ld' dump_str 'HOST_CC=$(HOST_COMPILE)gcc' dump_str 'HOST_CPP=$(HOST_CC) -E' dump_str 'HOST_AR=$(HOST_COMPILE)ar' dump_str 'HOST_NM=$(HOST_COMPILE)nm' dump_str 'HOST_STRIP=$(HOST_COMPILE)strip' dump_str 'HOST_OBJCOPY=$(HOST_COMPILE)objcopy' dump_str 'HOST_OBJDUMP=$(HOST_COMPILE)objdump' dump_str 'HOST_RANLIB=$(HOST_COMPILE)ranlib' dump_str 'HOST_MAKE=make' CROSS_COMPILE_ENABLED=y if [ "_$CROSS_COMPILE" = "_" ] ; then CROSS_COMPILE_ENABLED=n fi write_str CROSS_COMPILE write_bool CROSS_COMPILE_ENABLED #dump_str 'CFLAGS=-O2 -Wall -Wstrict-prototypes -pipe' if [ "_$CROSS_COMPILE" = "_" ] ; then dump_str 'AS=$(HOST_COMPILE)as' dump_str 'LD=$(HOST_COMPILE)ld' dump_str 'CC=$(HOST_COMPILE)gcc' dump_str 'CPP=$(HOST_CC) -E' dump_str 'AR=$(HOST_COMPILE)ar' dump_str 'NM=$(HOST_COMPILE)nm' dump_str 'STRIP=$(HOST_COMPILE)strip' dump_str 'OBJCOPY=$(HOST_COMPILE)objcopy' dump_str 'OBJDUMP=$(HOST_COMPILE)objdump' dump_str 'RANLIB=$(HOST_COMPILE)ranlib' dump_str 'MAKE=make' else dump_str "AS=$CROSS_COMPILE"as dump_str "LD=$CROSS_COMPILE"ld dump_str "CC=$CROSS_COMPILE"gcc CC="$CROSS_COMPILE"gcc dump_str "CPP=$CC -E" dump_str "AR=$CROSS_COMPILE"ar dump_str "NM=$CROSS_COMPILE"nm dump_str "STRIP=$CROSS_COMPILE"strip dump_str "OBJCOPY=$CROSS_COMPILE"objcopy dump_str "OBJDUMP=$CROSS_COMPILE"objdump dump_str "RANLIB=$CROSS_COMPILE"ranlib dump_str "MAKE=make" fi #======================================================================= # Should we build for debugging? ask_bool "Build for debugging (see doc/config.debug)" WLAN_DEBUG $ECHO "" FIRMWARE_DIR="/etc/wlan/" write_str FIRMWARE_DIR mv $CONFIG config.out $ECHO "" $ECHO "Configuration successful." $ECHO ""