@ -1,11 +1,11 @@
#!/bin/bash
#simplebuild_plugin tcupdate (s3.TUP) 0.7 .0
#simplebuild_plugin tcupdate (s3.TUP) 0.8 .0
tcupdate(){
clear && _check_bin;
pversion="0.7 .0";
pversion="0.8 .0";
pname="s3.TUP";
pdesc="Plugin $pname v$pversion";
configname="$configdir/plugin_update_toolchain.config";
@ -39,7 +39,6 @@ tcupdate(){
#check config
_check_config;
IFS="#";
if [ "$1" == "-c" ] || [ "$1" == "--create" ];then
_create_tc;
bye;
@ -51,14 +50,16 @@ tcupdate(){
for i in "${INST_TCLIST[@]}";do
if [ ! "$i" == "native" ];then
source "$tccfgdir/$i";
MENU_OPTIONS+="$_toolchainname#$_description#toolchain folder:"$tcdir/$i" | config file:"$tccfgdir/$i"#" ;
MENU_OPTIONS+=("$_toolchainname" "$_description" "toolchain folder:$tcdir/$i | config file:$tccfgdir/$i") ;
counter;
fi;
done;
fi;
[ $COUNT -eq 0 ] && MENU_OPTIONS+="# no toolchains found# no toolchains found# " && counter;
[ $COUNT -eq 0 ] && MENU_OPTIONS+=( "" " no toolchains found" " no toolchains found") && counter;
fi;
out=$("$gui" "$st_" "$bt_" "$title_ - $pdesc" "--item-help" "--help-tags" "--default-item" "$3" "--ok-label" "Update" "--cancel-label" "Create" "--help-button" "--help-label" "Exit" "--extra-button" "--extra-label" "Copy" "--title" "-[ Toolchain Menu ]-" --menu "\nSelect one of the installed tool chains that you want to update:\n " "${COUNT+10}" 0 0 ${MENU_OPTIONS});
out=$("$gui" "$st_" "$bt_" "$title_ - \Z4$pdesc\Zn" "--colors" "--item-help" "--help-tags" "--default-item" "$3" "--ok-label" "Update" "--cancel-label" "Create" "--help-button" "--help-label" "Exit" "--extra-button" "--extra-label" "Copy" "--title" "-[ Toolchain Menu ]-" \
--menu "\nSelect one of the installed tool chains that you want to update:\n " \
"${COUNT+10}" 0 0 "${MENU_OPTIONS[@]}");
ret="$?"
tc=$(echo "$out" | awk '{printf $1}');
@ -112,10 +113,9 @@ tcupdate(){
cd "$tcdir/$tc/$_sysroot"
fi;
prefixdir="$PWD"
pkg=$(find * | grep -m1 "/pkgconfig") && pkgdir="$prefixdir/$pkg";
pkg=$(find * | grep -m1 "/pkgconfig") && pkgdir="$prefixdir/$pkg" || pkgdir="$prefixdir" ;
#build menu items from config file
IFS=$OIFS;
unset MENU_OPTIONS;COUNT=0;unset libs;
for i in "${LIBS[@]}"
do
@ -140,9 +140,9 @@ tcupdate(){
lib=("$libkey" "$libname" "$libversion" "$libversioncheck" "$libcheck" "$libversioncurrent" "$liburl" "(${libtasks[*]@Q})");
libs+=("(${lib[*]@Q})");
done;
[ $COUNT -eq 0 ] && MENU_OPTIONS+="# no libraries found# no libraries found# " && counter;
[ $COUNT -eq 0 ] && MENU_OPTIONS+=( "" " no libraries found" " no libraries found") && counter;
opts=$("$gui" "--item-help" "--help-tags" "$st_" "$bt_" "$title_ - $pdesc" "--default-item" "$3" "--ok-label" "Start" "--help-button" "--help-label" "Info" "--cancel-label" "$([ "$tc_menu" == "1" ] && echo "Back" || echo "Exit")" --title "-[ Library Update Menu - $tc ]-" "$cl_"\
opts=$("$gui" "--item-help" "--help-tags" "$st_" "$bt_" "$title_ - \Z4 $pdesc\Zn" "--colors " "--default-item" "$3" "--ok-label" "Start" "--help-button" "--help-label" "Info" "--cancel-label" "$([ "$tc_menu" == "1" ] && echo "Back" || echo "Exit")" " --title" "-[ Library Update Menu - \Z2 $tc\Zn ]-" "$cl_"\
"\nSelect all libraries to update in toolchain's SYSROOT folder:\n$prefixdir\n\n library version NEW CURRENT" \
"${COUNT+12}" 70 0 "${MENU_OPTIONS[@]}");
@ -159,19 +159,21 @@ tcupdate(){
bcd=$(cat "$configname" | grep ""$libkey"_tasks");
txt=$(echo -e "Toolchain: $tcdir/$tc\nCompiler: $compilername\nSysroot: $sr\nPrefix: $prefixdir\n$sp\n\nLibrary configuration:\n$txt\n\nBuild command:\n$(_replace_tokens "$(_tidy_tasks "$bcd" "$libkey")")");
tempfile=$(mktemp) && echo -e "$txt" > "$tempfile";
"$gui" "$st_" "$nc_" "$bt_" "$title_ - $pdesc" "--textbox" "$tempfile" 30 80;
"$gui" "$st_" "$nc_" "$bt_" "$title_ - \Z4 $pdesc\Zn" "--colors " "--textbox" "$tempfile" 30 80;
rm "$tempfile" 2>/dev/null;
tcupdate $tc $tc_menu $libkey;
fi;
#BUILD section
ts=$(date +%F)_$(date +%T);
tmpdir="/tmp/lib_source/$ts";
icount=$(echo $opts | wc -w);i=0;
for o in $opts;do
unset buildtasks;
for l in "${libs[@]}";do
declare -a lib="${l[*]}"; #populate libs array element
[ ! "$o" == "${lib[0]}" ] && continue || ((i++));
logfile="$ldir/$(date +%F)_$(date +%T) _update_toolchain_"$_toolchainname"_"${lib[1]}"_"${lib[2]}".log"
logfile="$ldir/"$ts" _update_toolchain_"$_toolchainname"_"${lib[1]}"_"${lib[2]}".log"
#generate build command list
declare -a libtasks="${lib[7]}"; #populate tasks array element
@ -179,9 +181,10 @@ tcupdate(){
task=$(_replace_tokens "$task"); #replace tokens
buildtasks+=("$task");
done
_build "($i/$icount) ${lib[1]}" $(_extract $(_dl "${lib[6]}")) "$logfile" "${buildtasks[@]}";
_build "($i/$icount) $tc: library $ {lib[1]} ${lib[2 ]}" $(_extract $(_dl "${lib[6]}" "${lib[1]} ${lib[2]}" ) "$tmpdir" ) "$logfile" "${buildtasks[@]}";
done;
done;
[ -d "$tmpdir" ] && rm -r "$tmpdir";
#Reopen update menu
if [ ${#opts} -gt 0 ];then
@ -214,61 +217,66 @@ _create_tc(){
desc=$(sed -n -e '/#toolchain template/ s/.*\: *//p' $t);
[ ! "$desc" ] && desc="no description available";
[ -d "$tcdir/$t" ] && [ -f "$tccfgdir/$t" ] && color="\Z1" || color="";
MENU_OPTIONS+="$t#$color$desc\Zn#template filename:"$cttpldir/$t"#" ;
MENU_OPTIONS+=("$t" "$color$desc\Zn" "off" "template filename:$cttpldir/$t");counter ;
counter;
done;
fi;
[ $COUNT -eq 0 ] && MENU_OPTIONS+="# no templates found# no templates found# " && counter;
[ $COUNT -eq 0 ] && MENU_OPTIONS+=( "" " no templates found" " no templates found") && counter;
opts=$("$gui" "$st_" "$bt_" "$title_ - $pdesc" "--colors" "--item-help" "--help-tags" "--default-item" "$3" "--ok-label" "Start" "--cancel-label" "Setup" "--help-button" "--help-label" "$([ $tc_menu ] && echo "Back" || echo "Exit")" "--title" "-[ Cross Toolchain Template Menu ]-" \
--menu "\nSelect on of the templates to create the cross toolchain you want:\n\n\Z1NOTE: If you create a cross toolchain from a template with a red colored description, an existing one with the same name will be replaced without asking!\Zn" \
"${COUNT+11}" 0 0 ${MENU_OPTIONS});
opts=$("$gui" "$st_" "$bt_" "$title_ - \Z4 $pdesc\Zn " "--colors" "--item-help" "--help-tags" "--default-item" "$3" "--ok-label" "Start" "--cancel-label" "Setup" "--help-button" "--help-label" "$([ $tc_menu ] && echo "Back" || echo "Exit")" "--title" "-[ Cross Toolchain Template Menu ]-" "$cl_" \
"\nSelect on of the templates to create the cross toolchain you want:\n\n\Z1NOTE: If you create a cross toolchain from a template with a red colored description, an existing one with the same name will be replaced without asking!\Zn" \
"${COUNT+11}" 0 0 " ${MENU_OPTIONS[@] }" );
ret="$?"
tpl=$(echo "$opts" | awk '{printf $1}');
case $ret in
0) #Start - Build cross toolchain
if [ -f "$ctsrcdir/ct-ng" ]; then
if [ -f "$cttpldir/$tpl" ]; then
#logfile="$ldir/$(date +%F)_$(date +%T)_update_toolchain_crosstoolchain_"$tpl".log"
#copy template and patching them
cp --no-preserve=mode,ownership -f "$cttpldir/$tpl" "$ctsrcdir/.config";
#CT_LOCAL_TARBALLS_DIR aka cache folder for downloads
sed -i "s#.*CT_LOCAL_TARBALLS_DIR=.*#CT_LOCAL_TARBALLS_DIR=\"$dldir\"#g" "$ctsrcdir/.config";
#CT_PREFIX_DIR aka folder that contains the final toolchain
sed -i "s#.*CT_PREFIX_DIR=.*#CT_PREFIX_DIR=\"$tcdir/$tpl\"#g" "$ctsrcdir/.config";
#CT_PARALLEL_JOBS
sed -i "s#.*CT_PARALLEL_JOBS=.*#CT_PARALLEL_JOBS=$CTNG_PARALLEL_JOBS#g" "$ctsrcdir/.config";
clear;
#run build
bcl=$(printf '%s\n' "${CTNG_BUILD_tasks[@]}");
sp=$(printf '%*s' 80 | tr ' ' '=')
echo -e "$sp\nbuild command list for cross toolchain $tpl (executed as user $CTNG_USER):\n$sp\ncd "$ctsrcdir"\n$(_replace_tokens "$bcl")\n$sp";
sleep 2;
cd "$ctsrcdir";
cmd="${CTNG_BUILD_tasks[@]}";
sudo -u "$CTNG_USER" -H -- sh -c "$(_replace_tokens "$cmd")" 2>&1;
err=$(grep '\[ERROR\]' "$ctsrcdir/build.log" | wc -l)
if [ ! $err -gt 0 ]; then
#get target from build.log
target=$(sed -n -e '/target = / s/.*\= *//p' "$ctsrcdir/build.log");
#compress toolchain
_compress "$dldir/Toolchain-$tpl.tar.xz" "$tcdir/$tpl" | "$gui" "$st_" --colors --title " -[ Compress cross toolchain $tpl... ]- " "$pb_" "$_lines" "$_cols";
#create toolchain.cfg
desc=$(sed -n -e '/#toolchain template/ s/.*\: *//p' "$cttpldir/$tpl");
_create_toolchaincfg "$tcdir/$tpl" "$tpl" "$target" "$desc" "$dldir/Toolchain-$tpl.tar.xz";
icount=$(echo $opts | wc -w);i=0;
for tpl in $opts;do
if [ -f "$cttpldir/$tpl" ]; then
logfile="$ldir/$(date +%F)_$(date +%T)_update_toolchain_crosstoolchain_"$tpl".log" && ((i++));
#copy template and patching them
cp --no-preserve=mode,ownership -f "$cttpldir/$tpl" "$ctsrcdir/.config";
#CT_LOCAL_TARBALLS_DIR aka cache folder for downloads
sed -i "s#.*CT_LOCAL_TARBALLS_DIR=.*#CT_LOCAL_TARBALLS_DIR=\"$dldir\"#g" "$ctsrcdir/.config";
#CT_PREFIX_DIR aka folder that contains the final toolchain
sed -i "s#.*CT_PREFIX_DIR=.*#CT_PREFIX_DIR=\"$tcdir/$tpl\"#g" "$ctsrcdir/.config";
#CT_PARALLEL_JOBS aka parallel build job count
sed -i "s#.*CT_PARALLEL_JOBS=.*#CT_PARALLEL_JOBS=$CTNG_PARALLEL_JOBS#g" "$ctsrcdir/.config";
clear;
#run build as $CTNG_USER
bcl=$(printf '%s\n' "${CTNG_BUILD_tasks[@]}");
sp=$(printf '%*s' 80 | tr ' ' '=')
echo -e "$sp\nbuild ($i/$icount): command list for cross toolchain $tpl (executed as user $CTNG_USER):\n$sp\ncd "$ctsrcdir"\n$(_replace_tokens "$bcl")\n$sp";
sleep 2;
cd "$ctsrcdir";
cmd="${CTNG_BUILD_tasks[@]}";
sudo -u "$CTNG_USER" -H -- sh -c "$(_replace_tokens "$cmd")" 2>&1;
err=$(grep '\[ERROR\]' "$ctsrcdir/build.log" | wc -l)
#save build.log in logs
cp -f "$ctsrcdir/build.log" "$logfile";
if [ ! $err -gt 0 ]; then
#get target from build.log
target=$(sed -n -e '/target = / s/.*\= *//p' "$ctsrcdir/build.log");
#compress toolchain
_compress "$dldir/Toolchain-$tpl.tar.xz" "$tcdir/$tpl" | "$gui" "$st_" "$bt_" "$title_ - \Z4$pdesc\Zn" "--colors" "--title" " -[ Compress cross toolchain $tpl... ]- " "$pb_" "$_lines" "$_cols";
#create toolchain.cfg
desc=$(sed -n -e '/#toolchain template/ s/.*\: *//p' "$cttpldir/$tpl");
_create_toolchaincfg "$tcdir/$tpl" "$tpl" "$target" "$desc" "$dldir/Toolchain-$tpl.tar.xz";
else
_paktc_timer 10;
fi;
else
_paktc_timer;
[ "$tpl" == "" ] && echo -e "$r_l $txt_error:$y_l $tc$w_l Template $txt_n_installed""$rs_";
sleep 2;
fi;
else
[ "$tpl" == "" ] && echo -e "$r_l $txt_error:$y_l $tc$w_l Template $txt_n_installed""$rs_";
sleep 2;
fi;
done;
else
echo -e "$r_l""CHECK -> crosstool-NG is not setup correctly. Please run 'Setup' from menu!\n""$re_";
_paktc_timer 10;
@ -302,8 +310,8 @@ _create_tc(){
cd "$ctsrcdir";
cmd="${CTNG_SETUP_tasks[@]}";
sudo -u "$CTNG_USER" -H -- sh -c "$(_replace_tokens "$cmd")" 2>&1;
) | tee "$logfile" | "$gui" "$st_" --colors --title " -[ Setup crosstool-NG... ]- " "$pb_" "$_lines" "$_cols";
_paktc_timer;
) | tee "$logfile" | "$gui" "$st_" "$bt_" "$title_ - \Z4$pdesc\Zn" " --colors" " --title" " -[ Setup crosstool-NG... ]- " "$pb_" "$_lines" "$_cols";
_paktc_timer 10 ;
_create_tc;;
2) #Exit
return;;
@ -324,7 +332,7 @@ _copy(){
#create toolchain.cfg
source "$tccfgdir/$1" && target="${_compiler%?}" && desc="$_description";
_create_toolchaincfg "$tcdir/$1" "$newtc" "$target" "$desc" "$xzfile";
) | "$gui" "$st_" --colors --title " -[ Copy $1 to $newtc ... ]- " "$pb_" "$_lines" "$_cols";
) | "$gui" "$st_" "$bt_" "$title_ - \Z4$pdesc\Zn" " --colors" " --title" " -[ Copy $1 to $newtc ... ]- " "$pb_" "$_lines" "$_cols";
[ -f "$newtccfgfile" ] && echo "$newtc";
};
_build(){
@ -344,7 +352,7 @@ _build(){
sleep 2;
cd "$libsrcdir";
( eval "${tasks[@]}" ) 2>&1 | tee -a "$lf"
) | "$gui" "$st_" --colors --title " -[ Build $desc ... ]- " "$pb_" "$_lines" "$_cols";sleep 2;
) | "$gui" "$st_" "$bt_" "$title_ - \Z4$pdesc\Zn" " --colors" " --title" " -[ Build $desc... ]- " "$pb_" "$_lines" "$_cols";sleep 2;
#build error message
error_on_build=$(grep -cw1 Error "$lf");
@ -359,7 +367,7 @@ _dl(){
[ -d "$dldir/#tmp" ] && rm --recursive --force "$dldir/#tmp"
mkdir --parents "$dldir/#tmp";
cd "$dldir/#tmp";
wget --content-disposition "$1" 2>&1 | stdbuf -o0 awk '/[.] +[0-9][0-9]?[0-9]?%/ { print substr($0,63,3) }' | "$gui" "$st_" "$bt_" "$title_ - $pdesc" --title " -[ download ]- " --gauge " $txt_loading $fname $txt_wait" 6 74;
wget --content-disposition "$1" 2>&1 | stdbuf -o0 awk '/[.] +[0-9][0-9]?[0-9]?%/ { print substr($0,63,3) }' | "$gui" "$st_" "$bt_" "$title_ - \Z4 $pdesc\Zn " "--colors" " --title" " -[ download $2 ]- " --gauge " $txt_loading $txt_wait" 6 74;
if [ $? -eq 0 ];then
fname="$(ls -t | head -n1)"; md5file="$fname.md5";
md5sum "$fname" > "$md5file";
@ -380,7 +388,7 @@ _extract(){
(($#)) || return;
edir=/tmp/lib_source ;
edir="$2" ;
[ -d "$edir" ] && rm -r "$edir";
mkdir --parents "$edir";
@ -410,7 +418,7 @@ _extract(){
cd "$edir";
BEFORE=(.*/ */);
command "${c[@]}" "$i" |"$gui" "$st_" --title " -[ $txt_extracting ]- " "$pb_" 20 74;
command "${c[@]}" "$i" |"$gui" "$st_" "$bt_" "$title_ - \Z4$pdesc\Zn" "--colors" " --title" " -[ $txt_extracting $i ]- " "$pb_" 20 74;
((e = e || $?));
AFTER=(.*/ */);
@ -563,7 +571,7 @@ _create_config(){
ctng_build_tasks=( "(\"./ct-ng build;\")" );
ctng_build_tasks_comment="#build command";
ctng_setup_tasks=( "(\"git clone --progress \"\$CTNG_REPO_URL\" \"@CTNGSOURCE@\";\")" "(\"./bootstrap;\")" "(\"./configure --enable-local;\")" "(\"make;\")" "(\"touch \"@CTNGSOURCE@\ .config\";\")" );
ctng_setup_tasks=( "(\"git clone --progress \"\$CTNG_REPO_URL\" \"@CTNGSOURCE@\";\")" "(\"./bootstrap;\")" "(\"./configure --enable-local;\")" "(\"make;\")" "(\"touch \"@CTNGSOURCE@/ .config\";\")" );
ctng_setup_tasks_comment="#setup command";
echo '#CROSS toolchain build settings' >"$configname";