#!/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 ]" 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 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` "" >> 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 ." # 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 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