#!/bin/bash
|
|
#
|
|
# --- ROCK-COPYRIGHT-NOTE-BEGIN ---
|
|
#
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
# Please add additional copyright information _after_ the line containing
|
|
# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
|
|
# the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
|
|
#
|
|
# ROCK Linux: rock-src/scripts/Config
|
|
# ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
|
|
#
|
|
# 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. A copy of the GNU General Public
|
|
# License can be found at Documentation/COPYING.
|
|
#
|
|
# Many people helped and are helping developing ROCK Linux. Please
|
|
# have a look at http://www.rocklinux.org/ and the Documentation/TEAM
|
|
# file for details.
|
|
#
|
|
# --- ROCK-COPYRIGHT-NOTE-END ---
|
|
|
|
if [ -z "${lines:=$LINES}" -o -z "${columns:=$COLUMNS}" ] ; then
|
|
if [ "$( type -p stty )" ] ; then
|
|
lines="$( stty size | cut -d' ' -f1 )"
|
|
columns="$( stty size | cut -d' ' -f2 )"
|
|
fi
|
|
[ -z "$lines" -o "$lines" -le 0 ] 2> /dev/null && lines=24
|
|
[ -z "$columns" -o "$columns" -le 0 ] 2> /dev/null && columns=80
|
|
fi
|
|
|
|
eval "$(egrep '^rockver=' scripts/parse-config)"
|
|
|
|
config=default
|
|
do_config_cycle=0
|
|
delete_mode=0
|
|
oldconfig=''
|
|
|
|
while [ "$1" ] ; do
|
|
case "$1" in
|
|
-cycle) do_config_cycle=1 ; shift ;;
|
|
-delete) delete_mode=1 ; shift ;;
|
|
-oldconfig) oldconfig='-oldconfig' ; shift ;;
|
|
-cfg) config="$2" ; shift ; shift ;;
|
|
|
|
*)
|
|
echo "Usage: $0 [ -delete | -oldconfig ] [ -cfg <config> ]"
|
|
exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
if [ $delete_mode = 1 ] ; then
|
|
rm -rv config/$config
|
|
exit $?
|
|
fi
|
|
|
|
if [ $do_config_cycle = 0 ] ; then
|
|
|
|
rm -f config.data config.dialog config.out config.help
|
|
rm -f config.pcache.data config.pcache.cmd
|
|
rm -f rockdialog.scrltmp # src/rockdialog.bin
|
|
mkdir -p src
|
|
|
|
if [ -z "$oldconfig" -a ! -f src/rockdialog.bin ] ; then
|
|
echo "Creating rockdialog tool ..."
|
|
command="gcc misc/rockdialog/*.c `
|
|
`-Imisc/rockdialog -lncurses -o src/rockdialog.bin"
|
|
echo "$command" ; eval "$command.$$"
|
|
mv src/rockdialog.bin.$$ src/rockdialog.bin
|
|
fi
|
|
|
|
echo "Creating configuration script ..."
|
|
cat << "EOT" > src/rockconfig.awk.$$
|
|
#!/usr/bin/awk -f
|
|
|
|
FNR == 1 {
|
|
if ( lastfile ) {
|
|
print "### END of " lastfile;
|
|
}
|
|
print "### BEGIN of " FILENAME;
|
|
lastfile = FILENAME;
|
|
}
|
|
|
|
END {
|
|
print "### END of " FILENAME;
|
|
}
|
|
|
|
$1 == "%include" {
|
|
$1 = "awk -f src/rockconfig.awk";
|
|
system($0);
|
|
next;
|
|
}
|
|
|
|
$1 == "#" { next; }
|
|
{ print; }
|
|
EOT
|
|
mv src/rockconfig.awk.$$ src/rockconfig.awk
|
|
awk -f src/rockconfig.awk scripts/config.in > src/rockconfig.in.$$ 2> /dev/null
|
|
mv src/rockconfig.in.$$ src/rockconfig.in
|
|
|
|
echo "Running ROCK Linux $rockver configuration ..."
|
|
while "$0" -cfg $config $oldconfig -cycle ; do : ; done
|
|
|
|
exit 0
|
|
fi
|
|
|
|
set_help() {
|
|
(echo -ne "$1 '$1:\n\n$2'" | sed 's,$,\\n,' |
|
|
tr -d '\n' | sed 's,\\n$,,'; echo ) >> config.help
|
|
}
|
|
|
|
comment() {
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] && \
|
|
[ $menu_current = $menu_this ] ; then
|
|
commentnr=$(( $commentnr + 1 ))
|
|
echo "COMMENT_$commentnr '$spacer$1'" >> config.dialog
|
|
|
|
# Hi, esden here, very ill stuff here I save the help
|
|
# strings here to a temporary file named config.help
|
|
# this sed tr sandwitch formats the string so that
|
|
# \n are masked and the Help strings are not killed some way
|
|
if [ "$2" != "" ] ; then
|
|
set_help "COMMENT_$commentnr" "$2"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
comment_id() {
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] &&
|
|
[ $menu_current = $menu_this ] ; then
|
|
echo "$2 '$spacer$1'" >> config.dialog
|
|
|
|
# If you do not know what mighty esden
|
|
# is doing here see comment()
|
|
if [ "$3" != "" ] ; then
|
|
set_help "$2" "$3"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
const() {
|
|
eval "$1=\"\$2\""
|
|
echo "export $1='$2'" >> config/$config/config
|
|
}
|
|
|
|
# Usage: set_data NAME DEFAULT
|
|
#
|
|
set_data() {
|
|
set_name="ROCKCFGSET_${1#ROCKCFG_}"
|
|
|
|
if eval "[ \"\$$set_name\" ]" ; then
|
|
eval "data=\"\$$set_name\""
|
|
eval "$1=\"\$data\""
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ]
|
|
then menumode=2 ; else menumode=0 ; fi
|
|
|
|
elif [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] ; then
|
|
eval "data=\"\${$1:-$2}\""
|
|
eval "$1=\"\$data\""
|
|
menumode=1
|
|
else
|
|
data="$2" ; eval "$1=\"\$data\""
|
|
menumode=0
|
|
fi
|
|
|
|
item="$1"
|
|
echo "export $1='$data'" >> config/$config/config
|
|
}
|
|
|
|
choice() {
|
|
|
|
# reset to default if current value is not in list
|
|
#
|
|
eval $(
|
|
eval "value=\$$1" ; name=$1 ; shift ; shift
|
|
while [ "$#" != 0 ] ; do
|
|
[ "$value" = "$1" ] && name="" ; shift ; shift
|
|
done
|
|
[ "$name" ] && echo "unset $name"
|
|
)
|
|
|
|
set_data "$1" "$2"
|
|
|
|
if [ "$menumode" -eq 1 -a $menu_current = $menu_this ] ; then
|
|
{ echo -en "$item\tchoice_action '$1' '$data'" ; shift ; shift
|
|
for x ; do echo -n " '$x'" ; done ; echo ; } >> config.data
|
|
fi
|
|
|
|
if [ "$menumode" -gt 0 -a $menu_current = $menu_this ] ; then
|
|
if [ "$menumode" -eq 1 ] ; then xdata="($data)"
|
|
else xdata="=$data=" ; fi
|
|
|
|
while [ "$1" -a "$1" != "$data" ] ; do shift ; shift ; done
|
|
printf "'$item' '$spacer%-${tabspace}s ${2//_/ }'\n" \
|
|
"$xdata" >> config.dialog
|
|
fi
|
|
}
|
|
|
|
choice_action() {
|
|
command="./src/rockdialog.bin --title 'Build Config' \
|
|
--backtitle '$configtitle' \
|
|
--radiolist 'Arrow keys navigate the menu. Press <Enter> to activate menu items. Highlighted letters are hotkeys.' \
|
|
$(( $lines - 4 )) $(( $columns - 5 )) $(( $lines - 12 ))"
|
|
default=$2 ; item=$1 ; shift ; shift
|
|
while [ "$1" ] ; do
|
|
if [ "$1" = "$default" ]
|
|
then command="$command '$1' '${2//_/ }' ON"
|
|
else command="$command '$1' '${2//_/ }' OFF" ; fi
|
|
shift ; shift
|
|
done
|
|
eval "$command" 2> config.out
|
|
|
|
case "$?" in
|
|
0|6)
|
|
eval "$item='`cat config.out`'"
|
|
;;
|
|
1|255) return 0 ;;
|
|
2) echo "No help." ; sleep 1 ;;
|
|
*) echo "unknown returncode: $?" ; exit 1 ;;
|
|
esac
|
|
}
|
|
|
|
text() {
|
|
set_data "$2" "$3"
|
|
|
|
if [ "$menumode" -eq 1 -a $menu_current = $menu_this ] ; then
|
|
echo -e "$2\ttext_action '$1' '$2' '$data'" >> config.data
|
|
fi
|
|
|
|
if [ "$menumode" -gt 0 -a $menu_current = $menu_this ] ; then
|
|
xdata="$(echo $data | cut -c1-20)"
|
|
if [ "$menumode" -eq 1 ] ; then xdata="($xdata)"
|
|
else xdata="=$xdata=" ; fi
|
|
|
|
printf "'$2' '$spacer%-${tabspace}s $1'\n" \
|
|
"$xdata" >> config.dialog
|
|
|
|
# If you do not know what mighty esden is doin here see comment()
|
|
if [ "$4" != "" ] ; then
|
|
set_help "$2" "$4"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
text_action() {
|
|
./src/rockdialog.bin --title 'Build Config' \
|
|
--backtitle "$configtitle" \
|
|
--inputbox "$1" 9 $(( $columns - 5 )) "$3" 2> config.out
|
|
[ "$?" -eq 0 -o "$?" -eq 1 ] && eval "$2='`cat config.out`'"
|
|
}
|
|
|
|
bool() {
|
|
local x
|
|
set_data "$2" "$3"
|
|
|
|
if [ "$menumode" -eq 1 -a $menu_current = $menu_this ] ; then
|
|
echo -e "$2\tbool_action '$1' '$2' '$data'" >> config.data
|
|
fi
|
|
|
|
if [ "$menumode" -gt 0 -a $menu_current = $menu_this ] ; then
|
|
if [ "$menumode" -eq 1 ] ; then
|
|
if [ $data -eq 0 ] ; then x='[ ]' ; else x='[*]' ; fi
|
|
else
|
|
if [ $data -eq 0 ] ; then x='= =' ; else x='=*=' ; fi
|
|
fi
|
|
printf "$2 '$spacer%-${tabspace}s ${1//_/ }'\n" \
|
|
"$x" >> config.dialog
|
|
|
|
# If you do not know what mighty esden is doin here see comment()
|
|
if [ "$4" != "" ] ; then
|
|
set_help "$2" "$4"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
bool_action() {
|
|
if [ $3 -eq 0 ] ; then eval "$2=1"
|
|
else eval "$2=0" ; fi
|
|
}
|
|
|
|
editfile() {
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] ; then
|
|
local x="$spacer"
|
|
comment ",----< $3 >----."
|
|
block_begin 0 ; spacer="${spacer%??}| "
|
|
|
|
touch "$2"
|
|
line_nr=1
|
|
while read line ; do
|
|
if [ $menu_current = $menu_this ] ; then
|
|
printf "$1:${editfilenr} '$spacer%-${tabspace}s %s'\n" \
|
|
`printf "%03d:" $line_nr` "$line" >> config.dialog
|
|
|
|
echo -e "$1:${editfilenr}\teditfile_action $2" \
|
|
"$line_nr '$3'" >> config.data
|
|
fi
|
|
|
|
editfilenr=$(( $editfilenr + 1 ))
|
|
line_nr=$(( $line_nr + 1 ))
|
|
done < "$2"
|
|
|
|
if [ $menu_current = $menu_this ] ; then
|
|
printf "$1:${editfilenr} '$spacer%-${tabspace}s %s'\n" \
|
|
`printf "%03d:" $line_nr` "<add new rule>" >> config.dialog
|
|
|
|
echo -e "$1:${editfilenr}\teditfile_action $2" \
|
|
"$line_nr '$3'" >> config.data
|
|
fi
|
|
|
|
editfilenr=$(( $editfilenr + 1 ))
|
|
|
|
block_end
|
|
comment "\`------${3//?/-}------'\''"
|
|
spacer="$x"
|
|
else
|
|
rm -f "$2"
|
|
fi
|
|
}
|
|
|
|
editfile_action() {
|
|
line="`tail +$2 $1 | head -1`"
|
|
|
|
./src/rockdialog.bin --title 'Build Config' \
|
|
--backtitle "$configtitle" \
|
|
--inputbox "$3 - Line $3" \
|
|
9 $(( $columns - 5 )) "$line" 2> config.out
|
|
|
|
head -$(( $2 - 1 )) $1 > $1.new
|
|
[ -s config.out ] && echo "`cat config.out`" >> $1.new
|
|
tail +$(( $2 + 1 )) $1 >> $1.new
|
|
|
|
mv $1.new $1
|
|
}
|
|
|
|
startprog() {
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] &&
|
|
[ $menu_current = $menu_this ] ; then
|
|
printf "$1 '$spacer%-${tabspace}s %s'\n" \
|
|
"-->" "$2" >> config.dialog
|
|
echo -e "$1\t$3" >> config.data
|
|
fi
|
|
}
|
|
|
|
block_begin() {
|
|
if [ $menu_current = $menu_this ] ; then
|
|
[ "$tabspace_list" ] && spacer="$spacer "
|
|
tabspace_list="$tabspace $tabspace_list"
|
|
tabspace="$(( $tabspace + $1 - 2 ))"
|
|
fi
|
|
}
|
|
|
|
block_end() {
|
|
if [ $menu_current = $menu_this ] ; then
|
|
spacer="`echo "$spacer" | sed 's,..$,,'`" ;
|
|
tabspace="`echo $tabspace_list | cut -f1 -d' '`"
|
|
tabspace_list="`echo $tabspace_list | cut -s -f2- -d' '`"
|
|
fi
|
|
}
|
|
|
|
expert_begin() {
|
|
expert=$(( $exprt + 1 ))
|
|
}
|
|
|
|
expert_end() {
|
|
expert=$(( $exprt - 1 ))
|
|
}
|
|
|
|
menu_begin() {
|
|
menu_counter=$(( $menu_counter + 1 ))
|
|
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] &&
|
|
[ $menu_current = $menu_this ] ; then
|
|
printf "$1 '$spacer%-${tabspace}s %s'\n" \
|
|
"===>" "$2" >> config.dialog
|
|
echo -e "$1\tmenu_current=$menu_counter" >> config.data
|
|
fi
|
|
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] &&
|
|
[ $menu_current = $menu_counter ] ; then
|
|
echo "$1 '===> $2'" >> config.dialog
|
|
echo -e "$1\tmenu_current=$menu_this" >> config.data
|
|
fi
|
|
|
|
if [ $menu_current = $menu_counter ] ; then
|
|
menu_back=$menu_this
|
|
menu_backpos=$1
|
|
fi
|
|
|
|
menu_stack="$menu_this $menu_stack"
|
|
menu_this=$menu_counter
|
|
|
|
block_begin 3
|
|
}
|
|
|
|
menu_end() {
|
|
block_end
|
|
menu_this="`echo $menu_stack | cut -f1 -d' '`"
|
|
menu_stack="`echo $menu_stack | cut -s -f2- -d' '`"
|
|
}
|
|
|
|
get_help() {
|
|
# Create standard help output ...
|
|
default_text="
|
|
There is no help on '$1' available.
|
|
|
|
This is the ROCK Linux $rockver Configuration Tool.
|
|
|
|
Please read the build Documentation (Documentation/BUILD)
|
|
and the ROCK Linux Guide (Documentation/Guide/GUIDE.txt)
|
|
before building ROCK Linux.
|
|
|
|
More information can be found on the ROCK Linux Homepage:
|
|
|
|
http://www.rocklinux.org/
|
|
|
|
Subscribe to the mailing list by sending an e-mail with the
|
|
subject 'subscribe rock-linux' to <minimalist@rocklinux.org>."
|
|
|
|
# Ok let us find a help for the current item ...
|
|
|
|
# First of all mask all special chars in the item name
|
|
# Comment: this is sick. You can't get any \n this way !!!
|
|
item_name=$( echo "$1" | sed 's/[][\/.^$*]/\\&/g' )
|
|
# Now search *.hlp files
|
|
hlp_text=$( sed -n "/^$item_name[ ]*\$/,\${
|
|
/^$item_name[ ]*\$/c\\
|
|
$item_name:\\
|
|
|
|
/^#/d
|
|
/^[^ ]/q
|
|
s/^ //
|
|
p
|
|
}" scripts/config*.hlp package/*/*/subconfig-*.hlp package/*/*/config*.hlp target/*/config*.hlp misc/config/config*.hlp 2>/dev/null )
|
|
|
|
# Get help strings out of the temporary file.
|
|
tmp_text=$(grep "^$item_name" config.help | cut -f2- -d' ' | sed -e "s,^',," -e "s,'$,," )
|
|
|
|
# Let us see what we have ...
|
|
if [ "$hlp_text" -a "$tmp_text" ] ; then
|
|
echo "
|
|
There are two help text's... one in one of the config.in files and one
|
|
in one of the config.hlp files. Please remove one of them to get rid of
|
|
this message here.
|
|
|
|
Here the one out of config.in:
|
|
|
|
$tmp_text
|
|
|
|
Here the one out of config.hlp:
|
|
|
|
$hlp_text"
|
|
elif [ "$hlp_text" ] ; then
|
|
echo "$hlp_text"
|
|
elif [ "$tmp_text" ] ; then
|
|
echo "$tmp_text"
|
|
else
|
|
echo "$default_text"
|
|
fi
|
|
}
|
|
|
|
arch=none
|
|
if expr "`uname -m`" : "i.86" > /dev/null ; then arch=x86 ; fi
|
|
if expr "`uname -m`" : "alpha" > /dev/null ; then arch=alpha ; fi
|
|
if expr "`uname -m`" : "ppc" > /dev/null ; then arch=powerpc ; fi
|
|
if expr "`uname -m`" : "powerpc" > /dev/null ; then arch=powerpc ; fi
|
|
current="" ; export ROCKCFG_ARCH="$arch" ; export ROCKCFG_EXPERT=0
|
|
menu_this=0 ; menu_current=0 ; menu_counter=0
|
|
menu_stack=-1 ; menu_back=-1 ; menu_backpos=-1
|
|
|
|
mkdir -p config/$config
|
|
touch config/$config/config config/$config/packages
|
|
|
|
configtitle="$(printf ' %-50s %6s active packages ]' \
|
|
"ROCK Linux $rockver Configuration - $config" \
|
|
"[ $(echo `grep '^X' config/$config/packages | wc -l`)" )"
|
|
|
|
. ./config/$config/config
|
|
|
|
rm -f config.dialog config.data config.help
|
|
touch config.dialog config.data config.help
|
|
echo -e "#\n# ROCK Linux $rockver Config File\n#" > config/$config/config
|
|
spacer="" ; expert=0 ; tabspace="5" ; tabspace_list=""
|
|
commentnr=0 ; editfilenr=0
|
|
|
|
cmd="./scripts/Create-PkgList"
|
|
[ "$ROCKCFG_DISABLE_BROKEN" = 1 ] && cmd="$cmd -nobroken"
|
|
cmd="$cmd $ROCKCFG_ARCH"
|
|
|
|
if [ "$cmd" != "`cat config.pcache.cmd 2> /dev/null`" ] ; then
|
|
eval "$cmd" | tee config.pcache.data > config/$config/packages
|
|
echo "$cmd" > config.pcache.cmd
|
|
else
|
|
cat config.pcache.data > config/$config/packages
|
|
fi
|
|
|
|
export ROCKCFG_ID="$rockver" ; . src/rockconfig.in
|
|
echo "export ROCKCFG_ID='$ROCKCFG_ID'" >> config/$config/config
|
|
|
|
cut -f1,2,4,5,8- -d' ' config/$config/packages | sed 's, [^ ]*$,,' | \
|
|
tr ' ' '\t' | expand -t2,15,35, > config/$config/packages.txt
|
|
|
|
configtitle="$(printf ' %-50s %6s active packages ]' \
|
|
"ROCK Linux $rockver Configuration - $config" \
|
|
"[ $(echo `grep '^X' config/$config/packages | wc -l`)" )"
|
|
|
|
if [ -z "$oldconfig" ] ; then
|
|
eval "./src/rockdialog.bin --title 'Build Config' \
|
|
--backtitle '$configtitle' \
|
|
--menu 'Arrow keys navigate the menu. Press <Enter> to activate menu items. Highlighted letters are hotkeys.' \
|
|
$(( $lines - 4 )) $(( $columns - 5 )) $(( $lines - 12 )) \
|
|
'$current' `tr '\n' ' ' < config.dialog`" 2> config.out
|
|
returncode=$? ; item="`cat config.out`"
|
|
else
|
|
returncode=1
|
|
fi
|
|
|
|
[ "$returncode" = 1 -a "$menu_back" -ne -1 ] && returncode="menu-back"
|
|
|
|
case "$returncode" in
|
|
0|6)
|
|
command="`grep "^$item " config.data | cut -f2-`"
|
|
{ echo -e "\n# Remember menu position:\ncurrent='$item'"
|
|
echo -e "\n# Remember sub-menu:\nmenu_current='$menu_current'"
|
|
echo -e "\n# Execute this config command:\n$command"
|
|
} >> config/$config/config
|
|
;;
|
|
menu-back)
|
|
{ echo -e "\n# New menu position:\ncurrent='$menu_backpos'"
|
|
echo -e "\n# New sub-menu:\nmenu_current='$menu_back'"
|
|
} >> config/$config/config
|
|
;;
|
|
1|255)
|
|
rm -f config.data config.dialog config.out config.help
|
|
rm -f config.pcache.data config.pcache.cmd
|
|
rm -f rockdialog.scrltmp # src/rockdialog.bin
|
|
echo "New config written to config/$config/*."
|
|
echo "Cleaning up. Configuration finished."
|
|
exit 1 ;;
|
|
2)
|
|
tempitem=$item
|
|
item=$(echo $item | cut -f1 -d' ') # dialog(1) bug?
|
|
{ echo -e "\n# Remember menu position:\ncurrent='$item'"
|
|
echo -e "\n# Remember sub-menu:\nmenu_current='$menu_current'"
|
|
} >> config/$config/config
|
|
|
|
get_help $item > config.dialog
|
|
|
|
./src/rockdialog.bin --title 'ROCK Linux Config - Help' \
|
|
--backtitle "ROCK Linux $rockver Configuration" \
|
|
--textbox config.dialog \
|
|
$(( $lines - 4 )) $(( $columns - 5 ))
|
|
;;
|
|
*)
|
|
echo "unknown returncode: $returncode"
|
|
exit 1 ;;
|
|
esac
|
|
|
|
exit 0
|