Browse Source

s3.TUP Automatic reintegration of libraries (v0.15.0)

- support for automatic detection and reintegration of libraries when rebuilding existing toolchains
- new config option LIBS_AUTO_INTEGRATE to enable/disable this automatic reintegration, default is LIBS_AUTO_INTEGRATE=1
- rework of some code fragments
pull/41/head
WXbet 5 years ago
parent
commit
add29c1d66
  1. 373
      support/functions/_plugin_update_toolchain

373
support/functions/_plugin_update_toolchain

@ -3,7 +3,7 @@
#simplebuild_plugin tcupdate #simplebuild_plugin tcupdate
tcupdate(){ tcupdate(){
pversion="0.14.3"; pversion="0.15.0";
pname="s3.TUP"; pname="s3.TUP";
pdesc="Plugin $pname v$pversion"; pdesc="Plugin $pname v$pversion";
configname="$configdir/plugin_update_toolchain.config"; configname="$configdir/plugin_update_toolchain.config";
@ -18,7 +18,7 @@ tcupdate(){
OPTION2="$3"; OPTION2="$3";
[ -z "$4" ] && FLAG="0" || FLAG="$4"; #0 - tcupdate call from s3.TUP itself, 1 - tcupdate call from s3 main menu, 2 - tcupdate call from s3 toolchain menu; [ -z "$4" ] && FLAG="0" || FLAG="$4"; #0 - tcupdate call from s3.TUP itself, 1 - tcupdate call from s3 main menu, 2 - tcupdate call from s3 toolchain menu;
tc="$CMDTC"; tc="$CMDTC";
#some migrations to upgrade older s3.TUP versions #some migrations to upgrade older s3.TUP versions
[[ -z "$4" || "$FLAG" -gt "0" ]] && clear && _migrations; [[ -z "$4" || "$FLAG" -gt "0" ]] && clear && _migrations;
@ -29,7 +29,7 @@ tcupdate(){
if [ "$CMDTC" == "-r" ] || [ "$CMDTC" == "--reset" ];then if [ "$CMDTC" == "-r" ] || [ "$CMDTC" == "--reset" ];then
if [ -f "$configname" ];then if [ -f "$configname" ];then
if ! _check_github_api_limits 12;then if ! _check_github_api_limits 12;then
echo -e "$y_l""RESET -> Moving existing config file...""$re_"; echo -e "${y_l}RESET -> Moving existing config file...${re_}";
bcn="$configname".$(date +"%Y%m%d%H%M%S"); bcn="$configname".$(date +"%Y%m%d%H%M%S");
mv "$configname" "$bcn" mv "$configname" "$bcn"
echo -e "config file backup='$bcn'\n"; echo -e "config file backup='$bcn'\n";
@ -42,7 +42,7 @@ tcupdate(){
#create config #create config
if [ ! -f "$configname" ];then if [ ! -f "$configname" ];then
echo -e "$g_l""CLEANUP -> Creating new config file. Please wait...""$y_l""$re_"; echo -e "${g_l}CLEANUP -> Creating new config file. Please wait...${y_l}${re_}";
if ! _create_config;then if ! _create_config;then
exit; exit;
else else
@ -88,7 +88,7 @@ tcupdate(){
fi; fi;
elif [ "$CMDTC" == "-d" ] || [ "$CMDTC" == "--duplicate" ];then #duplicate toolchain elif [ "$CMDTC" == "-d" ] || [ "$CMDTC" == "--duplicate" ];then #duplicate toolchain
if _check_toolchain "$OPTION1";then if _check_toolchain "$OPTION1";then
! _check_toolchain "$OPTION2" && _toolchain_repair "$(_backup "$OPTION1" "$OPTION2")" || echo -e "\n\n$r_l $txt_error:$y_l $OPTION2$w_l Toolchain already exists!""$rs_" && _nl && exit; ! _check_toolchain "$OPTION2" && _toolchain_repair "$(_backup "$OPTION1" "$OPTION2")" || echo -e "\n\n${r_l} ${txt_error}:${y_l} ${OPTION2}${w_l} Toolchain already exists!${rs_}" && _nl && exit;
bye; bye;
else else
_nl && exit; _nl && exit;
@ -96,7 +96,7 @@ tcupdate(){
elif [ "$CMDTC" == "-ctng" ] || [ "$CMDTC" == "--crosstool-ng" ] || [ "$CMDTC" == "-fng" ] || [ "$CMDTC" == "--freetz-ng" ];then #toolchain editor menu elif [ "$CMDTC" == "-ctng" ] || [ "$CMDTC" == "--crosstool-ng" ] || [ "$CMDTC" == "-fng" ] || [ "$CMDTC" == "--freetz-ng" ];then #toolchain editor menu
_tpl_editor "$(_get_template_type "$cttpldir/$OPTION1")" "$OPTION1"; _tpl_editor "$(_get_template_type "$cttpldir/$OPTION1")" "$OPTION1";
bye; bye;
elif [ -z "$CMDTC" ];then elif [ -z "$CMDTC" ];then #show toolchain menu
unset menu_close; unset menu_close;
while [ ! $menu_close ] while [ ! $menu_close ]
do do
@ -126,7 +126,7 @@ tcupdate(){
case $ret in case $ret in
0) #Update toolchain 0) #Update toolchain
menu_close="1";; _integrate_libs "$tc" "" "1";;
1) #Start crosstool-NG 1) #Start crosstool-NG
_create_tc "" "" "1";; _create_tc "" "" "1";;
2) #Backup toolchain 2) #Backup toolchain
@ -136,65 +136,73 @@ tcupdate(){
[ "$FLAG" == "1" ] && return || bye;; [ "$FLAG" == "1" ] && return || bye;;
esac; esac;
done; done;
elif [ -n "$tc" ];then #update toolchain
_integrate_libs "$tc" "$OPTION1" "$FLAG";
[ "$FLAG" -gt "0" ] && return || bye;
fi; fi;
};
_integrate_libs(){
local tc="$1" libkeys="$2" menu_close props i icount;
#toolchain native not supported and exists check #toolchain native not supported and exists check
if ! _check_toolchain $tc;then if ! _check_toolchain "$tc";then
[ -z "$CMDTC" ] && sleep 2 && tcupdate "$CMDTC" "$OPTION1" "$OPTION2" "$FLAG" || _nl && [ "$FLAG" == "1" ] || [ "$FLAG" == "2" ] && sleep 2 && return || exit; _nl && [ "$FLAG" -gt "0" ] && sleep 2 && return || exit;
fi; fi;
#load toolchain config #get toolchain properties
[ -f "$tccfgdir/$tc" ] && source "$tccfgdir/$tc"; props=$(_get_toolchain_properties "$tc");
cd "$tcdir/$tc/bin"; compilername=$(echo "$props" | awk -F';' '{print $1}' | xargs);
ranlibname=$(echo "$props" | awk -F';' '{print $2}' | xargs);
includedir=$(echo "$props" | awk -F';' '{print $3}' | xargs);
sysrootdir=$(echo "$props" | awk -F';' '{print $4}' | xargs);
prefixdir=$(echo "$props" | awk -F';' '{print $5}' | xargs);
pkgconfigdir=$(echo "$props" | awk -F';' '{print $6}' | xargs);
hostname=$(echo "$props" | awk -F';' '{print $7}' | xargs);
#autodetect toolchain's sysroot, prefix, include
compilername="$_compiler""gcc";compilername=$(realpath -s $compilername);
ranlibname="$_compiler""ranlib";ranlibname=$(realpath -s $ranlibname);
hostname=${_compiler%?};
incdir=$(realpath -s $(echo | "$compilername" -Wp,-v -xc - -fsyntax-only 2>&1 | grep include$ | tail -n 1 | xargs))
sr=$("$compilername" -print-sysroot 2>/dev/null);
sr=$(realpath -sm "$sr" 2>/dev/null);
if [ ${#sr} -gt ${#tcdir} ];then
[ -d "$sr/include" ] && cd "$sr"
[ -d "$sr/usr/include" ] && [ ! "$(realpath $(readlink -- "$PWD") 2>/dev/null)" == "$(realpath "$sr/usr")" ] && cd "$sr/usr" #Ignore symlinks to the same directory
else
cd "$tcdir/$tc/$_sysroot"
fi;
prefixdir="$PWD"
[ "$FLAG" == "1" ] && backxit=1 || backxit=$menu_close;
unset menu_close;
while [ ! $menu_close ] while [ ! $menu_close ]
do do
#autodetect toolchain's pkgconfig folder #update current toolchain pkgconfig
pkg=$(find * | grep -m1 "/pkgconfig") && pkgdir="$prefixdir/$pkg" || pkgdir="$prefixdir"; pkgconfigdir=$(_get_toolchain_pkgconfig "$prefixdir");
cd "$prefixdir"
#get current toolchain libs
tc_libs=$(_get_toolchain_libs "$pkgconfigdir"); #semicolon separeted "pkgname|version|key|compare|libname"
#LIBRARY UPDATE MENU #LIBRARY UPDATE MENU
unset MENU_OPTIONS;COUNT=0;unset libs; unset MENU_OPTIONS;COUNT=0;unset libs;unset libversioncurrent;unset libversioncompare;
for i in "${LIBS[@]}" for i in "${LIBS[@]}"
do do
[ "${!i}" == "0" ] && continue; [ "${!i}" == "0" ] && continue;
libkey=$i; libkey=$i;
libbeta="$i"_beta; [ "$LIBS_LIST_BETA" == "0" ] && [ "${!libbeta}" == "1" ] && continue; #skip beta libraries in list libbeta="$i"_beta; [ "$LIBS_LIST_BETA" == "0" ] && [ "${!libbeta}" == "1" ] && continue; #skip beta libraries in list
libname="$i"_name;libname=${!libname}; libname="$i"_name;libname="${!libname}";
libversion="$i"_version;libversion=${!libversion}; libversion="$i"_version;libversion="${!libversion}";
libdesc="$i"_desc;libdesc=${!libdesc}; libdesc="$i"_desc;libdesc="${!libdesc}";
[ ${#libdesc} -eq 0 ] && libdesc="$libname $libversion"; [ "${#libdesc}" -eq 0 ] && libdesc="$libname $libversion";
libcheck="$i"_check;libcheck=${!libcheck}; libcheck="$i"_check;libcheck="${!libcheck}";
libversioncheck=$(echo "$libcheck" | awk '{printf $2}') libversioncheck=$(echo "$libcheck" | awk '{printf $2}')
libcheck=$(echo "$libcheck" | awk '{printf $1}') libcheck=$(echo "$libcheck" | awk '{printf $1}')
liburl="$i"_url;liburl=${!liburl}; liburl="$i"_url;liburl="${!liburl}";
libversioncurrent=$(_get_version "$pkgdir/$libcheck" "$libversioncheck");
libversioncompare=$(_compare_version $libversion $(echo $libversioncurrent | sed -e 's/^$/0.0.0/g'));
libtasks="$i"_tasks[@];libtasks=("${!libtasks}"); libtasks="$i"_tasks[@];libtasks=("${!libtasks}");
libexports="$i"_exports[@];libexports=("${!libexports}");
libconfigure="$i"_configure[@];libconfigure=("${!libconfigure}"); # check match of existing lib
libmake="$i"_make[@];libmake=("${!libmake}"); for l in $(echo "$tc_libs" | tr ";" "\n") #semicolon separeted "pkgname|version|key|compare|libname"
do
key=$(echo "$l" | awk -F'|' '{print $3}' | xargs);
if [ "$key" == "$libkey" ];then
libversioncurrent=$(echo "$l" | awk -F'|' '{print $2}' | xargs);
libversioncompare=$(echo "$l" | awk -F'|' '{print $4}' | xargs);
break;
else
libversioncurrent="";
libversioncompare="";
fi;
done;
#Preselection and formatting #Preselection and formatting
[ "$libversioncompare" == "=" ] && libtxtfmt="\Z2" || libtxtfmt=""; [ "$libversioncompare" == "=" ] && libtxtfmt="\Z2" || libtxtfmt="";
[ "$libversioncompare" == "<" ] && libtxtfmt="\Z1"; [ "$libversioncompare" == "<" ] && libtxtfmt="\Z1";
[ "$libversioncompare" == ">" ] && [ ${#libversioncurrent} -gt 0 ] && libselected="on" && libtxtfmt="\Z5" || libselected="off"; [ "$libversioncompare" == ">" ] && [ "${#libversioncurrent}" -gt 0 ] && libselected="on" && libtxtfmt="\Z5" || libselected="off";
MENU_OPTIONS+=("$i" "$libdesc""$(printf '%*s' $((24-${#libdesc})))""$libtxtfmt$([ $libversioncurrent ] && echo $libversioncompare) $(echo $libversioncurrent | sed -e 's/^$/ ---/g')\Zn" "$(echo $libselected)" "$([ $libname ] && echo "$libdesc: $liburl")");counter; MENU_OPTIONS+=("$i" "$libdesc""$(printf '%*s' $((24-${#libdesc})))""$libtxtfmt$([ $libversioncurrent ] && echo $libversioncompare) $(echo $libversioncurrent | sed -e 's/^$/ ---/g')\Zn" "$(echo $libselected)" "$([ $libname ] && echo "$libdesc: $liburl")");counter;
@ -204,31 +212,35 @@ tcupdate(){
done; 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;
if [ ${#OPTION1} -gt 0 ];then #Force build library call if [ "${#libkeys}" -gt 0 ];then #Force integrate libs call
opts=$(echo "$OPTION1" | tr ',' '\n'); opts=$(echo "$libkeys" | tr ',' '\n');
ret="0"; ret="0";
else else
clear;clear; clear;clear;
opts=$("$gui" "--item-help" "--help-tags" "$st_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--default-item" "$lkey" "--ok-label" "Start" "--help-button" "--help-label" "Info" "--cancel-label" "$([ "$backxit" == "1" ] && echo "Back" || echo "Exit")" "--title" "-[ Library Update Menu - \Z2$tc\Zn ]-" "$cl_"\ opts=$("$gui" "--item-help" "--help-tags" "$st_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--default-item" "$lkey" "--ok-label" "Start" "--help-button" "--help-label" "Info" "--cancel-label" "$([ ! "$3" -gt "0" ] && echo "Exit" || echo "Back")" "--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" \ "\nSelect all libraries to update in toolchain's SYSROOT folder:\n$prefixdir\n\n library version NEW CURRENT" \
"${COUNT+12}" 70 0 "${MENU_OPTIONS[@]}"); "${COUNT+12}" 70 0 "${MENU_OPTIONS[@]}");
ret="$?" ret="$?"
fi; fi;
#sort opts descending to ensure LIB_USB is build before LIB_PCSC
opts=$(echo "$opts" | tr ' ' '\n' | sort -hr);
#SSL select check #SSL select check
[ $(echo $opts | tr ' ' '\n' | grep -c "SSL_") -gt 1 ] && echo -e $r_l"\n\nPlease select only one SSL version!"$re_ && sleep 3 && [ ${#OPTION1} -gt 0 ] && menu_close=1 && continue; [ $(echo $opts | tr ' ' '\n' | grep -c "SSL_") -gt 1 ] && echo -e "${r_l}\n\nPlease select only one SSL version!${re_}" && sleep 3 && [ "${#OPTION1}" -gt 0 ] && menu_close=1 && continue;
case $ret in case $ret in
0) #Start - Build library 0) #Start - Build library
ts=$(date +%F.%H%M%S); ts=$(date +%F.%H%M%S);
tmpdir="/tmp/lib_source/$ts"; tmpdir="/tmp/lib_source/$ts";
icount=$(echo $opts | wc -w);i=0; icount=$(echo $opts | wc -w);i=0;
for o in $opts;do for o in $opts;do
unset buildtasks; unset buildtasks;
for l in "${libs[@]}";do for l in "${libs[@]}";do
declare -a lib="${l[*]}"; #populate libs array element declare -a lib="${l[*]}"; #populate libs array element
[ ! "$o" == "${lib[0]}" ] && continue || ((i++)); [ ! "$o" == "${lib[0]}" ] && continue || ((i++));
logfile="$ldir/"$ts"_tup_"$_toolchainname"_"${lib[1]}"_"${lib[2]}".log" logfile="$ldir/${ts}_tup_${tc}_${lib[1]}_${lib[2]}.log"
#generate build command list #generate build command list
declare -a libtasks="${lib[7]}"; #populate tasks array element declare -a libtasks="${lib[7]}"; #populate tasks array element
@ -236,13 +248,15 @@ tcupdate(){
task=$(_replace_tokens "$task"); #replace tokens task=$(_replace_tokens "$task"); #replace tokens
buildtasks+=("$task"); buildtasks+=("$task");
done; done;
_build "($i/$icount) $tc: library ${lib[1]} ${lib[2]}" $(_extract $(_dl "${lib[6]}" "${lib[1]} ${lib[2]}") "$tmpdir" 2>/dev/null) "$logfile" "${buildtasks[@]}"; _build_library "($i/$icount) $tc: library ${lib[1]} ${lib[2]}" $(_extract $(_dl "${lib[6]}" "${lib[1]} ${lib[2]}") "$tmpdir" 2>/dev/null) "$logfile" "${buildtasks[@]}";
done; done;
[ "${#buildtasks[@]}" == "0" ] && echo -e "$r_l $txt_error:$y_l $o$w_l Library not found in config file""$rs_"; [ "${#buildtasks[@]}" == "0" ] && echo -e "${r_l} ${txt_error}:${y_l} ${o}${w_l} Library not found in config file${rs_}";
done; done;
[ -d "$tmpdir" ] && rm -r "$tmpdir";; [ -d "$tmpdir" ] && rm -r "$tmpdir";;
1) #Exit/Back 1) #Exit/Back
menu_close="1";; menu_close="1";
return;;
2) #Info 2) #Info
first=$(echo "$opts" | awk '{printf $1}'); first=$(echo "$opts" | awk '{printf $1}');
lkey=$(echo "$opts" | awk '{printf $2}'); lkey=$(echo "$opts" | awk '{printf $2}');
@ -251,7 +265,7 @@ tcupdate(){
sp=$(printf '%*s' 90 | tr ' ' '='); sp=$(printf '%*s' 90 | tr ' ' '=');
txt=$(cat "$configname" | grep ""$lkey"=\|"$lkey"_"); txt=$(cat "$configname" | grep ""$lkey"=\|"$lkey"_");
bcd=$(cat "$configname" | grep ""$lkey"_tasks"); bcd=$(cat "$configname" | grep ""$lkey"_tasks");
txt=$(echo -e "Toolchain: $tcdir/$tc\nCompiler: $compilername\nSysroot: $sr\nPrefix: $prefixdir\nInclude: $incdir\n$sp\n\nLibrary configuration:\n$txt\n\nBuild command:\n$(_replace_tokens "$(_tidy_tasks "$bcd" "$lkey")")"); txt=$(echo -e "Toolchain: $tcdir/$tc\nCompiler: $compilername\nSysroot: $sysrootdir\nPrefix: $prefixdir\nInclude: $includedir\n$sp\n\nLibrary configuration:\n$txt\n\nBuild command:\n$(_replace_tokens "$(_tidy_tasks "$bcd" "$lkey")")");
tempfile=$(mktemp) && echo -e "$txt" > "$tempfile"; tempfile=$(mktemp) && echo -e "$txt" > "$tempfile";
"$gui" "$st_" "$nc_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--ok-label" "Back" "--textbox" "$tempfile" 30 80; "$gui" "$st_" "$nc_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--ok-label" "Back" "--textbox" "$tempfile" 30 80;
rm "$tempfile" 2>/dev/null; rm "$tempfile" 2>/dev/null;
@ -259,27 +273,18 @@ tcupdate(){
esac; esac;
#Exit loop if build library is forced #Exit loop if build library is forced
[ ${#OPTION1} -gt 0 ] && menu_close=1; [ "${#libkeys}" -gt 0 ] && menu_close=1;
done; done;
#Reopen previous menu
[ ${#OPTION1} -gt 0 ] && exit;
[ "$FLAG" == "2" ] && return;
if [ ${#opts} -gt 0 ];then
tcupdate "$tc" "$OPTION1" "$OPTION2" "$backxit";
else
[ "$backxit" == "1" ] && tcupdate "" "$OPTION1" "$OPTION2" "$FLAG" || bye;
fi;
}; };
_create_tc(){ _create_tc(){
_sz; # Prepare DIALOG settings _sz; # Prepare DIALOG settings
unset TPL_LIST; unset TPL_LIST;
local menu_close; local menu_close libkeys;
while [ ! $menu_close ] while [ ! $menu_close ]
do do
if [ ${#2} -gt 0 ];then #Force setup call if [ "${#2}" -gt 0 ];then #Force setup call
ret="1"; ret="1";
elif [ ${#1} -gt 0 ];then #Force build toolchain call elif [ "${#1}" -gt 0 ];then #Force build toolchain call
opts="$1"; opts="$1";
ret="0"; ret="0";
else #Show Template Menu else #Show Template Menu
@ -331,12 +336,30 @@ _create_tc(){
for tpl in $opts;do for tpl in $opts;do
if [ -f "$cttpldir/$tpl" ];then if [ -f "$cttpldir/$tpl" ];then
#get existing toolchain properties to detect current toolchain libs
unset libkeys;
if [ -d "$tcdir/$tpl" ];then
props=$(_get_toolchain_properties "$tpl");
prefixdir=$(echo "$props" | awk -F';' '{print $5}' | xargs);
pkgconfigdir=$(echo "$props" | awk -F';' '{print $6}' | xargs);
#get current toolchain libs
tc_libs=$(_get_toolchain_libs "$pkgconfigdir"); #semicolon separeted "pkgname|version|key|compare|libname"
for l in $(echo "$tc_libs" | tr ";" "\n")
do
key=$(echo "$l" | awk -F'|' '{print $3}' | xargs);
[ -n "$key" ] && libkeys+="${key},";
done;
libkeys="$(echo "${libkeys%?}" | xargs)";
fi;
logfile="$ldir/$(date +%F.%H%M%S)_tup_crosstoolchain_"$tpl".log"; ((i++)); logfile="$ldir/$(date +%F.%H%M%S)_tup_crosstoolchain_"$tpl".log"; ((i++));
clear; clear;
sp=$(printf '%*s' 80 | tr ' ' '=') sp=$(printf '%*s' 80 | tr ' ' '=')
echo -e "$pdesc - creating cross toolchain log - $(date +"%F %T")" | tee -a "$logfile"; echo -e "$pdesc - creating cross toolchain log - $(date +"%F %T")" | tee -a "$logfile";
echo -e "$y_l$sp\nbuild ($i/$icount): command list for cross toolchain $tpl:\n$sp" | tee -a "$logfile"; echo -e "${y_l}$sp\nbuild ($i/$icount): command list for cross toolchain $tpl:\n$sp" | tee -a "$logfile";
#copy template #copy template
[ $(_get_template_type "$cttpldir/$tpl") == "CTNG" ] && tpltargetdir="$ctngsrcdir"; [ $(_get_template_type "$cttpldir/$tpl") == "CTNG" ] && tpltargetdir="$ctngsrcdir";
@ -367,14 +390,18 @@ _create_tc(){
#run build #run build
[ $(_get_template_type "$cttpldir/$tpl") == "CTNG" ] && bcl=$(printf '%s\n' "${CTNG_BUILD_tasks[@]}"); [ $(_get_template_type "$cttpldir/$tpl") == "CTNG" ] && bcl=$(printf '%s\n' "${CTNG_BUILD_tasks[@]}");
[ $(_get_template_type "$cttpldir/$tpl") == "FNG" ] && bcl=$(printf '%s\n' "${FNG_BUILD_tasks[@]}"); [ $(_get_template_type "$cttpldir/$tpl") == "FNG" ] && bcl=$(printf '%s\n' "${FNG_BUILD_tasks[@]}");
echo -e "cd \"$tpltargetdir\";\n$(_replace_tokens "$bcl")\n$sp""$re_" | tee -a "$logfile"; echo -e "cd \"${tpltargetdir}\";\n$(_replace_tokens "$bcl")\n$sp${re_}" | tee -a "$logfile";
sleep 2; sleep 2;
if [ $CTNG_START_BUILD -eq 1 ];then if [ $CTNG_START_BUILD -eq 1 ];then
cd "$tpltargetdir"; cd "$tpltargetdir";
#print out detected libs in current toolchain
[ "${#libkeys}" -gt 0 -a "$LIBS_AUTO_INTEGRATE" -eq 1 ] && echo -e "${y_l}\nThe following libraries were detected in the existing toolchain:\n${b_l}$(echo "$libkeys" | tr ',' '\n' | sort -hr)${re_}" | tee -a "$logfile";
#print out crosstool version #print out crosstool version
[ $(_get_template_type "$cttpldir/$tpl") == "CTNG" ] && echo -e "$g_l\n$(./ct-ng | grep 'crosstool-NG version' &2>/dev/null | tail -1)\n""$re_" | tee -a "$logfile"; [ $(_get_template_type "$cttpldir/$tpl") == "CTNG" ] && echo -e "${g_l}\n$(./ct-ng | grep 'crosstool-NG version' &2>/dev/null | tail -1)\n${re_}" | tee -a "$logfile";
[ $(_get_template_type "$cttpldir/$tpl") == "FNG" ] && echo -e "$g_l\n$(tools/freetz-revision 2>&1 | tail -1)\n""$re_" | tee -a "$logfile"; [ $(_get_template_type "$cttpldir/$tpl") == "FNG" ] && echo -e "${g_l}\n$(tools/freetz-revision 2>&1 | tail -1)\n${re_}" | tee -a "$logfile";
#generate build command list #generate build command list
unset buildtasks; unset buildtasks;
@ -423,6 +450,12 @@ _create_tc(){
#save config in target toolchain folder #save config in target toolchain folder
[ -f "$tpltargetdir/.config" ] && cp -f "$tpltargetdir/.config" "$tcdir/$tpl/"; [ -f "$tpltargetdir/.config" ] && cp -f "$tpltargetdir/.config" "$tcdir/$tpl/";
#auto integrate libs
if [ "${#libkeys}" -gt 0 -a "$LIBS_AUTO_INTEGRATE" -eq 1 ];then
echo -e "${y_l}\nThe following libraries will now be integrated into the toolchain:\n${b_l}$(echo "$libkeys" | tr ',' '\n' | sort -hr)${re_}" | tee -a "$logfile";
_integrate_libs "$tpl" "$libkeys" "$FLAG";
fi;
#compress toolchain #compress toolchain
_compress "$dldir/Toolchain-$tpl.tar.xz" "$tcdir/$tpl" | "$gui" "$st_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--title" " -[ Compress cross toolchain $tpl to Toolchain-$tpl.tar.xz ]- " "$pb_" "$_lines" "$_cols"; _compress "$dldir/Toolchain-$tpl.tar.xz" "$tcdir/$tpl" | "$gui" "$st_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--title" " -[ Compress cross toolchain $tpl to Toolchain-$tpl.tar.xz ]- " "$pb_" "$_lines" "$_cols";
@ -434,11 +467,11 @@ _create_tc(){
_paktc_timer 10; _paktc_timer 10;
fi; fi;
else else
echo -e "$r_l""$CTNG_ROOT_BUILD_ERROR""$y_l""$CTNG_ROOT_BUILD_CMD""$re_" | tee -a "$logfile"; echo -e "${r_l}${CTNG_ROOT_BUILD_ERROR}${y_l}${CTNG_ROOT_BUILD_CMD}${re_}" | tee -a "$logfile";
_paktc_timer 10; _paktc_timer 10;
fi; fi;
else else
echo -e "$r_l $txt_error:$y_l $tpl$w_l Template $txt_n_installed""$rs_"; echo -e "${r_l} ${txt_error}:${y_l} ${tpl}${w_l} Template ${txt_n_installed}${rs_}";
sleep 2; sleep 2;
fi; fi;
done;; done;;
@ -452,14 +485,13 @@ _create_tc(){
menu_close="1"; menu_close="1";
return;; return;;
esac; esac;
#Exit loop if setup or build toolchain are forced #Exit loop if setup or build toolchain are forced
[ ${#2} -gt 0 ] || [ ${#1} -gt 0 ] && menu_close=1; [ "${#2}" -gt 0 ] || [ "${#1}" -gt 0 ] && menu_close=1;
done; done;
}; };
_migrations(){ _migrations(){
#rename folder for compatibility with pre 0.13.x releases #rename folder for compatibility with pre 0.13.x releases
[ -d "$ctdir/source" ] && mv -f "$ctdir/source" "$ctngsrcdir"; [ -d "$ctdir/source" ] && mv -f "$ctdir/source" "$ctngsrcdir";
@ -491,7 +523,6 @@ _migrations(){
fi; fi;
}; };
_backup(){ _backup(){
_sz; # Prepare DIALOG settings _sz; # Prepare DIALOG settings
src=$1; src=$1;
dest=$2; dest=$2;
@ -508,14 +539,12 @@ _backup(){
) | "$gui" "$st_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--title" " -[ Backup $src to $(basename "$xzfile") ]- " "$pb_" "$_lines" "$_cols"; ) | "$gui" "$st_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--title" " -[ Backup $src to $(basename "$xzfile") ]- " "$pb_" "$_lines" "$_cols";
[ -f "$newtccfgfile" ] && echo "$dest"; [ -f "$newtccfgfile" ] && echo "$dest";
}; };
_build(){ _build_library(){
_sz; # Prepare DIALOG settings _sz; # Prepare DIALOG settings
local desc="$1"; # Save 1. argument in a variable local desc="$1" libsrcdir="$2" lf="$3"; # Save the first 3 arguments in variables
local libsrcdir="$2"; # Save 2. argument in a variable shift 3; # Shift all 3 arguments to the left (original $1,$2,$3 gets lost)
local lf="$3"; # Save 3. argument in a variable
shift && shift && shift;# Shift all 3. arguments to the left (original $1,$2,$3 gets lost)
local tasks=("$@"); # Rebuild the array with rest of arguments local tasks=("$@"); # Rebuild the array with rest of arguments
( (
bcl=$(printf '%s\n' "${tasks[@]}"); bcl=$(printf '%s\n' "${tasks[@]}");
@ -530,9 +559,9 @@ _build(){
#build error message #build error message
error_on_build=$(grep -cw1 Error "$lf"); error_on_build=$(grep -cw1 Error "$lf");
if [ "$error_on_build" -gt "0" ];then if [ "$error_on_build" -gt "0" ];then
echo -e ""$r_l"ERRORS on build found, details:\n$b_l $lf\n$y_l" >$(tty); echo -e "${r_l}ERRORS on build found, details:\n${b_l} ${lf}\n${y_l}" >$(tty);
_paktc_timer 10; _paktc_timer 10;
echo -e "$re_$w_l"; echo -e "${re_}${w_l}";
fi; fi;
}; };
@ -556,7 +585,7 @@ _tpl_editor(){
fi; fi;
cd "$editordir"; cd "$editordir";
TASKS=${1}_CONFIG_tasks[@];TASKS=("${!TASKS}"); TASKS="${1}"_CONFIG_tasks[@];TASKS=("${!TASKS}");
for task in "${TASKS[@]}";do for task in "${TASKS[@]}";do
task=$(_replace_tokens "$task"); #replace tokens task=$(_replace_tokens "$task"); #replace tokens
@ -720,6 +749,77 @@ _tidy_tasks(){
s#"\"\)\;"##g; \ s#"\"\)\;"##g; \
s#"\'\)\;"##g;"; s#"\'\)\;"##g;";
}; };
_get_toolchain_properties(){
local tc="$1" props;
#load toolchain config
[ -f "$tccfgdir/$tc" ] && source "$tccfgdir/$tc";
#jump into toolchains bin folder
cd "$tcdir/$tc/bin"
#autodetect toolchain's properties
compilername="$_compiler""gcc";compilername=$(realpath -s $compilername);
ranlibname="$_compiler""ranlib";ranlibname=$(realpath -s $ranlibname);
hostname="${_compiler%?}";
includedir=$(realpath -s $(echo | "$compilername" -Wp,-v -xc - -fsyntax-only 2>&1 | grep include$ | tail -n 1 | xargs))
sysrootdir="$(realpath -sm "$("$compilername" -print-sysroot 2>/dev/null)" 2>/dev/null)";
if [ "${#sysrootdir}" -gt "${#tcdir}" ];then
[ -d "$sysrootdir/include" ] && cd "$sysrootdir"
[ -d "$sysrootdir/usr/include" ] && [ ! "$(realpath $(readlink -- "$PWD") 2>/dev/null)" == "$(realpath "$sysrootdir/usr")" ] && cd "$sysrootdir/usr" #Ignore symlinks to the same directory
else
cd "$tcdir/$tc/$_sysroot"
fi;
prefixdir="$PWD"
pkgconfigdir="$(_get_toolchain_pkgconfig "$prefixdir")";
props="$compilername;$ranlibname;$includedir;$sysrootdir;$prefixdir;$pkgconfigdir;$hostname"
echo "$props" | xargs;
[ -n "$props" ] && exit 0 || exit 1;
};
_get_toolchain_pkgconfig(){
local prefixdir="$1";
cd "$prefixdir"
pkg=$(find * | grep -m1 "/pkgconfig") && pkgconfigdir="$prefixdir/$pkg" || pkgconfigdir="$prefixdir";
echo "$pkgconfigdir" | xargs;
[ -n "$pkgconfigdir" ] && exit 0 || exit 1;
};
_get_toolchain_libs(){
local pkgconfigdir="$1" key libs;
cd "$pkgconfigdir"
#looking for existing libraries
for pkg in *.pc
do
[ -f "$pkg" ] && content=$(cat "$pkg") && name=$(echo "$content" | grep 'Name:' | sed -e "s/Name: //g") && version=$(echo "$content" | grep 'Version:' | sed -e "s/Version: //g")
if [ ! -z "$pkg" -a ! -z "$name" -a ! -z "$version" ];then
#try match with library from config
for l in "${LIBS[@]}"
do
[ "${!l}" == "0" ] && continue;
libcheck="$l"_check;libcheck="${!libcheck}";
libversion="$l"_version;libversion="${!libversion}";
libversioncompare=$(_compare_version $libversion $version);
if [[ "$pkg $version" =~ ^${libcheck}.* ]];then #regex match, don't quote the right side
key="$l";
compare="$libversioncompare";
break;
else
unset key && unset compare;
fi;
done;
[ -n "$key" ] && libs+="$pkg\|$version\|$key\|$compare\|$name;";
fi;
done;
echo "${libs%?}" | xargs;
[ -n "$libs" ] && exit 0 || exit 1;
};
_get_template_properties(){ _get_template_properties(){
desc=""; desc="";
if [ -f "$1" ];then if [ -f "$1" ];then
@ -799,20 +899,6 @@ _get_template_type(){
echo "CTNG"; echo "CTNG";
fi; fi;
}; };
_get_version(){
r="";
if [ -f "$1" ];then
content=$(cat "$1");
ver=$(echo "$content" | grep 'Version:' | sed -e "s/Version: //g");
if [ -z "$2" ];then
r="$ver";
else
(echo "$ver" | grep -qc "$2") && r="$ver";
fi;
fi;
echo $r;
[ ${#r} -gt 0 ] && exit 0 || exit 1;
};
_compare_version(){ _compare_version(){
min=$(printf "$1\n$2\n" | sort -V | head -n1); min=$(printf "$1\n$2\n" | sort -V | head -n1);
@ -841,31 +927,31 @@ echo -e "\033[2K\r"; #remove characters from console
_check_toolchain(){ _check_toolchain(){
if [ -z "$1" ];then #toolchain parameter empty if [ -z "$1" ];then #toolchain parameter empty
echo -e "\n\n$r_l $txt_error:$y_l Parameter$w_l Toolchain not set!""$rs_"; echo -e "\n\n${r_l} ${txt_error}:${y_l} Parameter${w_l} Toolchain not set!${rs_}";
return 1; return 1;
elif [ "$1" == "native" ];then #toolchain native not supported elif [ "$1" == "native" ];then #toolchain native not supported
echo -e "\n\n$r_l $txt_error:$y_l $1$w_l Toolchain library update not supported!""$rs_"; echo -e "\n\n${r_l} ${txt_error}:${y_l} ${1}${w_l} Toolchain library update not supported!${rs_}";
return 1; return 1;
elif [ ! -d "$tcdir/$1/bin" ];then #toolchain not installed elif [ ! -d "$tcdir/$1/bin" ];then #toolchain not installed
echo -e "\n\n$r_l $txt_error:$y_l $1$w_l Toolchain $txt_n_installed""$rs_"; echo -e "\n\n${r_l} ${txt_error}:${y_l} ${1}${w_l} Toolchain ${txt_n_installed}${rs_}";
return 1; return 1;
else else
return 0; return 0;
fi; fi;
}; };
_check_root(){ _check_root(){
! ((${EUID:-0} || "$(id -u)")); ! (("${EUID:-0}" || "$(id -u)"));
}; };
_check_lib(){ _check_lib(){
case "$1" in case "$1" in
"PCSC") #Create symlink to the PCSC header files, if the last include path of the compiler don't point to it "PCSC") #Create symlink to the PCSC header files, if the last include path of the compiler don't point to it
echo -e "\nCheck for PCSC header files and try to symlink to the correct PCSC header files if the last compiler include path points to the wrong location..."; echo -e "\nCheck for PCSC header files and try to symlink to the correct PCSC header files if the last compiler include path points to the wrong location...";
if [ ${#incdir} -gt 0 ] && [ ! -d "$incdir/PCSC" ];then if [ "${#includedir}" -gt 0 ] && [ ! -d "$includedir/PCSC" ];then
headerdir="$(dirname $(find "$prefixdir" -type f -name "pcsclite.h" | head -n 1))"; headerdir="$(dirname $(find "$prefixdir" -type f -name "pcsclite.h" | head -n 1))";
[ ${#headerdir} -gt 0 ] && ln -s "$(realpath --relative-to="$incdir" "$headerdir")" "$incdir/PCSC"; [ "${#headerdir}" -gt 0 ] && ln -s "$(realpath --relative-to="$includedir" "$headerdir")" "$includedir/PCSC";
[ ${#headerdir} -gt 0 ] && echo "Symlink $incdir/PCSC -> $headerdir created, to point to the PCSC header files." || "No PCSC header files found in $prefixdir and it's sub directories!"; [ "${#headerdir}" -gt 0 ] && echo "Symlink $includedir/PCSC -> $headerdir created, to point to the PCSC header files." || "No PCSC header files found in $prefixdir and it's sub directories!";
else else
[ ${#incdir} -gt 0 ] && echo "PCSC header files are in the correct location: $incdir/PCSC" || echo "Compiler returns no include directories!"; [ "${#includedir}" -gt 0 ] && echo "PCSC header files are in the correct location: $includedir/PCSC" || echo "Compiler returns no include directories!";
fi;; fi;;
*) echo "not implemented yet!"; *) echo "not implemented yet!";
esac; esac;
@ -876,9 +962,9 @@ _check_pkg(){
composite inkscape pkg-config python gettext ruby ); composite inkscape pkg-config python gettext ruby );
headers=( ncurses libacl.h sys/capability.h readline.h glib-2.0/glib.h ); headers=( ncurses libacl.h sys/capability.h readline.h glib-2.0/glib.h );
libs=( libstdc++.so.6 libstdc++.a libc\\.a ); libs=( libstdc++.so.6 libstdc++.a libc\\.a );
echo -e "$y_l""SYSCHECK -> Please wait while performing checks of required tools and dependencies...""$re_"; echo -e "${y_l}SYSCHECK -> Please wait while performing checks of required tools and dependencies...${re_}";
if syscheck "" "" "${pkgs[*]}" "${headers[*]}" "${libs[*]}";then if syscheck "" "" "${pkgs[*]}" "${headers[*]}" "${libs[*]}";then
echo -e "$r_l""\nSYSCHECK -> You need to manually install the following packages to use this plugin properly:\n"$y_l"$prefix install$packages\n""$re_" && _paktc_timer 10; echo -e "${r_l}\nSYSCHECK -> You need to manually install the following packages to use this plugin properly:\n${y_l}${prefix} install${packages}\n${re_}" && _paktc_timer 10;
fi; fi;
}; };
_check_github_api_limits(){ _check_github_api_limits(){
@ -889,12 +975,12 @@ _check_github_api_limits(){
reset_time=$(date -d @$reset); reset_time=$(date -d @$reset);
if [ "$remaining" -lt "$1" ];then if [ "$remaining" -lt "$1" ];then
echo -e "$y_l""NOTE -> Please wait until "$g_l"$reset_time"$y_l" to reset your configuration file."\ echo -e "${y_l}NOTE -> Please wait until ${g_l}${reset_time}${y_l} to reset your configuration file."\
"The most recent versions and download links for the libraries are determined dynamically via the Github API."\ "The most recent versions and download links for the libraries are determined dynamically via the Github API."\
"Exceeding the rate limit on Github API will result in failures on generationg the configuration file."\ "Exceeding the rate limit on Github API will result in failures on generationg the configuration file."\
"Your Github API rate limit will be reset soon on $reset_time."\ "Your Github API rate limit will be reset soon on $reset_time."\
"\nFor "$b_l"unauthenticated requests"$y_l", the rate limit allows for "$b_l"up to $limit requests per hour"$y_l". Unauthenticated requests are associated with the originating IP address, and not the user making requests."\ "\nFor ${b_l}unauthenticated requests${y_l}, the rate limit allows for ${b_l}up to ${limit} requests per hour${y_l}. Unauthenticated requests are associated with the originating IP address, and not the user making requests."\
"\n$re_"; "\n${re_}";
return 0; return 0;
else else
return 1; return 1;
@ -905,7 +991,7 @@ _check_crosstool_setup(){
if [ "$1" == "CTNG" ] || [ -z "$1" ];then if [ "$1" == "CTNG" ] || [ -z "$1" ];then
if [ ! -f "$ctngsrcdir/ct-ng" ];then if [ ! -f "$ctngsrcdir/ct-ng" ];then
clear; clear;
echo -e "$r_l""\nCHECK -> crosstool-NG is not setup correctly. Try to fix it automatically...\n""$re_"; echo -e "${r_l}\nCHECK -> crosstool-NG is not setup correctly. Try to fix it automatically...\n${re_}";
[ -z "$1" ] && _paktc_timer 5; [ -z "$1" ] && _paktc_timer 5;
_ctng_setup "$CTNG_START_BUILD"; _ctng_setup "$CTNG_START_BUILD";
fi; fi;
@ -915,7 +1001,7 @@ _check_crosstool_setup(){
if [ "$1" == "FNG" ] || [ -z "$1" ];then if [ "$1" == "FNG" ] || [ -z "$1" ];then
if [ ! -d "$fngsrcdir/dl" ];then if [ ! -d "$fngsrcdir/dl" ];then
clear; clear;
echo -e "$r_l""\nCHECK -> Freetz-NG is not setup correctly. Try to fix it automatically...\n""$re_"; echo -e "${r_l}\nCHECK -> Freetz-NG is not setup correctly. Try to fix it automatically...\n${re_}";
[ -z "$1" ] && _paktc_timer 5; [ -z "$1" ] && _paktc_timer 5;
_fng_setup "$CTNG_START_BUILD"; _fng_setup "$CTNG_START_BUILD";
fi; fi;
@ -923,16 +1009,17 @@ _check_crosstool_setup(){
}; };
_check_config(){ _check_config(){
nok=0; nok=0;
[ -z ${LIBS_LIST_BETA+x} ] && nok=1; [ -z "${LIBS_AUTO_INTEGRATE+x}" ] && conf+="LIBS_AUTO_INTEGRATE\n" && nok=1;
[ -z ${FNG_REPO_URL+x} ] && nok=1; [ -z "${LIBS_LIST_BETA+x}" ] && conf+="LIBS_LIST_BETA\n" && nok=1;
[ -z ${CTNG_CONFIG_tasks+x} ] && nok=1; [ -z "${FNG_REPO_URL+x}" ] && conf+="FNG_REPO_URL\n" && nok=1;
[ -z ${CTNG_BUILD_AS_ROOT+x} ] && nok=1; [ -z "${CTNG_CONFIG_tasks+x}" ] && conf+="CTNG_CONFIG_tasks\n" && nok=1;
[ -z ${LIBS+x} ] && nok=1; [ -z "${CTNG_BUILD_AS_ROOT+x}" ] && conf+="CTNG_BUILD_AS_ROOT\n" && nok=1;
[ -z "${LIBS+x}" ] && conf+="LIBS\n" && nok=1;
if [ $nok -eq 1 ];then if [ $nok -eq 1 ];then
clear; clear;
echo -e "$r_l""\nCHECK -> Your config file seems to be outdated. Please restart s3 as follows to recreate an updated config file:\n"$y_l"./s3 tcupdate -r\n""$re_"; echo -e "${r_l}\nCHECK -> Your config file seems to be outdated. The following settings are missing:\n${y_l}${conf}\n${r_l}Please restart s3 as follows to recreate an updated config file:\n${y_l}./s3 tcupdate -r\n${re_}";
_paktc_timer 10; _paktc_timer 20;
return $nok; return $nok;
fi; fi;
}; };
@ -942,16 +1029,16 @@ _change_config(){
[[ ! $2 =~ "(" ]] && [[ ! $string =~ ")" ]] && qte="\"" || qte=""; #no quotes if value contains parentheses [[ ! $2 =~ "(" ]] && [[ ! $string =~ ")" ]] && qte="\"" || qte=""; #no quotes if value contains parentheses
if ! grep -Eq "^$1=.*" "$configname";then if ! grep -Eq "^$1=.*" "$configname";then
echo -e "$r_l""\nCHECK -> Variable "$y_l"$1"$r_l" does not exist in the configuration file!\n""$re_"; echo -e "${r_l}\nCHECK -> Variable ${y_l}${1}${r_l} does not exist in the configuration file!\n${re_}";
_paktc_timer 10; _paktc_timer 10;
elif [ "${1:(-6)}" == "_tasks" ];then elif [ "${1:(-6)}" == "_tasks" ];then
echo -e "$r_l""\nCHECK -> Modifying "$y_l"tasks-variables"$r_l" not implemented yet!\n""$re_"; echo -e "${r_l}\nCHECK -> Modifying ${y_l}tasks-variables${r_l} not implemented yet!\n${re_}";
_paktc_timer 10; _paktc_timer 10;
else else
cp -f "$configname" "$configname.$(date +"%Y%m%d%H%M%S")" cp -f "$configname" "$configname.$(date +"%Y%m%d%H%M%S")"
sed -i "s#^$1=.*#$1=$qte$2$qte; \#changed on $ts via tcupdate commandline#g" "$configname"; sed -i "s#^$1=.*#$1=$qte$2$qte; \#changed on $ts via tcupdate commandline#g" "$configname";
result=$(grep -E "^$1=.*" "$configname" | awk '{printf $1}'); result=$(grep -E "^$1=.*" "$configname" | awk '{printf $1}');
echo -e "$g_l""\nDONE -> Variable changed to: "$y_l"$result\n""$re_"; echo -e "${g_l}\nDONE -> Variable changed to: ${y_l}${result}\n${re_}";
_paktc_timer 5; _paktc_timer 5;
nok=0; nok=0;
fi; fi;
@ -960,8 +1047,8 @@ _change_config(){
}; };
_create_config(){ _create_config(){
#check existing jq #check existing jq
if [ ! $(which jq) ];then if [ ! "$(which jq)" ];then
echo -e "$r_l""\nCHECK -> Without the tool 'jq' automatic config file generation is not possible. Please install it first:\n"$y_l"apt install jq\n""$re_" && _paktc_timer 10; echo -e "${r_l}\nCHECK -> Without the tool 'jq' automatic config file generation is not possible. Please install it first:\n${y_l}apt install jq\n${re_}" && _paktc_timer 10;
return 1; return 1;
fi; fi;
@ -999,8 +1086,8 @@ _create_config(){
"#Filename and optional version number to check in pkgconfig folder for an existing library to get version information" "#Filename and optional version number to check in pkgconfig folder for an existing library to get version information"
"#Valid URL for downloading sources of library\n#List of build commands below. Pay attention to the SEMICOLON at the end of EACH\n#command and the correct quoting (' or \") for or to avoid expansion of variables.\n#Tokens @TOOLCHAIN@, @CC@, @RANLIB@, @PREFIX@, @HOST@, @VALIDATE@, @LOGFILE@ are replaced automatically." "#Valid URL for downloading sources of library\n#List of build commands below. Pay attention to the SEMICOLON at the end of EACH\n#command and the correct quoting (' or \") for or to avoid expansion of variables.\n#Tokens @TOOLCHAIN@, @CC@, @RANLIB@, @PREFIX@, @HOST@, @VALIDATE@, @LOGFILE@ are replaced automatically."
"#build command" ); "#build command" );
lib_settings=( "" beta name version check url tasks ); lib_settings=( "" "beta" "name" "version" "check" "url" "tasks" );
lib_keys=( SAMPLE_LIB SSL_300 SSL_111 SSL_110 SSL_102 SSL_100 SSL_098 LIB_USB LIB_PCSC LIB_ZLIB ); lib_keys=( "SAMPLE_LIB" "SSL_300" "SSL_111" "SSL_110" "SSL_102" "SSL_100" "SSL_098" "LIB_USB" "LIB_PCSC" "LIB_ZLIB" );
lib_betas=( "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" ); lib_betas=( "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" );
lib_names=( "SampleLib" "OpenSSL" "OpenSSL" "OpenSSL" "OpenSSL" "OpenSSL" "OpenSSL" "libusb" "PCSC-Lite" "zlib" ); lib_names=( "SampleLib" "OpenSSL" "OpenSSL" "OpenSSL" "OpenSSL" "OpenSSL" "OpenSSL" "libusb" "PCSC-Lite" "zlib" );
lib_versions=( "0.2.9sl" lib_versions=( "0.2.9sl"
@ -1044,7 +1131,7 @@ _create_config(){
i=0; i=0;
for ct in "${ctng_config_tasks[@]}"; for ct in "${ctng_config_tasks[@]}";
do do
echo -e "CTNG_CONFIG_tasks"$([ "$i" -gt "0" ] && echo "+")"=$ct; $ctng_config_tasks_comment$(($i+1))" >>"$configname"; echo -e "CTNG_CONFIG_tasks"$([ "$i" -gt "0" ] && echo "+")"=$ct; $ctng_config_tasks_comment$(($i+1))" >>"$configname";
((i++)); ((i++));
done; done;
i=0; i=0;
@ -1060,7 +1147,7 @@ _create_config(){
((i++)); ((i++));
done; done;
echo -e '\nFNG_REPO_URL="https://github.com/Freetz-NG/freetz-ng.git"; #Repository to load freetz-ng from' >>"$configname"; echo -e '\nFNG_REPO_URL="https://github.com/Freetz-NG/freetz-ng.git"; #Repository to load freetz-ng from' >>"$configname";
i=0; i=0;
for ct in "${fng_config_tasks[@]}"; for ct in "${fng_config_tasks[@]}";
do do
@ -1083,6 +1170,7 @@ _create_config(){
echo -e '\n#LIBRARY update build settings\n#List of ordered libraries. Only libraries in this list are available' >>"$configname"; echo -e '\n#LIBRARY update build settings\n#List of ordered libraries. Only libraries in this list are available' >>"$configname";
echo "LIBS=(${lib_keys[@]});" >>"$configname"; echo "LIBS=(${lib_keys[@]});" >>"$configname";
echo 'LIBS_LIST_BETA="0"; #In(Ex)clude libraries defined as beta' >>"$configname"; echo 'LIBS_LIST_BETA="0"; #In(Ex)clude libraries defined as beta' >>"$configname";
echo 'LIBS_AUTO_INTEGRATE="1"; #Automatically integrate libraries into toolchains' >>"$configname";
i=0; i=0;
for key in "${lib_keys[@]}"; for key in "${lib_keys[@]}";
@ -1091,20 +1179,20 @@ _create_config(){
do do
case "$setting" in case "$setting" in
"") if [ -z $setting ];then "") if [ -z $setting ];then
echo -e "\n#"${lib_names[$i]}" "${lib_versions[$i]}"" >>"$configname"; echo -e "\n#${lib_names[$i]} ${lib_versions[$i]}" >>"$configname";
fi; fi;
echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting""=\"$([ "$key" == "SAMPLE_LIB" ] && echo '0' || echo '1')\";$([ "$i" -eq "0" ] && echo " ${lib_comments[0]}")" >>"$configname";; echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting""=\"$([ "$key" == "SAMPLE_LIB" ] && echo '0' || echo '1')\";$([ "$i" -eq "0" ] && echo " ${lib_comments[0]}")" >>"$configname";;
"beta") echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting""=\"${lib_betas[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[1]}")" >>"$configname";; "beta") echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting""=\"${lib_betas[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[1]}")" >>"$configname";;
"name") echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting""=\"${lib_names[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[2]}")" >>"$configname";; "name") echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting""=\"${lib_names[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[2]}")" >>"$configname";;
"version") echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting""=\"${lib_versions[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[3]}")" >>"$configname";; "version") echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting""=\"${lib_versions[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[3]}")" >>"$configname";;
"check") [ $(echo -e "$key" | grep -c "SSL_\|SAMPLE_") -gt 0 ] && chk="$(echo -e "${lib_checks[$i]} $(echo ${lib_versions[$i]} | sed 's/\([0-9.]*\).*/\1/g')")" || chk="${lib_checks[$i]}"; "check") [ $(echo -e "$key" | grep -c "SSL_\|SAMPLE_") -gt 0 ] && chk="$(echo -e "${lib_checks[$i]} $(echo ${lib_versions[$i]} | sed 's/\([0-9.]*\).*/\1/g')")" || chk="${lib_checks[$i]}";
echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting""=\"$chk\";$([ "$i" -eq "0" ] && echo " ${lib_comments[4]}")" >>"$configname";; echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting""=\"$chk\";$([ "$i" -eq "0" ] && echo " ${lib_comments[4]}")" >>"$configname";;
"url") echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting""=\"${lib_urls[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[5]}")" >>"$configname";; "url") echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting""=\"${lib_urls[$i]}\";$([ "$i" -eq "0" ] && echo " ${lib_comments[5]}")" >>"$configname";;
"tasks") unset tasks;j=0; "tasks") unset tasks;j=0;
declare -a tasks="${lib_tasks[$i]}" declare -a tasks="${lib_tasks[$i]}"
for t in "${tasks[@]}"; for t in "${tasks[@]}";
do do
echo -e "$key"$([ ! -z $setting ] && echo "_")"$setting"$([ "$j" -gt "0" ] && echo "+")"=$t;$([ "$i" -eq "0" ] && echo " ${lib_comments[6]}$(($j+1))")" >>"$configname"; echo -e "$key"$([ ! -z "$setting" ] && echo "_")"$setting"$([ "$j" -gt "0" ] && echo "+")"=$t;$([ "$i" -eq "0" ] && echo " ${lib_comments[6]}$(($j+1))")" >>"$configname";
((j++)); ((j++));
done;; done;;
esac; esac;
@ -1119,13 +1207,13 @@ _create_toolchaincfg(){
compilername="$3""-gcc";compilername=$(realpath -s $compilername); compilername="$3""-gcc";compilername=$(realpath -s $compilername);
sr=$("$compilername" -print-sysroot 2>/dev/null); sr=$("$compilername" -print-sysroot 2>/dev/null);
sr=$(realpath -sm "$sr" 2>/dev/null); sr=$(realpath -sm "$sr" 2>/dev/null);
if [ ${#sr} -eq 0 ];then if [ "${#sr}" -eq 0 ];then
sysroot="$4"; sysroot="$4";
else else
sysroot="${sr#"$1/"}"; sysroot="${sr#"$1/"}";
fi; fi;
[ ${#5} -gt 0 ] && lsd="$5" || lsd="/usr/lib"; [ "${#5}" -gt 0 ] && lsd="$5" || lsd="/usr/lib";
[ ${#7} -gt 0 ] && info="$7" || info="$(echo -e "\\\n [ "${#7}" -gt 0 ] && info="$7" || info="$(echo -e "\\\n
!!! crosstool-NG Toolchain !!!\\\n !!! crosstool-NG Toolchain !!!\\\n
\\\n \\\n
$(echo "$6" | awk -F'[()]' '{print $1}' | xargs)\\\n $(echo "$6" | awk -F'[()]' '{print $1}' | xargs)\\\n
@ -1147,5 +1235,4 @@ _md5sum="$(cd "$dldir" && md5sum $(basename "${8%..*}"))";
_tc_info="$info"; _tc_info="$info";
_tc_infolines="5"; _tc_infolines="5";
EOF EOF
}; };

Loading…
Cancel
Save