@@ -7,27 +7,35 @@ fi CLEANONLY=0 DISTCLEAN=0 if [ "$1" = "clean" ]; then + shift CLEANONLY=1 fi if [ "$1" = "distclean" ]; then + shift CLEANONLY=1 DISTCLEAN=1 fi export CLEANONLY DISTCLEAN +CONFIGUREEXTRA="$@" +export CONFIGUREEXTRA + # Determine path to "tclConfig.sh" rm -rf tcl/build +rm -f platform.magic.* if [ "${DISTCLEAN}" = "1" ]; then rm -rf tcl fi if [ "${CLEANONLY}" = "0" ]; then TCLVERS="8.4.19" TCLPRIVATE="$(pwd)/tcl/build/tcl${TCLVERS}" + PROJROOTDIR="$(pwd)" + export TCLVERS TCLPRIVATE PROJROOTDIR mkdir tcl tcl/build >/dev/null 2>/dev/null if [ ! -f "tcl/src/tcl${TCLVERS}.tar.gz" ]; then mkdir tcl/src >/dev/null 2>/dev/null @@ -38,19 +46,43 @@ ( mkdir tcl/build >/dev/null 2>/dev/null cd tcl/build || exit 1 gzip -dc "../src/tcl${TCLVERS}.tar.gz" | tar -xf - - cd "${TCLPRIVATE}/unix" || exit 1 - - ./configure --enable-shared - - ${MAKE:-make} - ) > "tcl/build/build.log" 2>&1 - - if [ -d "${TCLPRIVATE}" -a -f "${TCLPRIVATE}/unix/tclConfig.sh" ]; then - TCLCONFIGDIR="${TCLPRIVATE}/unix" + for dir in unix win macosx; do + cd "${TCLPRIVATE}/${dir}" || exit 1 + + echo " Executing: ./configure ${CONFIGUREEXTRA}" + ./configure --disable-threads ${CONFIGUREEXTRA} + + ${MAKE:-make} || continue + + LD_LIBRARY_PATH=".:${LD_LIBRARY_PATH}" + LD_RUN_PATH=".:${LD_RUN_PATH}" + export LD_LIBRARY_PATH LD_RUN_PATH + + file tclsh tclsh*.exe 2>/dev/null | grep -iv 'No such file' > "${PROJROOTDIR}/platform.magic.file" + if [ -f tclsh*.exe ]; then + echo 'puts "$::tcl_platform(os)"' | ./tclsh*.exe > "${PROJROOTDIR}/platform.magic.os" 2>/dev/null + else + echo 'puts "$::tcl_platform(os)"' | ./tclsh > "${PROJROOTDIR}/platform.magic.os" 2>/dev/null + fi + echo "${dir}" > "${PROJROOTDIR}/platform.magic.platform" + pwd > "${PROJROOTDIR}/platform.magic.dir" + + break + done + ) > "tcl/build/build.log" 2>&1 || ( + echo 'Failed to build Tcl. See "./tcl/build/build.log"' + echo 'Proceeding with system Tcl. Building might fail.' + ) + + TCLBUILDDIR="$(cat "${PROJROOTDIR}/platform.magic.dir")" + export TCLBUILDDIR + + if [ -d "${TCLBUILDDIR}" -a -f "${TCLBUILDDIR}/tclConfig.sh" ]; then + TCLCONFIGDIR="${TCLBUILDDIR}" else unset TCLPRIVATE TCLCONFIGDIR=$( ( @@ -66,19 +98,20 @@ ) if [ -z "${TCLCONFIGDIR}" ]; then TCLCONFIGDIR="/usr/lib" fi - TCLPRIVATE="${TCLCONFIGDIR}/../include/tcl-private" + TCLPRIVATE="$(dirname "${TCLCONFIGDIR}")/include/tcl-private" fi - ADDFLAGS="-I${TCLPRIVATE} -I${TCLPRIVATE}/generic -I${TCLPRIVATE}/unix" + ADDFLAGS="-I${TCLPRIVATE} -I${TCLPRIVATE}/generic -I${TCLBUILDDIR}" CFLAGS="${ADDFLAGS} ${CFLAGS}" CPPFLAGS="${ADDFLAGS} ${CPPFLAGS}" unset TCLVERS unset ADDFLAGS + unset TCLBUILDDIR export TCLCONFIGDIR TCLPRIVATE CFLAGS CPPFLAGS fi # Determine platform PLATFORM="$(./platform)"