@@ -28,104 +28,107 @@ if [ "${DISTCLEAN}" = "1" ]; then rm -rf tcl fi if [ "${CLEANONLY}" = "0" ]; then - TCLVERS="8.5.9" - TCLPRIVATE="$(pwd)/tcl/build/tcl${TCLVERS}" - PROJROOTDIR="$(pwd)" - TCLINSTDIR="$(pwd)/tcl/inst" - export TCLVERS TCLPRIVATE PROJROOTDIR TCLINSTDIR - - 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 - wget -o /dev/null -O "tcl/src/tcl${TCLVERS}.tar.gz" "http://prdownloads.sourceforge.net/tcl/tcl${TCLVERS}-src.tar.gz" - fi - - echo "Building Tcl ${TCLVERS}" - ( - mkdir tcl/build >/dev/null 2>/dev/null - cd tcl/build || exit 1 - gzip -dc "../src/tcl${TCLVERS}.tar.gz" | tar -xf - - - # DDE and Reg can fail to compile, but we don't care - echo '' > "${TCLPRIVATE}/win/tclWinDde.c" - echo '' > "${TCLPRIVATE}/win/tclWinReg.c" - - for dir in unix win macosx; do - cd "${TCLPRIVATE}/${dir}" || exit 1 - - echo " Executing: ./configure ${CONFIGUREEXTRA}" - ./configure --disable-threads ${CONFIGUREEXTRA} --prefix="${TCLINSTDIR}" - - ${MAKE:-make} || continue - ${MAKE:-make} install || break - - 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 "${TCLINSTDIR}" -a -f "${TCLINSTDIR}/lib/tclConfig.sh" ]; then - TCLCONFIGDIR="${TCLINSTDIR}/lib" - elif [ -d "${TCLBUILDDIR}" -a -f "${TCLBUILDDIR}/tclConfig.sh" ]; then - TCLCONFIGDIR="${TCLBUILDDIR}" - else - unset TCLPRIVATE - - TCLCONFIGDIR=$( - ( - echo "${LD_LIBRARY_PATH}" | tr ':' "\n" - cat /etc/ld.so.conf 2>/dev/null - crle 2>/dev/null | grep '^ *Default Library Path' | sed 's@^ *Default Library Path[^:]*:[^:]*/@/@' | tr ':' "\n" - ) | grep '^/' | while read chklibdir; do - if [ -f "${chklibdir}/tclConfig.sh" ]; then - echo "${chklibdir}" - break - fi - done - ) - if [ -z "${TCLCONFIGDIR}" ]; then - TCLCONFIGDIR="/usr/lib" - fi - - TCLPRIVATE="$(dirname "${TCLCONFIGDIR}")/include/tcl-private" - fi - - ADDFLAGS="" - if [ -n "${TCLPRIVATE}" ]; then - ADDFLAGS="${ADDFLAGS} -I${TCLPRIVATE} -I${TCLPRIVATE}/generic" - fi - if [ -n "${TCLBUILDDIR}" ]; then - ADDFLAGS="${ADDFLAGS} -I${TCLBUILDDIR}" - fi - CFLAGS="${ADDFLAGS} ${CFLAGS}" - CPPFLAGS="${ADDFLAGS} ${CPPFLAGS}" - - unset TCLVERS - unset ADDFLAGS - export TCLBUILDDIR TCLCONFIGDIR TCLPRIVATE CFLAGS CPPFLAGS + PROJROOTDIR="$(pwd)" + export PROJROOTDIR + + for TCLVERS in 8.5.9 8.4.19; do + TCLSHORTVERS="$(echo "${TCLVERS}" | cut -f 1-2 -d '.')" + TCLPRIVATE="$(pwd)/tcl/build/tcl${TCLVERS}" + TCLINSTDIR="$(pwd)/tcl/inst-${TCLSHORTVERS}" + export TCLVERS TCLPRIVATE TCLINSTDIR + + 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 + wget -o /dev/null -O "tcl/src/tcl${TCLVERS}.tar.gz" "http://prdownloads.sourceforge.net/tcl/tcl${TCLVERS}-src.tar.gz" + fi + + echo "Building Tcl ${TCLVERS}" + ( + mkdir tcl/build >/dev/null 2>/dev/null + cd tcl/build || exit 1 + gzip -dc "../src/tcl${TCLVERS}.tar.gz" | tar -xf - + + # DDE and Reg can fail to compile, but we don't care + echo '' > "${TCLPRIVATE}/win/tclWinDde.c" + echo '' > "${TCLPRIVATE}/win/tclWinReg.c" + + for dir in unix win macosx; do + cd "${TCLPRIVATE}/${dir}" || exit 1 + + echo " Executing: ./configure --enable-threads ${CONFIGUREEXTRA} --prefix=\"${TCLINSTDIR}\"" + ./configure --enable-threads ${CONFIGUREEXTRA} --prefix="${TCLINSTDIR}" + + echo " Executing: ${MAKE:-make}" + ${MAKE:-make} || continue + + echo " Executing: ${MAKE:-make} install" + ${MAKE:-make} install || break + + 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 + + exit 0 + ) > "tcl/build/build-${TCLVERS}.log" 2>&1 || ( + echo "Failed to build Tcl. See \"./tcl/build/build-${TCLVERS}.log\"" >&2 + echo 'Aborting.' >&2 + + exit 1 + ) || exit 1 + + ( + TCLBUILDDIR="$(cat "${PROJROOTDIR}/platform.magic.dir")" + export TCLBUILDDIR + + if [ -d "${TCLINSTDIR}" -a -f "${TCLINSTDIR}/lib/tclConfig.sh" ]; then + TCLCONFIGDIR="${TCLINSTDIR}/lib" + elif [ -d "${TCLBUILDDIR}" -a -f "${TCLBUILDDIR}/tclConfig.sh" ]; then + TCLCONFIGDIR="${TCLBUILDDIR}" + else + echo 'Unable to find appropriate tclConfig.sh, aborting' >&2 + + exit 1 + fi + + ADDFLAGS="" + if [ -n "${TCLPRIVATE}" ]; then + ADDFLAGS="${ADDFLAGS} -I${TCLPRIVATE} -I${TCLPRIVATE}/generic" + fi + if [ -n "${TCLBUILDDIR}" ]; then + ADDFLAGS="${ADDFLAGS} -I${TCLBUILDDIR}" + fi + CFLAGS="${ADDFLAGS} ${CFLAGS}" + CPPFLAGS="${ADDFLAGS} ${CPPFLAGS}" + + unset TCLVERS + unset ADDFLAGS + export TCLBUILDDIR TCLCONFIGDIR TCLPRIVATE CFLAGS CPPFLAGS + + rm -f "${PROJROOTDIR}/platform.magic.env-${TCLSHORTVERS}" + set > "${PROJROOTDIR}/platform.magic.env-${TCLSHORTVERS}" + export >> "${PROJROOTDIR}/platform.magic.env-${TCLSHORTVERS}" + ) + done + + rm -f "${PROJROOTDIR}/platform.magic.dir" fi # Determine platform if [ -z "${FORCE_PLATFORM}" ]; then PLATFORM="$(./platform)" @@ -138,11 +141,11 @@ faileddirs="" if [ -z "${DIRS}" ]; then DIRS="`echo */`" PKGHASHCODE='' else - PKGHASHCODE="$(echo "${DIRS}" | sed 's@[/ ]@@g' | openssl sha1 | awk '{ print $1 }')" + PKGHASHCODE="$((echo "${DIRS}" | tr ' ' "\n" | sort | tr "\n" ' '; echo ) | sed 's@[/ ]@@g' | openssl sha1 | awk '{ print $1 }')" fi for dir in ${DIRS}; do export dir if [ ! -f "${dir}/build.sh" ]; then @@ -177,10 +180,13 @@ rm -rf "${dir}/out" faileddirs="${faileddirs} ${dir}" echo "Failed to build ${dir}" fi done + +# Clean magic-related files +rm -f platform.magic.* # Cleanup is done at this point if [ "${CLEANONLY}" = "1" ]; then exit 0 fi