Index: kitcreator ================================================================== --- kitcreator +++ kitcreator @@ -1,9 +1,9 @@ #! /bin/bash TCLVERS="8.4.19" -if echo "$1" | grep '^[0-9][0-9]*\.' >/dev/null || echo "$1" | grep '^cvs_' >/dev/null; then +if echo "$1" | grep '^[0-9][0-9]*\.' >/dev/null || echo "$1" | egrep '^(cvs|fossil)_' >/dev/null; then TCLVERS="$1" shift fi export TCLVERS @@ -103,10 +103,24 @@ else KITCREATOR_RC="$(echo "$(pwd)/kitsh/buildsrc"/kitsh-*/kit.rc)" fi export KITCREATOR_ICON KITCREATOR_RC +# Determine how we invoke a Tcl interpreter +if [ -z "${TCLSH_NATIVE}" ]; then + TCLSH_NATIVE="false" +fi +for testsh in "${TCLSH_NATIVE}" tclsh tclsh8.4 tclsh8.5 tclsh8.6 "${TCLKIT:-tclkit}"; do + if echo 'exit 0' | "${testsh}" >/dev/null 2>/dev/null; then + TCLSH_NATIVE="${testsh}" + + break + fi +done +export TCLSH_NATIVE + +# Do build failedpkgs="" buildfailed="0" for pkg in tcl tclvfs zlib ${KITCREATOR_PKGS} kitsh; do echo -n "Building ${pkg} ..." Index: kitsh/build.sh ================================================================== --- kitsh/build.sh +++ kitsh/build.sh @@ -50,19 +50,10 @@ rm -f "${archive}" "${AR:-ar}" cr "${archive}" *.o || exit 1 "${RANLIB:-ranlib}" "${archive}" || true ) - done - - # Determine how we invoke a Tcl interpreter - for testsh in "${TCLSH_NATIVE:-false}" tclsh tclsh8.4 tclsh8.5 tclsh8.6 "${TCLKIT:-tclkit}"; do - if echo 'exit 0' | "${testsh}" >/dev/null 2>/dev/null; then - TCLSH_NATIVE="${testsh}" - - break - fi done # Cleanup, just incase the incoming directory was not pre-cleaned ${MAKE:-make} distclean >/dev/null 2>/dev/null rm -rf 'starpack.vfs' Index: tcl/build.sh ================================================================== --- tcl/build.sh +++ tcl/build.sh @@ -49,28 +49,46 @@ rm -rf "${workdir}" mkdir "${workdir}" || exit 1 cd "${workdir}" || exit 1 + # Handle Tcl first, since it will be used to base other packages on wget -O "tmp-tcl.tar.gz" "http://core.tcl.tk/tcl/tarball/tcl-fossil.tar.gz?uuid=${FOSSILTAG}" || rm -f 'tmp-tcl.tar.gz' - wget -O "tmp-itcl.tar.gz" "http://core.tcl.tk/itcl/tarball/itcl-fossil.tar.gz?uuid=${FOSSILTAG}" || rm -f 'tmp-itcl.tar.gz' - wget -O "tmp-thread.tar.gz" "http://core.tcl.tk/thread/tarball/thread-fossil.tar.gz?uuid=${FOSSILTAG}" || rm -f "tmp-thread.tar.gz" - wget -O "tmp-tclconfig.tar.gz" "http://core.tcl.tk/tclconfig/tarball/tclconfig-fossil.tar.gz?uuid=${FOSSILTAG}" || rm -f "tmp-tclconfig.tar.gz" - gzip -dc 'tmp-tcl.tar.gz' | tar -xf - + mv "tcl-fossil" "tcl${TCLVERS}" + + # Determine date of this Tcl release and use that date for all other dependent packages + ## Unless the release we are talking about is "trunk", in which case we use that everywhere + if [ "${FOSSILTAG}" = "trunk" ]; then + FOSSILDATE="${FOSSILTAG}" + else + FOSSILDATE="$(echo 'cd "tcl'"${TCLVERS}"'"; set file [lindex [glob *] 0]; file stat $file finfo; set date $finfo(mtime); set date [expr {$date + 1}]; puts [clock format $date -format {%Y-%m-%dT%H:%M:%S}]' | TZ='UTC' "${TCLSH_NATIVE}")" + fi + + ## If we are unable to determine the modification date, fall-back to the tag and hope for the best + if [ -z "${FOSSILDATE}" ]; then + FOSSILDATE="${FOSSILTAG}" + fi + + # Handle other packages + wget -O "tmp-itcl.tar.gz" "http://core.tcl.tk/itcl/tarball/itcl-fossil.tar.gz?uuid=${FOSSILDATE}" || rm -f 'tmp-itcl.tar.gz' + wget -O "tmp-thread.tar.gz" "http://core.tcl.tk/thread/tarball/thread-fossil.tar.gz?uuid=${FOSSILDATE}" || rm -f "tmp-thread.tar.gz" + wget -O "tmp-tclconfig.tar.gz" "http://core.tcl.tk/tclconfig/tarball/tclconfig-fossil.tar.gz?uuid=${FOSSILDATE}" || rm -f "tmp-tclconfig.tar.gz" + gzip -dc "tmp-itcl.tar.gz" | tar -xf - gzip -dc "tmp-thread.tar.gz" | tar -xf - gzip -dc "tmp-tclconfig.tar.gz" | tar -xf - - mv "tcl-fossil" "tcl${TCLVERS}" + mkdir -p "tcl${TCLVERS}/pkgs/" >/dev/null 2>/dev/null mv "itcl-fossil" "tcl${TCLVERS}/pkgs/itcl" mv "thread-fossil" "tcl${TCLVERS}/pkgs/thread" cp -r "tclconfig-fossil" "tcl${TCLVERS}/pkgs/itcl/tclconfig" cp -r "tclconfig-fossil" "tcl${TCLVERS}/pkgs/thread/tclconfig" mv "tclconfig-fossil" "tcl${TCLVERS}/tclconfig" tar -cf - "tcl${TCLVERS}" | gzip -c > "../../${SRC}" + echo "${FOSSILDATE}" > "../../${SRC}.date" cd .. rm -rf "${workdir}" ) || exit 1 @@ -135,32 +153,32 @@ echo "Running: ${MAKE:-make} install" ${MAKE:-make} install || ( # Work with Tcl 8.6.x's TCLSH_NATIVE solution for # cross-compile installs - echo "Running: ${MAKE:-make} install TCLSH_NATIVE=\"${TCLKIT:-tclkit}\"" - ${MAKE:-make} install TCLSH_NATIVE="${TCLKIT:-tclkit}" + echo "Running: ${MAKE:-make} install TCLSH_NATIVE=\"${TCLSH_NATIVE}\"" + ${MAKE:-make} install TCLSH_NATIVE="${TCLSH_NATIVE}" ) || ( # Make install can fail if cross-compiling using Tcl 8.5.x # because the Makefile calls "$(TCLSH)". We can't simply # redefine TCLSH because it also uses TCLSH as a build target sed 's@^$(TCLSH)@blah@' Makefile > Makefile.new cat Makefile.new > Makefile rm -f Makefile.new - echo "Running: ${MAKE:-make} install TCLSH=\"../../../../../../../../../../../../../../../../../$(which "${TCLKIT:-tclkit}")\"" - ${MAKE:-make} install TCLSH="../../../../../../../../../../../../../../../../../$(which "${TCLKIT:-tclkit}")" + echo "Running: ${MAKE:-make} install TCLSH=\"../../../../../../../../../../../../../../../../../$(which "${TCLSH_NATIVE}")\"" + ${MAKE:-make} install TCLSH="../../../../../../../../../../../../../../../../../$(which "${TCLSH_NATIVE}")" ) || ( # Make install can fail if cross-compiling using Tcl 8.5.9 # because the Makefile calls "${TCL_EXE}". We can't simply # redefine TCL_EXE because it also uses TCL_EXE as a build target sed 's@^${TCL_EXE}@blah@' Makefile > Makefile.new cat Makefile.new > Makefile rm -f Makefile.new - echo "Running: ${MAKE:-make} install TCL_EXE=\"../../../../../../../../../../../../../../../../../$(which "${TCLKIT:-tclkit}")\"" - ${MAKE:-make} install TCL_EXE="../../../../../../../../../../../../../../../../../$(which "${TCLKIT:-tclkit}")" + echo "Running: ${MAKE:-make} install TCL_EXE=\"../../../../../../../../../../../../../../../../../$(which "${TCLSH_NATIVE}")\"" + ${MAKE:-make} install TCL_EXE="../../../../../../../../../../../../../../../../../$(which "${TCLSH_NATIVE}")" ) || exit 1 mkdir "${OUTDIR}/lib" || exit 1 cp -r "${INSTDIR}/lib"/* "${OUTDIR}/lib/" rm -rf "${OUTDIR}/lib/pkgconfig" Index: tk/build.sh ================================================================== --- tk/build.sh +++ tk/build.sh @@ -17,10 +17,14 @@ PATCHDIR="$(pwd)/patches" OUTDIR="$(pwd)/out" INSTDIR="$(pwd)/inst" PATCHSCRIPTDIR="$(pwd)/patchscripts" export SRC SRCURL BUILDDIR PATCHDIR OUTDIR INSTDIR PATCHSCRIPTDIR + +# Must be kept in-sync with "../tcl/build.sh" +TCLFOSSILDATE="../tcl/src/tcl${TCLVERS}.tar.gz.date" +export TCLFOSSILDATE rm -rf 'build' 'out' 'inst' mkdir 'build' 'out' 'inst' || exit 1 # Determine Tcl version @@ -35,33 +39,27 @@ mkdir 'src' >/dev/null 2>/dev/null use_fossil='0' if echo "${TCLVERS}" | grep '^cvs_' >/dev/null; then use_fossil='1' - - FOSSILTAG=$(echo "${TCLVERS}" | sed 's/^cvs_//g') - if [ "${FOSSILTAG}" = "HEAD" ]; then - FOSSILTAG="trunk" - fi elif echo "${TCLVERS}" | grep '^fossil_' >/dev/null; then use_fossil='1' - - FOSSILTAG=$(echo "${TCLVERS}" | sed 's/^fossil_//g') fi - export FOSSILTAG if [ "${use_fossil}" = "1" ]; then ( + FOSSILDATE="$(cat "${TCLFOSSILDATE}" 2>/dev/null)" + cd src || exit 1 workdir="tmp-$$${RANDOM}${RANDOM}${RANDOM}" rm -rf "${workdir}" mkdir "${workdir}" || exit 1 cd "${workdir}" || exit 1 - wget -O "tmp-tk.tar.gz" "http://core.tcl.tk/tk/tarball/tk-fossil.tar.gz?uuid=${FOSSILTAG}" || rm -f 'tmp-tk.tar.gz' + wget -O "tmp-tk.tar.gz" "http://core.tcl.tk/tk/tarball/tk-fossil.tar.gz?uuid=${FOSSILDATE}" || rm -f 'tmp-tk.tar.gz' gzip -dc "tmp-tk.tar.gz" | tar -xf - mv "tk-fossil" "tk${TCLVERS}" tar -cf - "tk${TCLVERS}" | gzip -c > "../../${SRC}"