Rewrite dist scripts for so many reasons.
authorChris Hanson <org/chris-hanson/cph>
Sun, 21 Feb 2010 11:30:53 +0000 (03:30 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sun, 21 Feb 2010 11:30:53 +0000 (03:30 -0800)
dist/make-c-files [deleted file]
dist/make-dist-files
dist/make-doc-files [new file with mode: 0755]
dist/make-liarc-files [moved from dist/release-prefix with 58% similarity]
dist/make-src-files
dist/shared.sh [new file with mode: 0644]

diff --git a/dist/make-c-files b/dist/make-c-files
deleted file mode 100644 (file)
index c4a6846..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2007 Massachusetts Institute of Technology
-#
-# This file is part of MIT/GNU Scheme.
-#
-# MIT/GNU Scheme is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# MIT/GNU Scheme is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with MIT/GNU Scheme; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-set -e
-
-if [ $# -gt 3 ]; then
-    echo "usage: ${0} [TYPE [VERSION [DESTINATION]]]"
-    exit 1
-fi
-
-TYPE="${1:-std}"
-VERSION="${2}"
-DESTINATION="${3}"
-
-case "${TYPE}" in
-(6001 | all | std)
-    ;;
-(snapshot)
-    [ "${VERSION}" ] || VERSION="snapshot"
-    ;;
-(*)
-    echo "Unknown distribution type: ${TYPE}"
-    echo "Valid types: std all 6001 snapshot"
-    exit 1
-    ;;
-esac
-
-if [ "${VERSION}" = "snapshot" ]; then
-    VERSION=$(date +%Y%m%d)
-fi
-
-DIST_DIR="/scheme/v7/dist"
-
-. "${DIST_DIR}/release-prefix"
-
-TL_DIR="$(pwd)"
-
-C_DIR_REL="$(get_release_prefix "${VERSION}")"
-C_DIR="${TL_DIR}/${C_DIR_REL}"
-SRC_FILE="${C_DIR}.tar.gz"
-STAMP_C="${TL_DIR}/stamp-c"
-
-if [ ! -f "${SRC_FILE}" ]; then
-    echo "No source file: ${SRC_FILE}"
-    exit 1
-fi
-
-if [ ! -f "${STAMP_C}" ]; then
-    rm -rf "${C_DIR}"
-
-    tar xzf "${SRC_FILE}"
-
-    cd "${C_DIR}/src"
-    ./configure --enable-native-code=c
-    make c
-    make c-clean
-
-    touch "${STAMP_C}"
-fi
-
-cd "${TL_DIR}"
-
-tarfile="${C_DIR}-c.tar.gz"
-zipfile="${C_DIR}-c.zip"
-
-rm -f "${tarfile}"
-rm -f "${zipfile}"
-
-tar cvzf "${tarfile}" "${C_DIR_REL}"
-
-rm -rf "${C_DIR}/src/lib"
-for S in $(find ${C_DIR} -type l); do
-    [ ! -r "${S}" ] && rm -f "${S}"
-done
-
-zip -rl "${zipfile}" "${C_DIR_REL}"
-chmod -w "${zipfile}"
-
-rm -rf "${STAMP_C}" "${C_DIR}"
index afb43bf8bef95b619eb4c02bf18207dd70994462..f01912ce515c7714c0b52eba6acd2b4a8b1cfa5d 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA.
 
-set -e
+# inputs: source tar, doc image tar
+# outputs: scheme binary tars
 
-if [[ ${#} -gt 1 ]]; then
-    echo "usage: ${0} [TYPE]" >&2
-    exit 1
-fi
+. "$(dirname "${0}")"/shared.sh
+make_output_dir
 
-TYPE=${1:-standard}
-
-case ${TYPE} in
-(standard)
-    FOO=$(ls mit-scheme-*.zip)
-    if [[ ${FOO} =~ mit-scheme-([0-9.]+)\.zip ]]; then
-       VERSION=${BASH_REMATCH[1]}
-    else
-       echo "Unable to determine version number; maybe in wrong directory?" >&2
-       exit 1
-    fi
-    ;;
-(snapshot)
-    VERSION=$(date +%Y%m%d)
-    ;;
-(*)
-    echo "Unknown distribution type: ${TYPE}" >&2
-    echo "Valid types: standard snapshot" >&2
-    exit 1
-    ;;
-esac
-
-TL_DIR=$(pwd)
-BUILD_ROOT=mit-scheme-${VERSION}
-SRC_FILE=${BUILD_ROOT}.tar.gz
-LOCAL_DIR=/usr/local
-OUTPUT_DIR=.out
-
-if [[ ! -f ${SRC_FILE} ]]; then
-    echo "No source file: ${SRC_FILE}." >&2
-    exit 1
-fi
-
-MKDIR=(install -d -m 755)
-INSTALL=(install -p)
-INSTALL_DATA=("${INSTALL[@]}" -m 644)
-
-"${MKDIR[@]}" "${OUTPUT_DIR}"
-
-fixup_perms ()
+build ()
 {
-    chmod -R og-w "${1}"
+    local ARCH=${1}
+    my_configure --enable-native-code="${ARCH}" \
+       --with-mcrypt=no --with-libpq=no --with-db-4=no
+    my_make
 }
 
-DOC_BUILD_DIR=${BUILD_ROOT}-doc
-DOC_IMAGE_DIR=${DOC_BUILD_DIR}-image
-DOC_BUILD_OUT=${OUTPUT_DIR}/doc-build
-DOC_IMAGE_OUT=${OUTPUT_DIR}/doc-image
-STAMP_DOC_BUILD=${DOC_BUILD_DIR}.stamp
-STAMP_DOC_IMAGE=${DOC_IMAGE_DIR}.stamp
-if [[ ! -f ${STAMP_DOC_BUILD} ]]; then
-    echo "Building documentation" >&2
-
-    rm -rf "${BUILD_ROOT}" "${DOC_BUILD_DIR}"
-    tar xzf "${SRC_FILE}"
-    mv "${BUILD_ROOT}" "${DOC_BUILD_DIR}"
-    (
-       set -e
-       cd "${DOC_BUILD_DIR}"/doc
-       ./configure
-       make
-    ) &> "${DOC_BUILD_OUT}"
-    touch "${STAMP_DOC_BUILD}"
-fi
-
-if [[ ! -f ${STAMP_DOC_IMAGE} ]]; then
-    echo "Make images for documentation" >&2
-(
-    set -e
-
-    # First build the image for binary distributions.
-    rm -rf "${DOC_IMAGE_DIR}"
-    (
-       set -e
-       cd "${DOC_BUILD_DIR}"/doc
-       make install-info-gz \
-           infodir="${TL_DIR}"/"${DOC_IMAGE_DIR}"/edwin/info
-       make install-html htmldir="${TL_DIR}"/"${DOC_IMAGE_DIR}"/doc
-    )
-    "${INSTALL_DATA[@]}" "${DOC_BUILD_DIR}"/src/COPYING \
-       "${DOC_IMAGE_DIR}"/doc/.
-    fixup_perms "${DOC_IMAGE_DIR}"
-
-    # Then build the images for documentation tarballs.
-    DOC_FORMATS=(html info pdf ps)
-    IMAGE_DIR=${BUILD_ROOT}/doc
-    for FORMAT in "${DOC_FORMATS[@]}"; do
-       DOCFILE_BASE=${BUILD_ROOT}-doc-${FORMAT}
-       rm -rf "${BUILD_ROOT}"
-       "${MKDIR[@]}" "${IMAGE_DIR}"
-       (
-           set -e
-           cd "${DOC_BUILD_DIR}"/doc
-           make install-"${FORMAT}" \
-               "${FORMAT}"dir="${TL_DIR}"/"${IMAGE_DIR}"
-       )
-       rm -f "${DOCFILE_BASE}".tar.gz
-       tar cvzf "${DOCFILE_BASE}".tar.gz "${IMAGE_DIR}"
-       rm -f "${DOCFILE_BASE}".zip
-       zip -r "${DOCFILE_BASE}".zip "${IMAGE_DIR}"
-       rm -rf "${BUILD_ROOT}"
-       chmod 444 "${DOCFILE_BASE}".*
-    done
+make_image ()
+{
+    local IMAGE_DIR=${TL_DIR}/${1}
+    my_make install DESTDIR="${IMAGE_DIR}"
+    my_mv "${IMAGE_DIR}"/usr/local/* "${IMAGE_DIR}"/.
+    my_rmdir "${IMAGE_DIR}"/usr/local
+    my_rmdir "${IMAGE_DIR}"/usr
+}
 
-    touch "${STAMP_DOC_IMAGE}"
-    rm -rf "${DOC_BUILD_DIR}"
-) &> "${DOC_IMAGE_OUT}"
-fi
+remove_unshipped_files ()
+{
+    local IMAGE_DIR=${1}
+    local LIB_DIR=${IMAGE_DIR}/lib/mit-scheme-${2}
+    my_rm_rf "${IMAGE_DIR}"/bin "${LIB_DIR}"/lib
+    my_rm_f "${LIB_DIR}"/runtime.com "${LIB_DIR}"/macosx-starter
+}
 
 for ARCH in i386 x86-64; do
-    BUILD_DIR=${BUILD_ROOT}-${ARCH}
-    SRC_DIR=${BUILD_DIR}/src
-    IMAGE_DIR=${BUILD_DIR}-image
-    TARFILE=${BUILD_DIR}.tar.gz
-    IMAGE_LOCAL=${IMAGE_DIR}${LOCAL_DIR}
-    IMAGE_BIN=${IMAGE_LOCAL}/bin
-    IMAGE_LIB=${IMAGE_LOCAL}/lib/mit-scheme-${ARCH}
-    STAMP_BUILD=${BUILD_DIR}.stamp
-    STAMP_IMAGE=${IMAGE_DIR}.stamp
-    STAMP_TAR=${BUILD_DIR}-tar.stamp
-
-    if [[ ! -f ${STAMP_BUILD} ]];then
-       echo "Building binaries for arch ${ARCH}" >&2
-       (
-           set -e
-           rm -rf "${BUILD_DIR}"
-           tar xzf "${SRC_FILE}"
-           mv "${BUILD_ROOT}" "${BUILD_DIR}"
-           (
-               set -e
-               cd "${SRC_DIR}"
-               ./configure --enable-native-code="${ARCH}" \
-                   --with-mcrypt=no --with-libpq=no --with-db-4=no
-               make
-           )
-           rm -f "${SRC_DIR}"/lib/runtime.com
-           touch "${STAMP_BUILD}"
-       ) &> "${OUTPUT_DIR}"/"${ARCH}"-compile
-    fi
-    if [[ ! -f ${STAMP_IMAGE} ]]; then
-       echo "Making image for arch ${ARCH}" >&2
-       (
-           set -e
-           rm -rf "${IMAGE_DIR}"
-           (
-               set -e
-               cd "${SRC_DIR}"
-               make install DESTDIR="${TL_DIR}"/"${IMAGE_DIR}"
-           )
-           # Don't save system-specific files.
-           rm -rf "${IMAGE_BIN}"
-           rm -rf "${IMAGE_LIB}"/lib
-           rm -f "${IMAGE_LIB}"/macosx-starter
-           # Merge in doc files.
-           cp -pR "${DOC_IMAGE_DIR}"/* "${IMAGE_LIB}"/.
-
-           fixup_perms "${IMAGE_DIR}"
-           touch "${STAMP_IMAGE}"
-           rm -rf "${BUILD_DIR}"
-       ) &> "${OUTPUT_DIR}"/"${ARCH}"-image
-    fi
-    if [[ ! -f ${STAMP_TAR} ]]; then
-       (
-           set -e
-           rm -f "${TARFILE}"
-           cd "${IMAGE_LOCAL}"
-           tar cvzf "${TL_DIR}"/"${TARFILE}" *
-           chmod 444 "${TL_DIR}"/"${TARFILE}"
-       ) &> "${OUTPUT_DIR}"/"${ARCH}"-tar
-       touch "${STAMP_TAR}"
-       rm -rf "${IMAGE_DIR}"
-    fi
+    IMAGE_DIR=${DIST_DIR}-${ARCH}
+    OUT_ROOT=${BUILD_OUT}-${ARCH}
+
+    notify "Building binaries for arch ${ARCH}"
+    unpack_dist
+    run_command "${OUT_ROOT}"-compile "${DIST_DIR}"/src build "${ARCH}"
+
+    notify "Making image for arch ${ARCH}"
+    new_temp_dir "${IMAGE_DIR}"
+    run_command "${OUT_ROOT}"-image "${DIST_DIR}"/src make_image "${IMAGE_DIR}"
+    remove_unshipped_files "${IMAGE_DIR}" "${ARCH}"
+    unpack_doc_image_into "${IMAGE_DIR}"/lib/mit-scheme-"${ARCH}"
+    fixup_perms "${IMAGE_DIR}"
+    make_tar_file "${OUT_ROOT}" "${IMAGE_DIR}"
+    cleanup_temp_files
 done
-rm -rf "${DOC_IMAGE_DIR}"
-rm -f *.stamp
+
+notify "Success!"
diff --git a/dist/make-doc-files b/dist/make-doc-files
new file mode 100755 (executable)
index 0000000..b12095d
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/bash
+#
+# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+#     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+#     2005, 2006, 2007, 2008, 2009, 2010 Massachusetts Institute of
+#     Technology
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+
+# inputs: source tar
+# outputs: doc image tar, formatted doc tars
+
+. "$(dirname "${0}")"/shared.sh
+make_output_dir
+
+BUILD_DIR=doc-build
+
+build_docs ()
+{
+   my_configure
+   my_make
+}
+
+make_image_dir ()
+{
+    local DEST=${TL_DIR}/${DOC_IMAGE_DIR}
+    my_make install-info-gz infodir="${DEST}"/edwin/info
+    my_make install-html htmldir="${DEST}"/doc
+    my_install_data "${TL_DIR}"/"${BUILD_DIR}"/src/COPYING "${DEST}"/doc/.
+    fixup_perms "${DEST}"
+}
+
+make_archive_dir ()
+{
+    local FORMAT=${1}
+    my_make install-"${FORMAT}" "${FORMAT}"dir="${TL_DIR}"/"${DIST_DIR}"/doc
+}
+
+notify "Building documentation"
+unpack_dist_to "${BUILD_DIR}"
+run_command "${DOC_OUT}"-build "${BUILD_DIR}"/doc build_docs
+
+notify "Making doc image for distributions"
+new_temp_dir "${DOC_IMAGE_DIR}"
+run_command "${DOC_OUT}"-image "${BUILD_DIR}"/doc make_image_dir
+make_tar_file "${DOC_OUT}"-image "${DOC_IMAGE_DIR}"
+
+new_temp_dir "${DIST_DIR}"
+for FORMAT in html info pdf; do
+    OUT=${DOC_OUT}-${FORMAT}
+    notify "Making archive for ${FORMAT}"
+    run_command "${OUT}" "${BUILD_DIR}"/doc make_archive_dir "${FORMAT}"
+    make_tar_file "${OUT}" "${DIST_DIR}"-doc-"${FORMAT}" "${DIST_DIR}"/doc
+    my_rm_rf "${DIST_DIR}"
+done
+
+notify "Success!"
similarity index 58%
rename from dist/release-prefix
rename to dist/make-liarc-files
index d000390266fa0a7ab83f4ff277cb7c47b62c67bc..03f2098d40663cd5c3eec6fecff0978962a4ca30 100755 (executable)
@@ -1,8 +1,8 @@
-# -*- shell-script -*-
+#!/bin/bash
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-#     2005, 2006, 2007, 2008, 2009 Massachusetts Institute of
+#     2005, 2006, 2007, 2008, 2009, 2010 Massachusetts Institute of
 #     Technology
 #
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA.
 
-get_release ()
-{
-    local prefix
-    if [[ -n ${1} ]]; then
-       prefix=${1}/
-    else
-       prefix=
-    fi
-    fgrep Release "${prefix}"src/runtime/version.scm \
-       | awk 'BEGIN { OFS = "." }
-              NF == 4 { print $3, $4 }
-              NF == 5 { print $3, $4, $5 }
-              NF == 6 { print $3, $4, $5, $6 }
-              NF == 7 { print $3, $4, $5, $6, $7 }' \
-       | tr -d \(\)\'\"
-}
+# inputs: source tar
+# outputs: liarc tar
 
-get_release_prefix ()
-{
-    v="${1:-$(get_release)}"
-    echo "mit-scheme-${v}"
-}
+. "$(dirname "${0}")"/shared.sh
+make_output_dir
+
+LIARC_DIR=${PROJECT_NAME}-c-${RELEASE}
 
-get_release_tag ()
+compile_liarc_dist ()
 {
-    v="${1:-$(get_release)}"
-    echo "release-$(echo "${v}" | tr . -)"
+    MIT_SCHEME_EXE=mit-scheme-native cmd etc/make-liarc-dist.sh
 }
+
+notify "Creating the liarc distribution directory"
+unpack_dist_to "${LIARC_DIR}"
+
+notify "Compiling the liarc bootstrap files"
+run_command "${LIARC_OUT}"-compile "${LIARC_DIR}"/src compile_liarc_dist
+
+notify "Creating liarc archive file"
+make_tar_file "${LIARC_OUT}" "${LIARC_DIR}"
+
+notify "Success!"
index 36cb54b596556a5534cfcf50235a904caaf03627..534ff01c5b6201890480881e304ca085ae097fce 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA.
 
-set -e
-umask 022
+# inputs: git source tree
+# outputs: changelog, source tar, ucode tar
 
-PROJECT_NAME=mit-scheme
-PROGRAM=${0}
+. "$(dirname "${0}")"/shared.sh
+reset_output_dir
 
-usage ()
-{
-    echo "usage: ${PROGRAM} TYPE" >&2
-    echo "  TYPE must be 'snapshot' to specify today's date" >&2
-    echo "    or 'standard' to specify standard release" >&2
-    exit 1
-}
-
-(( ${#} <= 1 )) || usage
-TYPE=${1:-standard}
-
-# We assume that there's a git working tree here that's in the right state.
-[[ -d ${PROJECT_NAME} ]] || usage
-
-# Make sure there's a change log for us to publish.
-(cd "${PROJECT_NAME}"; etc/make-git-log)
-
-# Determine the appropriate release and tag info.
-source "$(dirname "${PROGRAM}")"/release-prefix
-case ${TYPE} in
-    snapshot)
-       RELEASE=$(date +%Y%m%d)
-       TAG=snapshot-${RELEASE}
-       ;;
-    standard)
-       RELEASE=$(get_release "${PROJECT_NAME}")
-       TAG=$(get_release_tag "${RELEASE}")
-       ;;
-    *)
-       usage
-       ;;
-esac
-
-DIST_DIR=mit-scheme-${RELEASE}
-LIARC_DIST_DIR=mit-scheme-c-${RELEASE}
-CHANGELOG=changelog.txt
-OUTPUT_DIR=.out
-
-# Set up trap to clean up any temporary files.
-CLEANUP_BASE=$(pwd)
-cleanup ()
-{
-    cd "${CLEANUP_BASE}"
-    rm -rf "${DIST_DIR}" "${LIARC_DIST_DIR}"
-}
-trap cleanup EXIT SIGINT SIGQUIT SIGTERM
-cleanup
-
-rm -rf "${OUTPUT_DIR}"
-mkdir "${OUTPUT_DIR}"
+notify "Creating the changelog"
+my_rm_f "${CHANGELOG}"
+run_command "${CHANGELOG}" "${SOURCE_TREE}" git log --name-status
+make_read_only "${CHANGELOG}"
 
-# Create the dist directory, a subset of the repo.
-echo "Creating the distribution directory"
-mkdir "${DIST_DIR}" "${DIST_DIR}"/etc
+notify "Creating the distribution directory"
+new_temp_dir "${DIST_DIR}"
+my_mkdir "${DIST_DIR}"/etc
 for FILE in src doc "${CHANGELOG}" dist/Makefile; do
-    cp -pR "${PROJECT_NAME}"/"${FILE}" "${DIST_DIR}"/.
+    my_cp "${SOURCE_TREE}"/"${FILE}" "${DIST_DIR}"/.
 done
-cp -pR "${PROJECT_NAME}"/etc/xscheme.el "${DIST_DIR}"/etc/.
-
-# Configure the dist directory.
-echo "Configuring the distribution directory"
-(cd "${DIST_DIR}"/src; ./Setup.sh) > "${OUTPUT_DIR}"/src-config 2>&1
-(cd "${DIST_DIR}"/doc; autoconf) > "${OUTPUT_DIR}"/doc-config 2>&1
-
-# Clean up after autoconf.
-find "${DIST_DIR}" -type d -name autom4te.cache | xargs rm -rf
-
-# Make sure permissions are reasonable.
-find "${DIST_DIR}" -exec chmod go-w '{}' \;
+my_cp "${SOURCE_TREE}"/etc/xscheme.el "${DIST_DIR}"/etc/.
 
-# Now make the liarc dist directories.
-echo "Creating the liarc distribution directories"
-cp -pR "${DIST_DIR}" "${LIARC_DIST_DIR}"
+# Clean up dot files from source tree
+my_find "${DIST_DIR}" -name '.*' -exec rm -f '{}' \;
 
-# The liarc dist requires additional setup.
-echo "Compiling the liarc bootstrap files"
-(cd "${LIARC_DIST_DIR}"/src; MIT_SCHEME_EXE=mit-scheme-native etc/make-liarc-dist.sh) \
-    > "${OUTPUT_DIR}"/liarc-compile 2>&1
-
-# OK, we've built the directories, time to build the output files.
-echo "Building distribution archive files"
-TAR_FILE=${DIST_DIR}.tar.gz
-LIARC_FILE=${LIARC_DIST_DIR}.tar.gz
-ZIP_FILE=${DIST_DIR}.zip
-UCODE_FILE=${DIST_DIR}-ucode.tar.gz
-OUTPUTS=("${TAR_FILE}" "${LIARC_FILE}" "${ZIP_FILE}" "${UCODE_FILE}" "${CHANGELOG}")
+reconf ()
+{
+    if [[ -f configure ]]; then
+       my_configure
+       my_make distclean
+    else
+       cmd autoconf
+    fi
+}
 
-rm -f "${OUTPUTS[@]}"
+notify "Configuring the distribution directory"
+run_command "${SRC_OUT}"-config "${DIST_DIR}"/src ./Setup.sh
+run_command "${DOC_OUT}"-config "${DIST_DIR}"/doc reconf
 
-tar czf "${TAR_FILE}" "${DIST_DIR}"
-tar czf "${LIARC_FILE}" "${LIARC_DIST_DIR}"
-tar czf "${UCODE_FILE}" "${DIST_DIR}"/src/COPYING "${DIST_DIR}"/src/microcode
-cp -p "${DIST_DIR}"/"${CHANGELOG}" .
+# Clean up after autoconf
+my_find "${DIST_DIR}" -type d -name autom4te.cache -exec rm -rf '{}' \;
+fixup_perms "${DIST_DIR}"
 
-rm -rf "${DIST_DIR}"/src/lib
-# zip will complain if we have any dangling symlinks.
-for S in $(find "${DIST_DIR}" -type l); do
-    [[ ! -r ${S} ]] && rm -f "${S}"
-done
-zip -rlq "${ZIP_FILE}" "${DIST_DIR}"
+notify "Creating archive files"
+make_tar_file "${SRC_OUT}" "${DIST_DIR}" 
+make_tar_file "${SRC_OUT}"-ucode "${DIST_UCODE}" \
+    "${DIST_DIR}"/src/COPYING "${DIST_DIR}"/src/microcode
 
-chmod -w "${OUTPUTS[@]}"
-echo "Success!"
+notify "Success!"
diff --git a/dist/shared.sh b/dist/shared.sh
new file mode 100644 (file)
index 0000000..a04aaaf
--- /dev/null
@@ -0,0 +1,266 @@
+#
+# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+#     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+#     2005, 2006, 2007, 2008, 2009, 2010 Massachusetts Institute of
+#     Technology
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+
+set -e
+umask 022
+
+TL_DIR=$(pwd)
+PROGRAM=${0}
+PROJECT_NAME=mit-scheme
+SOURCE_TREE=${PROJECT_NAME}
+
+usage ()
+{
+    echo "usage: ${PROGRAM} TYPE" >&2
+    echo "  TYPE must be 'snapshot' to specify today's date" >&2
+    echo "    or 'standard' to specify standard release" >&2
+    exit 1
+}
+
+(( ${#} <= 1 )) || usage
+DIST_TYPE=${1:-standard}
+
+[[ -d ${SOURCE_TREE} ]] || usage
+
+get_release ()
+{
+    fgrep Release "${SOURCE_TREE}"/src/runtime/version.scm \
+       | awk 'BEGIN { OFS = "." }
+              NF == 4 { print $3, $4 }
+              NF == 5 { print $3, $4, $5 }
+              NF == 6 { print $3, $4, $5, $6 }
+              NF == 7 { print $3, $4, $5, $6, $7 }' \
+       | tr -d \(\)\'\"
+}
+
+case ${DIST_TYPE} in
+    (snapshot)
+    RELEASE=$(date +%Y%m%d)
+
+       ;;
+    (standard)
+    RELEASE=$(get_release)
+
+       ;;
+    (*)
+       usage
+       ;;
+esac
+
+CHANGELOG=changelog.txt
+TAR_SUFFIX=.tar.gz
+
+DIST_DIR=${PROJECT_NAME}-${RELEASE}
+DOC_IMAGE_DIR=${DIST_DIR}-doc-image
+
+DIST_UCODE=${DIST_DIR}-ucode
+
+OUTPUT_DIR=${TL_DIR}/.out
+SRC_OUT=${OUTPUT_DIR}/src
+DOC_OUT=${OUTPUT_DIR}/doc
+LIARC_OUT=${OUTPUT_DIR}/liarc
+BUILD_OUT=${OUTPUT_DIR}/build
+
+CMD_TRACE=
+cmd ()
+{
+    [[ -n ${CMD_TRACE} ]] && echo ">>>>" "${@}"
+    "${@}"
+}
+
+reset_output_dir ()
+{
+    my_rm_rf "${OUTPUT_DIR}"
+    cmd mkdir "${OUTPUT_DIR}"
+}
+
+make_output_dir ()
+{
+    my_mkdir "${OUTPUT_DIR}"
+}
+
+my_cp ()
+{
+    cmd cp -pR "${@}"
+}
+
+my_mv ()
+{
+    cmd mv "${@}"
+}
+
+my_rm_f ()
+{
+    cmd rm -f "${@}"
+}
+
+my_rm_rf ()
+{
+    cmd rm -rf "${@}"
+}
+
+my_rmdir ()
+{
+    cmd rmdir "${@}"
+}
+
+my_mkdir ()
+{
+    cmd install -d -m 755 "${@}"
+}
+
+my_install ()
+{
+    cmd install -p "${@}"
+}
+
+my_install_data ()
+{
+    cmd my_install -m 644 "${@}"
+}
+
+my_tar ()
+{
+    local TAR_FILE=${1}${TAR_SUFFIX}
+    shift
+    cmd tar cvzf "${TAR_FILE}" "${@}"
+}
+
+my_untar ()
+{
+    local TAR_FILE=${1}${TAR_SUFFIX}
+    shift
+    cmd tar xzf "${TAR_FILE}" "${@}"
+}
+
+my_configure ()
+{
+    cmd ./configure "${@}"
+}
+
+my_make ()
+{
+    cmd make "${@}"
+}
+
+my_find ()
+{
+    cmd find "${@}"
+}
+
+fixup_perms ()
+{
+    cmd chmod -R og-w "${1}"
+}
+
+make_read_only ()
+{
+    cmd chmod 444 "${@}"
+}
+
+notify ()
+{
+    echo "${@}"
+}
+
+run_command ()
+{
+    local OUT_FILE=${1}
+    local DIR=${2}
+    shift 2
+    (cd "${DIR}"; cmd "${@}") > "${OUT_FILE}" 2>&1
+}
+
+make_tar_file ()
+{
+    local OUT_FILE=${1}-tar
+    local DIR=${2}
+    local TAR_FILE=${DIR}${TAR_SUFFIX}
+    shift 2
+    if (( ${#} < 1 )); then
+       set "${DIR}"
+    fi
+    my_rm_f "${TAR_FILE}"
+    my_tar "${DIR}" "${@}" > "${OUT_FILE}" 2>&1
+    make_read_only "${TAR_FILE}"
+}
+
+unpack_dist_to ()
+{
+    local DEST=${1}
+    guarantee_tar "${DIST_DIR}"
+    new_temp_dir "${DEST}"
+    unpack_into "${DIST_DIR}" "${DEST}"
+}
+
+unpack_dist ()
+{
+    guarantee_tar "${DIST_DIR}"
+    new_temp_file "${DIST_DIR}"
+    my_untar "${DIST_DIR}"
+}
+
+guarantee_tar ()
+{
+    guarantee_file "${1}""${TAR_SUFFIX}"
+}
+
+guarantee_file ()
+{
+    if [[ ! -f ${1} ]]; then
+       echo "No source file: ${1}"
+       exit 1
+    fi
+}
+
+unpack_doc_image_into ()
+{
+    unpack_into "${DOC_IMAGE_DIR}" "${1}"
+}
+
+unpack_into ()
+{
+    my_untar "${1}" -C "${2}" --strip-components 1
+}
+
+# Keep track of temp files and clean them up.
+
+new_temp_file ()
+{
+    TEMP_FILES+=("${@}")
+    my_rm_rf "${@}"
+}
+
+new_temp_dir ()
+{
+    new_temp_file "${1}"
+    my_mkdir "${1}"
+}
+
+cleanup_temp_files ()
+{
+    cd "${TL_DIR}"
+    my_rm_rf "${TEMP_FILES[@]}"
+    TEMP_FILES=()
+}
+
+TEMP_FILES=()
+trap cleanup_temp_files EXIT SIGINT SIGQUIT SIGTERM