@ -1,11 +1,11 @@
#!/bin/bash
#!/bin/bash
#simplebuild_plugin tcupdate (s3.TUP) 0.8.3
#simplebuild_plugin tcupdate (s3.TUP)
tcupdate(){
tcupdate(){
clear && _check_bin;
clear && _check_bin;
pversion="0.8.3 ";
pversion="0.8.4 ";
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";
@ -103,21 +103,23 @@ tcupdate(){
exit;
exit;
fi;
fi;
#autodetect toolchain's sysroot, prefix and pkgconfig folder
#autodetect toolchain's sysroot, prefix, include, pkgconfig folder
compilername="$_compiler""gcc";compilername=$(realpath -s $compilername);
compilername="$_compiler""gcc";compilername=$(realpath -s $compilername);
ranlibname="$_compiler""ranlib";ranlibname=$(realpath -s $ranlibname);
ranlibname="$_compiler""ranlib";ranlibname=$(realpath -s $ranlibname);
hostname=${_compiler%?};
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=$("$compilername" -print-sysroot 2>/dev/null);
sr=$(realpath -sm "$sr" 2>/dev/null);
sr=$(realpath -sm "$sr" 2>/dev/null);
if [ ${#sr} -gt ${#tcdir} ];then
if [ ${#sr} -gt ${#tcdir} ];then
[ -d "$sr/include" ] && cd "$sr"
[ -d "$sr/include" ] && cd "$sr"
[ -d "$sr/usr/include" ] && cd "$sr/usr"
[ -d "$sr/usr/include" ] && [ ! "$(realpath $(readlink -- "$PWD"))" == "$(realpath "$sr/usr")" ] && cd "$sr/usr" #Ignore symlinks to the same directory
else
else
cd "$tcdir/$tc/$_sysroot"
cd "$tcdir/$tc/$_sysroot"
fi;
fi;
prefixdir="$PWD"
prefixdir="$PWD"
pkg=$(find * | grep -m1 "/pkgconfig") && pkgdir="$prefixdir/$pkg" || pkgdir="$prefixdir";
pkg=$(find * | grep -m1 "/pkgconfig") && pkgdir="$prefixdir/$pkg" || pkgdir="$prefixdir";
#build menu items from config file
#build menu items from config file
unset MENU_OPTIONS;COUNT=0;unset libs;
unset MENU_OPTIONS;COUNT=0;unset libs;
for i in "${LIBS[@]}"
for i in "${LIBS[@]}"
@ -161,7 +163,7 @@ tcupdate(){
sp=$(printf '%*s' 90 | tr ' ' '=');
sp=$(printf '%*s' 90 | tr ' ' '=');
txt=$(cat "$configname" | grep ""$libkey"=\|"$libkey"_");
txt=$(cat "$configname" | grep ""$libkey"=\|"$libkey"_");
bcd=$(cat "$configname" | grep ""$libkey"_tasks");
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")")");
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" "$libkey")")");
tempfile=$(mktemp) && echo -e "$txt" > "$tempfile";
tempfile=$(mktemp) && echo -e "$txt" > "$tempfile";
"$gui" "$st_" "$nc_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--textbox" "$tempfile" 30 80;
"$gui" "$st_" "$nc_" "$bt_" "$title_ - \Z0$pdesc\Zn" "--colors" "--textbox" "$tempfile" 30 80;
rm "$tempfile" 2>/dev/null;
rm "$tempfile" 2>/dev/null;
@ -257,9 +259,9 @@ _create_tc(){
#run build as $CTNG_USER
#run build as $CTNG_USER
bcl=$(printf '%s\n' "${CTNG_BUILD_tasks[@]}");
bcl=$(printf '%s\n' "${CTNG_BUILD_tasks[@]}");
echo -e "cd "$ctsrcdir"\n$(_replace_tokens "$bcl")\n$sp" | tee -a "$logfile";
echo -e "cd "$ctsrcdir" && chown -R "$CTNG_USER":"$CTNG_USER" "$tcdir/$tpl"; \n$(_replace_tokens "$bcl")\n$sp" | tee -a "$logfile";
sleep 2;
sleep 2;
cd "$ctsrcdir";
cd "$ctsrcdir" && chown -R "$CTNG_USER":"$CTNG_USER" "$tcdir/$tpl" ;
cmd="${CTNG_BUILD_tasks[@]}";
cmd="${CTNG_BUILD_tasks[@]}";
sudo -u "$CTNG_USER" -H -- sh -c "$(_replace_tokens "$cmd")" 2>&1;
sudo -u "$CTNG_USER" -H -- sh -c "$(_replace_tokens "$cmd")" 2>&1;
err=$(grep '\[ERROR\]' "$ctsrcdir/build.log" | wc -l)
err=$(grep '\[ERROR\]' "$ctsrcdir/build.log" | wc -l)
@ -443,7 +445,8 @@ _replace_tokens(){
s#@RANLIB@#$ranlibname#g; \
s#@RANLIB@#$ranlibname#g; \
s#@PREFIX@#$prefixdir#g; \
s#@PREFIX@#$prefixdir#g; \
s#@HOST@#$hostname#g; \
s#@HOST@#$hostname#g; \
s#@CTNGSOURCE@#$ctsrcdir#g";
s#@CTNGSOURCE@#$ctsrcdir#g; \
s#@VALIDATE@#_check_lib#g";
};
};
_tidy_tasks(){
_tidy_tasks(){
echo -e "$1" | sed -e "s#$2"_tasks=\(\""##g; \
echo -e "$1" | sed -e "s#$2"_tasks=\(\""##g; \
@ -492,6 +495,20 @@ else
fi;
fi;
echo -e "\033[2K\r"; #remove characters from console
echo -e "\033[2K\r"; #remove characters from console
};
};
_check_lib(){
case "$1" in
"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...";
if [ ${#incdir} -gt 0 ] && [ ! -d "$incdir/PCSC" ]; then
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 ] && 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!";
else
[ ${#incdir} -gt 0 ] && echo "PCSC header files are in the correct location: $incdir/PCSC" || echo "Compiler returns no include directories!";
fi;;
*) echo "not implemented yet!";
esac;
};
_check_bin(){
_check_bin(){
bins=( git curl jq gcc g++ gperf bison flex texinfo help2man make libncurses5-dev \
bins=( git curl jq gcc g++ gperf bison flex texinfo help2man make libncurses5-dev \
@ -551,7 +568,7 @@ _create_config(){
"#Displayname"
"#Displayname"
"#Versionnumber"
"#Versionnumber"
"#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@ 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@ are replaced automatically."
"#build command" );
"#build command" );
lib_settings=( "" name version check url tasks );
lib_settings=( "" name version check url tasks );
lib_keys=( SAMPLE_LIB SSL_111 SSL_110 SSL_102 SSL_100 SSL_098 LIB_USB LIB_PCSC LIB_ZLIB );
lib_keys=( SAMPLE_LIB SSL_111 SSL_110 SSL_102 SSL_100 SSL_098 LIB_USB LIB_PCSC LIB_ZLIB );
@ -582,7 +599,7 @@ _create_config(){
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "(\"export RANLIB=@RANLIB@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./Configure --prefix=@PREFIX@/ linux-generic32 shared;\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "(\"export RANLIB=@RANLIB@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./Configure --prefix=@PREFIX@/ linux-generic32 shared;\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "(\"export RANLIB=@RANLIB@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./Configure --prefix=@PREFIX@/ linux-generic32 shared;\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "(\"export RANLIB=@RANLIB@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./Configure --prefix=@PREFIX@/ linux-generic32 shared;\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./configure --prefix=@PREFIX@/ --host=@HOST@ --disable-udev;\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./configure --prefix=@PREFIX@/ --host=@HOST@ --disable-udev;\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./configure --prefix=@PREFIX@/ --host=@HOST@ --disable-libudev --disable-libsystemd LIBUSB_LIBS=\\\"-L@PREFIX@/lib -lusb-1.0 -lrt\\\" LIBUSB_CFLAGS=\\\"-I@PREFIX@/include/libusb-1.0\\\";\")" "(\"make;\")" "(\"make install;\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./configure --prefix=@PREFIX@/ --host=@HOST@ --disable-libudev --disable-libsystemd LIBUSB_LIBS=\\\"-L@PREFIX@/lib -lusb-1.0 -lrt\\\" LIBUSB_CFLAGS=\\\"-I@PREFIX@/include/libusb-1.0\\\";\")" "(\"make;\")" "(\"make install;\")" "(\"@VALIDATE@ \"PCSC\";\")" )'
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./configure --prefix=@PREFIX@/;\")" "(\"make;\")" "(\"make install;\")" )' );
'( "(\"export TOOLCHAIN=@TOOLCHAIN@;\")" "(\"export CC=@CC@;\")" "('"'"'export PATH=\"\$TOOLCHAIN/bin:\$PATH\";'"'"')" "(\"./configure --prefix=@PREFIX@/;\")" "(\"make;\")" "(\"make install;\")" )' );
ctng_build_tasks=( "(\"./ct-ng build;\")" );
ctng_build_tasks=( "(\"./ct-ng build;\")" );