mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

559 lines
15 KiB

#!/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