t2sde/scripts/config-functions.in
René Rebe d5526978e6 * cleanup some old comments
git-svn-id: https://svn.exactcode.de/t2/trunk@64152 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc
2023-07-21 15:07:17 +00:00

502 lines
13 KiB
Plaintext

# --- 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 <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> $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` "<add new rule>" >> $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 <lists@t2sde.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 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
}