#!/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 - 2006 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 2> /dev/null | cut -d' ' -f1 )" columns="$( stty size 2> /dev/null | 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='' nobashmod='' profile="" while [ "$1" ] ; do case "$1" in -cycle) do_config_cycle=1 ; shift ;; -delete) delete_mode=1 ; shift ;; -profile) profile='-profile' ; shift ;; -oldconfig) oldconfig='-oldconfig' ; shift ;; -nobashmod) nobashmod='-nobashmod' ; shift ;; -cfg) config="$2" ; shift ; shift ;; *) echo echo "Usage: $0 [ -delete | -oldconfig ] [ -cfg ]" echo " Create and modify build configurations for the other" echo " scripts, e.g. Download, Build-Target, and Emerge-Pkg." echo echo " -cfg use as the configuration name. If this option" echo " is not set the name 'default' is used. If no" echo " configuration by this name exists, one with default" echo " settings is created." echo " -delete delete the specified configuration" echo " -oldconfig run without a menu-based interface; changes to settings" echo " in configuration files have to be made manually before" echo " ./scripts/Config recreates the whole configuration" echo echo "Other options:" echo " -profile create a config.profile with profiling data" echo " -nobashmod don't use the bash config helper plugin" echo exit 1 ;; esac done ./scripts/Check-System || exit 1 if [ $delete_mode = 1 ] ; then rm -rv config/$config exit $? fi # hook for third-party targets that need to insert additional packages before config runs, for example. for precnf in target/*/preconfig.sh ; do [ -f $precnf ] && . $precnf done if [ $do_config_cycle = 0 ] then export swpid=swp$$ rm -f config.data.$swpid config.dialog.$swpid config.out.$swpid config.help.$swpid rm -f config.pcache.data.$swpid config.pcache.cmd.$swpid 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.$swpid" mv src/rockdialog.bin.$swpid src/rockdialog.bin fi echo "Creating configuration script." cat << EOT > src/rockconfig.awk.$swpid #!/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.$swpid src/rockconfig.awk awk -f src/rockconfig.awk scripts/config.in > src/rockconfig.in.$swpid 2> /dev/null mv src/rockconfig.in.$swpid src/rockconfig.in echo "Running ROCK Linux $rockver configuration ..." while "$0" -cfg $config $oldconfig $profile $nobashmod -cycle ; do : ; done exit 0 fi if [ -z "$nobashmod" ]; then if [ ! -f src/config_helper.so -o misc/tools-source/config_helper.c -nt src/config_helper.so ]; then echo "Building src/config_helper.so." gcc -shared -fPIC -Wall -o src/config_helper.so misc/tools-source/config_helper.c || exit 1 fi enable -f src/config_helper.so cfghlp || exit 1 fi if [ -z "$profile" ]; then bprof() { :; } bprof_print() { :; } else if [ ! -f src/bash_profiler.so -o misc/tools-source/bash_profiler.c -nt src/bash_profiler.so ]; then echo "Building src/bash_profiler.so." gcc -shared -fPIC -Wall -o src/bash_profiler.so misc/tools-source/bash_profiler.c || exit 1 fi enable -f src/bash_profiler.so bprof || exit 1 bprof_print() { bprof all print >> config.profile awk ' $4 == "profiled" { next; } $4 != "main" { count["profiled"]+=$1; time["profiled"]+=$2; } { count[$4]+=$1; time[$4]+=$2; } END { for (id in count) printf "%7d %7Ld %10.3f %s\n", count[id], time[id], time[id]/count[id], id; } ' < config.profile | sort -n -k2 > config.profile.new mv config.profile.new config.profile } fi bprof main start . scripts/config.func arch=none if expr "`uname -m`" : "x86_64" > /dev/null ; then arch=x86 ; fi 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 if expr "`uname -m`" : "sparc" > /dev/null ; then arch=sparc ; fi if expr "`uname -m`" : "mips" > /dev/null ; then arch=mips ; fi current="" ; export ROCKCFG_ARCH="$arch" ; export ROCKCFG_EXPERT=0 menu_this=0 ; menu_current=0 ; menu_counter=0 menu_stack=x ; menu_back=-1 ; menu_backpos=-1 mkdir -p config/$config touch config/$config/config touch config/$config/packages rm -rf config/$config.$swpid cp -r config/$config config/$config.$swpid configtitle="$(printf ' %-50s %6s active packages ]' \ "ROCK Linux $rockver Configuration - $config" \ "[ $(echo `grep '^X' config/$config/packages | wc -l`)" )" bprof main stop . ./config/$config.$swpid/config if [ -f config/$config.$swpid/config_usr ]; then nousrconfig=0 . ./config/$config.$swpid/config_usr else nousrconfig=1 fi bprof main start rm -f config.dialog.$swpid config.data.$swpid config.help.$swpid touch config.dialog.$swpid config.data.$swpid config.help.$swpid echo -e "#\n# ROCK Linux $rockver Config File\n#" > config/$config.$swpid/config echo -e "#\n# ROCK Linux $rockver User Config File\n#" > config/$config.$swpid/config_usr spacer="" ; expert=0 ; tabspace="5" ; tabspace_list="" commentnr=0 ; editfilenr=0 bprof mkpkglist start cmd="./scripts/Create-PkgList" [ "$ROCKCFG_DISABLE_BROKEN" = 1 ] && cmd="$cmd -nobroken" cmd="$cmd $ROCKCFG_ARCH" if [ "$cmd" != "`cat config.pcache.cmd.$swpid 2> /dev/null`" ] ; then eval "$cmd" | tee config.pcache.data.$swpid > config/$config.$swpid/packages echo "$cmd" > config.pcache.cmd.$swpid else cat config.pcache.data.$swpid > config/$config.$swpid/packages fi bprof mkpkglist stop export ROCKCFG_ID="$rockver"; pkgin; . src/rockconfig.in; pkgout echo "export ROCKCFG_ID='$ROCKCFG_ID'" >> config/$config.$swpid/config rm -f config/$config.$swpid/*.tmp sort -k3 config/$config.$swpid/packages > config/$config.$swpid/packages.sorted mv -f config/$config.$swpid/packages.sorted config/$config.$swpid/packages cut -f1,2,4,5,8- -d' ' config/$config.$swpid/packages | sed 's, [^ ]*$,,' | \ tr ' ' '\t' | expand -t2,15,35, > config/$config.$swpid/packages.txt for x in ${!ROCKCFGUSR_*}; do eval "echo \"$x='\$$x'\"" done >> config/$config.$swpid/config_usr configtitle="$(printf ' %-50s %6s active packages ]' \ "ROCK Linux $rockver Configuration - $config" \ "[ $(echo `grep '^X' config/$config.$swpid/packages | wc -l`)" )" bprof main stop 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.$swpid`" 2> config.out.$swpid returncode=$? ; item="`cat config.out.$swpid`" else returncode=1 fi bprof main start [ "$returncode" = 1 -a "$menu_back" -ne -1 ] && returncode="menu-back" writeback() { for x in $( ls config/$config.$swpid ); do cp config/$config.$swpid/$x config/$config.$swpid/__tmp mv config/$config.$swpid/__tmp config/$config/$x done for x in $( ls config/$config ); do [ -e config/$config.$swpid/$x ] || rm -f config/$config/$x done rm -rf config/$config.$swpid } case "$returncode" in 0|6) command="`grep "^$item " config.data.$swpid | 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.$swpid/config_usr ;; menu-back) { echo -e "\n# New menu position:\ncurrent='$menu_backpos'" echo -e "\n# New sub-menu:\nmenu_current='$menu_back'" } >> config/$config.$swpid/config_usr ;; 1|255) rm -f config.data.$swpid config.dialog.$swpid config.out.$swpid config.help.$swpid rm -f config.pcache.data.$swpid config.pcache.cmd.$swpid rm -f rockdialog.scrltmp # src/rockdialog.bin echo "New config written to config/$config/*." echo "Cleaning up. Configuration finished." writeback bprof main stop bprof_print 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.$swpid/config_usr get_help $item > config.dialog.$swpid bprof main stop ./src/rockdialog.bin --title 'ROCK Linux Config - Help' \ --backtitle "ROCK Linux $rockver Configuration" \ --textbox config.dialog.$swpid \ $(( $lines - 4 )) $(( $columns - 5 )) bprof main start ;; *) echo "unknown returncode: $returncode" writeback bprof main stop bprof_print exit 1 ;; esac writeback bprof main stop bprof_print exit 0