# --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: scripts/config-functions.in # Copyright (C) 2004 - 2023 The T2 SDE Project # Copyright (C) 1998 - 2003 ROCK Linux Project # # This Copyright note is generated by scripts/Create-CopyPatch, # more information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2. # --- T2-COPYRIGHT-NOTE-END --- . scripts/core-functions.in # Function to cache config.in and subconfig.in file lists # create_configin_list() { bprof cache_configin_list start if [ ! -f $cfgtmpdir/noexpert-config.in -o ! -f $cfgtmpdir/expert-config.in ]; then local file= prio= name= rm -f $cfgtmpdir/{no,}expert-config.in{,.$$} rm -f $cfgtmpdir/subconfig-*.in{,.$$} touch $cfgtmpdir/{no,}expert-config.in{,.$$} # config.in # TODO: this expression may produce duplicated entries! ls -1 {package/*,misc}/*/config{,-[a-z]*}{,-[0-9]*}.in 2> /dev/null | while read file; do prio="$(echo "${file##*/}" | sed -n -e "s,.*-\([0-9]*\).in,\1,p")" if [ ${prio:-750} -le 500 ]; then echo "$prio $file" >> $cfgtmpdir/noexpert-config.in.$$ else echo "${prio:-750} $file" >> $cfgtmpdir/expert-config.in.$$ fi done sort -u $cfgtmpdir/noexpert-config.in.$$ | sed 's,^[^ ]* ,. ,g' > $cfgtmpdir/noexpert-config.in sort -u $cfgtmpdir/expert-config.in.$$ | sed 's,^[^ ]* ,. ,g' > $cfgtmpdir/expert-config.in rm -f $cfgtmpdir/{no,}expert-config.in.$$ # subconfig.in ls -1 package/*/*/subconfig-[a-z]*.in 2> /dev/null | while read file; do prio="$(echo "${file##*/}" | sed -n -e "s,.*-\([0-9]*\).in,\1,p")" name="$(echo "${file##*/}" | sed -e "s,-\([0-9]*\).in,.in,")" echo "${prio:-750} $file" >> $cfgtmpdir/$name.$$ done for file in $cfgtmpdir/subconfig-[a-z]*.in.$$; do sort -n $file | sed 's,^[^ ]* ,. ,g' > ${file%.$$} rm -f $file done fi bprof cache_configin_list stop } # Function to cache config.in and subconfig.in file lists # create_dot_in_lists() { local file= x= y= # {architecture,misc,target,package/*}/*/{pre,post}config.in bprof cache_dotin_list start for x in preconfig.in postconfig.in; do for y in architecture kernel misc target; do file=$cfgtmpdir/$y-$x if [ ! -f $file ]; then ls -1 $y/*/$x 2> /dev/null | sed 's,^,. ,' > $file fi done y=package file=$cfgtmpdir/$y-$x if [ ! -f $file ]; then ls -1 $y/*/*/$x 2> /dev/null | sed 's,^,. ,' > $file fi done bprof cache_dotin_list stop # and {sub,}config.in, which is more complex create_configin_list } # Functions for working with config/$config/packages # # pkgenable package-list # pkgdisable package-list # pkgremove package-list # pkgcheck package|oacjage X|O|. # pkgfilter cmd arg1 ... # pkgsel_parse parse pkgsel file # pkgin() { pkglistread config/$config/packages; } pkgout() { pkglistwrite config/$config/packages; } pkgfilter() { bprof pkgfilter start pkglistwrite $cfgtmpdir/packages.tmp "$@" < $cfgtmpdir/packages.tmp > config/$config/packages pkglistread config/$config/packages bprof pkgfilter stop } # pkgchecklicense -- checks for files with license issues pkgchecklicense() { rm -f config/$config/license-issue.* while read a b c repo pkg dummy; do if grep -E "\[(L|LICENSE)\][ ]*(Commercial|Restricted)" \ package/$repo/$pkg/$pkg.desc &> /dev/null; then echo $pkg >> config/$config/license-issue.ask fi done < <(grep "^X" config/$config/packages) } comment() { bprof comment start if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ] && [ $menu_current = $menu_this ]; then ((commentnr++)) echo "COMMENT_$commentnr '$spacer$1'" >> $cfgtmpdir/config.dialog if [ "$2" != "" ]; then set_help "COMMENT_$commentnr" "$2" fi fi bprof comment stop } comment_id() { bprof comment_id start if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ] && [ $menu_current = $menu_this ]; then echo "$2 '$spacer$1'" >> $cfgtmpdir/config.dialog if [ "$3" != "" ]; then set_help "$2" "$3" fi fi bprof comment_id stop } const() { bprof const start local q="'" local v="${2//$q/$q\\$q$q}" eval "$1=\"\$2\"" echo "export $1='$v'" >> config/$config/config bprof const stop } # Usage: set_data NAME DEFAULT # set_data() { bprof set_data start local q="'" set_name="SDECFGSET_${1#SDECFG_}" if eval "[ \"\$$set_name\" ]"; then eval "data=\"\$$set_name\"" eval "$1=\"\$data\"" if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ] then menumode=2; else menumode=0; fi elif [ $SDECFG_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//$q/$q\\$q$q}'" >> config/$config/config bprof set_data stop } choice() { bprof choice start # desired default value # local defval="$2" # reset to default if current value is not in list # and default to first element if it's not in list # eval $( eval "value=\$$1"; name=$1 dval=$defval; shift; shift while [ "$#" != 0 ]; do [ "$dval" = "$1" ] && dval="" [ "$value" = "$1" ] && name=""; shift; shift done [ "$dval" ] && echo "unset defval;" [ "$name" ] && echo "unset $name" ) set_data "$1" "${defval:-$3}" 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; } >> $cfgtmpdir/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" >> $cfgtmpdir/config.dialog fi bprof choice stop } choice_action() { command="src/confdialog.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> $cfgtmpdir/config.out case "$?" in 0|6) eval "$item='$(< $cfgtmpdir/config.out)'" ;; 1|255) return 0 ;; 2) echo "No help."; sleep 1 ;; *) echo "unknown returncode: $?"; exit 1 ;; esac } text() { bprof text start local q="'" set_data "$2" "$3" if [ "$menumode" -eq 1 -a $menu_current = $menu_this ]; then echo -e "$2\ttext_action '$1' '$2'" \ "'${data//$q/$q\\$q$q}'" >> $cfgtmpdir/config.data fi if [ "$menumode" -gt 0 -a $menu_current = $menu_this ]; then xdata="$(printf "%-${tabspace}s" \ "$(echo $data | cut -c1-20)")" if [ "$menumode" -eq 1 ]; then xdata="($xdata)" else xdata="=$xdata="; fi printf "'$2' '$spacer%s $1'\n" \ "${xdata//$q/$q\\$q$q}" >> $cfgtmpdir/config.dialog if [ "$4" != "" ]; then set_help "$2" "$4" fi fi bprof text stop } text_action() { src/confdialog.bin --title 'Build Config' \ --backtitle "$configtitle" \ --inputbox "$1" 9 $(($columns - 5)) "$3" 2> $cfgtmpdir/config.out [ "$?" -eq 0 -o "$?" -eq 1 ] && eval "$2=\"\$(< $cfgtmpdir/config.out)\"" } bool() { bprof bool start local x set_data "$2" "$3" if [ "$menumode" -eq 1 -a $menu_current = $menu_this ]; then echo -e "$2\tbool_action '$1' '$2' '$data'" >> $cfgtmpdir/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" >> $cfgtmpdir/config.dialog if [ "$4" != "" ]; then set_help "$2" "$4" fi fi bprof bool stop } bool_action() { if [ $3 -eq 0 ]; then eval "$2=1" else eval "$2=0"; fi } editfile() { bprof editfile start if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ]; then local x="$spacer" q="'" comment ",----< $3 >----." block_begin 0; spacer="${spacer%??}| " touch "$2" line_nr=1 while read line; do line="${line//$q/$q\\$q$q}" if [ $menu_current = $menu_this ]; then printf "$1:${editfilenr} '$spacer%-${tabspace}s %s'\n" \ `printf "%03d:" $line_nr` "$line" >> $cfgtmpdir/config.dialog echo -e "$1:${editfilenr}\teditfile_action $2" \ "$line_nr '$3'" >> $cfgtmpdir/config.data fi ((editfilenr++)) ((line_nr++)) done < "$2" if [ $menu_current = $menu_this ]; then printf "$1:${editfilenr} '$spacer%-${tabspace}s %s'\n" \ `printf "%03d:" $line_nr` "" >> $cfgtmpdir/config.dialog echo -e "$1:${editfilenr}\teditfile_action $2" \ "$line_nr '$3'" >> $cfgtmpdir/config.data fi ((editfilenr++)) block_end comment "\`------${3//?/-}------'\''" spacer="$x" else rm -f "$2" fi bprof editfile stop } editfile_action() { line="`tail -n +$2 $1 | head -n 1`" src/confdialog.bin --title 'Build Config' \ --backtitle "$configtitle" \ --inputbox "$3 - Line $3" \ 9 $(($columns - 5)) "$line" 2> $cfgtmpdir/config.out head -n $(($2 - 1)) $1 > $1.new [ -s $cfgtmpdir/config.out ] && echo "$(< $cfgtmpdir/config.out)" >> $1.new tail -n +$(($2 + 1)) $1 >> $1.new mv $1.new $1 } startprog() { bprof startprog start if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ] && [ $menu_current = $menu_this ]; then printf "$1 '$spacer%-${tabspace}s %s'\n" \ "-->" "$2" >> $cfgtmpdir/config.dialog echo -e "$1\t$3" >> $cfgtmpdir/config.data fi bprof startprog stop } block_begin() { bprof block_begin start if [ $menu_current = $menu_this ]; then [ "$tabspace_list" ] && spacer="$spacer " tabspace_list="$tabspace $tabspace_list" tabspace="$(($tabspace + $1 - 2))" fi bprof block_begin stop } block_end() { bprof block_end start if [ $menu_current = $menu_this ]; then spacer="${spacer%??}" tabspace="${tabspace_list%% *}" tabspace_list="${tabspace_list#* }" fi bprof block_end stop } expert_begin() { expert=$(($exprt + 1)) } expert_end() { expert=$(($exprt - 1)) } menu_begin() { bprof menu_begin start menu_counter=$(($menu_counter + 1)) if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ] && [ $menu_current = $menu_this ]; then printf "$1 '$spacer%-${tabspace}s %s'\n" \ "===>" "$2" >> $cfgtmpdir/config.dialog echo -e "$1\tmenu_current=$menu_counter" >> $cfgtmpdir/config.data fi if [ $SDECFG_EXPERT -eq 1 -o $expert -eq 0 ] && [ $menu_current = $menu_counter ]; then echo "$1 '===> $2'" >> $cfgtmpdir/config.dialog echo -e "$1\tmenu_current=$menu_this" >> $cfgtmpdir/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 bprof menu_begin stop } menu_end() { bprof menu_end start block_end menu_this="${menu_stack%% *}" menu_stack="${menu_stack#* }" bprof menu_end stop } set_help() { bprof set_help start (echo -ne "$1 '$1:\n\n$2'" | sed 's,$,\\n,' | tr -d '\n' | sed 's,\\n$,,'; echo) >> $cfgtmpdir/config.help bprof set_help stop } get_help() { bprof get_help start # Create standard help output ... default_text=" There is no help on '$1' available. This is the T2 $sdever Configuration Tool. Please read the Quick Start and the Handbook on http://t2sde.org/buildintro.html and http://t2sde.org/t2-handbook/ respectively before building T2. More information can be found on the T2 Homepage: http://t2sde.org/ Subscribe to the mailing list by sending an e-mail with the subject 'subscribe t2' 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 architecture/*/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" $cfgtmpdir/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 bprof get_help stop }