@@ -3,10 +3,11 @@ # BuildCompatible: KitCreator version='3.1.18.1' url="http://github.com/andreas-kupries/critcl/tarball/${version}/critcl-${version}.tar.gz" sha256='c26893bda46dfda332d2e7d7410ae998eafda697169ea25b4256295d293089de' +deps_dir="$(pwd)/deps" function configure() { : } @@ -15,20 +16,80 @@ } function install() { local tclmajminvers local critcl_cdir + local critcl_target_info + + # Setup cross-compilation in the way Critcl expects, as best as possible + if [ "${KC_CROSSCOMPILE}" = '0' ]; then + critcl_target_info=() + else + critcl_target_info=(-target) + case "${KC_CROSSCOMPILE_HOST_OS}" in + aarch64-*-linux|aarch64-*-linux-*) + critcl_target_info+=('linux-64-aarch64') + ;; + arm-*-linux-*|arm-*-linux) + critcl_target_info+=('linux-arm') + ;; + i?86-*-linux-*|i?86-*-linux) + critcl_target_info+=('linux-32-x86') + ;; + hppa64-*-hpux*) + critcl_target_info+=('hpux-parisc64-cc') + ;; + i?86-*-solaris2.*) + critcl_target_info+=('solaris-ix86-cc') + #critcl_target_info+=('solaris-x86_64-cc') + ;; + i?86-*-mingw32*) + critcl_target_info+=('mingw32') + ;; + x86_64-*-mingw32*) + critcl_target_info+=('mingw32') + ;; + mips-*-linux-*|mips-*-linux|mipsel-*-linux-*|mipsel-*-linux|mipseb-*-linux-*|mipseb-*-linux) + critcl_target_info+=('linux-32-mips') + ;; + powerpc-*-aix*) + critcl_target_info+=('aix-powerpc-cc') + ;; + sparc-*-solaris2.*) + critcl_target_info+=('solaris-sparc-cc') + #critcl_target_info+=('solaris-sparc64-cc') + ;; + x86_64-*-linux-*|x86_64-*-linux) + critcl_target_info+=('linux-64-x86_64') + ;; + *) + echo "error: Critcl does not support cross-compiling to ${KC_CROSSCOMPILE_HOST_OS}" >&2 + return 1 + ;; + esac + fi + + # Include our Tcl packages directory, to ensure Critcl can be run + export TCLLIBPATH="${deps_dir}" + # Call the Critcl installer mkdir -p "${installdir}/lib" || return 1 + "${TCLSH_NATIVE}" ./build.tcl install "${critcl_target_info[@]}" "${installdir}/lib" || return 1 - tclmajminvers="$(echo "${TCLVERS}" | cut -f 1-2 -d .)" + # Critcl returns success even if it fails, so we need to double-check its work + if [ "${KC_CROSSCOMPILE}" = '0' ]; then + if [ ! -d "$(echo "${installdir}"/lib/*md5c*/)" ]; then + return 1 + fi + fi - "${TCLSH_NATIVE}" ./build.tcl install "${installdir}/lib" || return 1 - + # We only need to keep headers for a single version of Tcl, the one the kit was compiled + # for + tclmajminvers="$(echo "${TCLVERS}" | cut -f 1-2 -d .)" critcl_cdir="$(echo "${installdir}/lib"/critcl*/critcl_c)" mv "${critcl_cdir}/tcl${tclmajminvers}" "${critcl_cdir}/.keep-tcl" || return 1 rm -rf "${critcl_cdir}"/tcl*/ mv "${critcl_cdir}/.keep-tcl" "${critcl_cdir}/tcl${tclmajminvers}" || return 1 return 0 }