0
0
mirror of https://github.com/ecki/net-tools.git synced 2024-09-22 04:10:55 +00:00
net-tools/configure.sh
Gilles Espinasse e8165523c7 Minor mostly comments typo fixes
Signed-off-by: Gilles Espinasse <g.esp@free.fr>
2013-04-25 20:49:52 +00:00

182 lines
4.0 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# configure.sh Generates interactively a config.h from config.in
#
# net-tools A collection of programs that form the base set of the
# NET-3 Networking Distribution for the LINUX operating
# system.
#
# Usage: Install.sh [--nobackup] [--test]
#
# Version: Install.sh 1.65 (1996-01-12)
#
# Authors: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
# Johannes Grosen, <grosen@argv.cs.ndsu.nodak.edu>
# Copyright 1988-1993 MicroWalt Corporation
#
# Modified:
# {1.65} Bernd eckes Eckenfels <net-tools@lina.inka.de>
# some layout cleanups, slattach/plipconfig removed.
# --test for testinstallations added.
#
# This program 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 2 of the License, or (at
# your option) any later version.
#
#
# Make sure we're really running bash.
#
# I would really have preferred to write this script in a language with
# better string handling, but alas, bash is the only scripting language
# that I can be reasonable sure everybody has on their Linux machine.
#
CONFIG=config.h
MAKECONFIG=config.make
[ -z "$BASH" ] && { echo "configure.sh requires bash" 1>&2; exit 1; }
cat <<EOF
######################################################
Notice: ifconfig and route are now installed into /bin
######################################################
EOF
# Disable filename globbing once and for all.
# Enable function cacheing.
set -f -h
# set up reading of config file
if [ "$#" != "1" ] || [ ! -f "$1" ]; then
echo "usage: $0 configfile" 1>&2
exit 1
fi
exec 7<$1
config_fd_redir='<&7'
#
# readln reads a line into $ans.
#
# readln prompt default
#
function readln()
{
echo -n "$1"
IFS='@' read ans || exit 1
[ -z "$ans" ] && ans=$2
}
# bool processes a boolean argument
#
# bool tail
#
function bool()
{
# Slimier hack to get bash to rescan a line.
eval "set -- $1"
ans=""
while [ "$ans" != "y" -a "$ans" != "n" ]
do
readln "$1 ($2) [$3] " "$3"
done
if [ "$ans" = "y" ]; then
echo "#define $2 1" >>${CONFIG}
echo "$2=1" >>${MAKECONFIG}
else
echo "#define $2 0" >>${CONFIG}
echo "# $2=0" >> ${MAKECONFIG}
fi
raw_input_line="bool '$1' $2 $ans"
eval "$2=$ans"
}
# int processes an integer argument
#
# int tail
#
function int()
{
# Slimier hack to get bash to rescan a line.
eval "set -- $1"
ans="x"
while [ $[$ans+0] != "$ans" ];
do
readln "$1 ($2) [$3] " "$3"
done
echo "#define $2 ($ans)" >>${CONFIG}
raw_input_line="int '$1' $2 $ans"
eval "$2=$ans"
}
#
# Make sure we start out with a clean state.
#
> config.new
> ${CONFIG}
> ${MAKECONFIG}
stack=''
branch='t'
while IFS='@' eval read raw_input_line ${config_fd_redir}
do
# Slimy hack to get bash to rescan a line.
read cmd rest <<-END_OF_COMMAND
$raw_input_line
END_OF_COMMAND
if [ "$cmd" = "*" ]; then
if [ "$branch" = "t" ]; then
echo "$raw_input_line"
# echo "# $rest" >>$CONFIG
if [ "$prevcmd" != "*" ]; then
echo >>${CONFIG}
echo "/* $rest" >>${CONFIG}
else
echo " * $rest" >>${CONFIG}
fi
prevcmd="*"
fi
else
[ "$prevcmd" = "*" ] && echo " */" >>${CONFIG}
prevcmd=""
case "$cmd" in
=) [ "$branch" = "t" ] && echo "$rest" >>${CONFIG};;
:) [ "$branch" = "t" ] && echo "$raw_input_line" ;;
int) [ "$branch" = "t" ] && int "$rest" ;;
bool) [ "$branch" = "t" ] && bool "$rest" ;;
exec) [ "$branch" = "t" ] && ( sh -c "$rest" ) ;;
if) stack="$branch $stack"
if [ "$branch" = "t" ] && eval "$rest"; then
branch=t
else
branch=f
fi ;;
else) if [ "$branch" = "t" ]; then
branch=f
else
read branch rest <<-END_OF_STACK
$stack
END_OF_STACK
fi ;;
fi) [ -z "$stack" ] && echo "Error! Extra fi." 1>&2
read branch stack <<-END_OF_STACK
$stack
END_OF_STACK
;;
esac
fi
echo "$raw_input_line" >>config.new
done
[ "$prevcmd" = "*" ] && echo " */" >>${CONFIG}
[ -z "$stack" ] || echo "Error! Unterminated if." 1>&2
mv config.new config.status
exit 0