mirror of
https://github.com/rxrbln/t2sde.git
synced 2025-05-08 20:21:59 +08:00
502 lines
13 KiB
Plaintext
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
|
|
}
|