# outputs: doc image tar, formatted doc tars
. "$(dirname "${0}")"/shared.sh
-make_output_dir
+restore_release_vars
BUILD_DIR=doc-build
PLUGINS_WITH_DOC=(blowfish gdbm imail)
}
notify "Building documentation"
-unpack_dist_file_to "${DIST_DIR}" "${BUILD_DIR}"
+unpack_dist_dir "${DIST_DIR}"
+my_rm_rf "${BUILD_DIR}"
+my_mv "${DIST_DIR}" "${BUILD_DIR}"
+cleanup_file "${BUILD_DIR}"
run_command "${DOC_OUT}"-build "${BUILD_DIR}"/doc build_docs
for PLUGIN in "${PLUGINS_WITH_DOC[@]}"; do
run_command_append "${DOC_OUT}"-build "${BUILD_DIR}"/src/"${PLUGIN}" \
(( ${#} >= 2 )) || usage
DIST_TYPE=${1}
ARCH=${2}
+ shift 2
}
ARGS_FUNCTION=system_args
system_usage ()
{
echo "usage: ${PROGRAM} TYPE ARCH [OPTIONS]"
- usage_arg_type
+ standard_args_usage
echo " ARCH must be 'i386' or 'x86-64'"
echo " OPTIONS are passed to the configure script"
}
USAGE_FUNCTION=system_usage
. "$(dirname "${0}")"/shared.sh
-make_output_dir
-
-shift 2
+restore_release_vars
OUT=${MACOSX_OUT}-${ARCH}
ARCH_BASE=${DIST_DIR}-${ARCH}
{
new_temp_dir "${DMG_DIR}"
local APP_DIR="MIT:GNU Scheme ${RELEASE}.app"
- my_mv "${DIST_DIR}"/src/mit-scheme.app "${DMG_DIR}"/"${APP_DIR}"
+ my_mv "${ARCH_BASE}"/src/mit-scheme.app "${DMG_DIR}"/"${APP_DIR}"
my_ln_s /Applications "${DMG_DIR}"/.
my_rm_f "${DMG_FILE}"
create-dmg --volname "MIT-GNU Scheme ${RELEASE}" "${DMG_FILE}" "${DMG_DIR}"
}
notify "Compiling executable"
-unpack_dist_file_to "${ARCH_BASE}" "${DIST_DIR}"
-run_command "${OUT}"-compile "${DIST_DIR}"/src compile "${@}"
+unpack_dist_dir "${ARCH_BASE}"
+run_command "${OUT}"-compile "${ARCH_BASE}"/src compile "${@}"
notify "Building application bundle"
VERSION_STRING=${RELEASE} \
- run_command "${OUT}"-buildapp "${DIST_DIR}"/src etc/macosx/make-app.sh
+ run_command "${OUT}"-buildapp "${ARCH_BASE}"/src etc/macosx/make-app.sh
notify "Building disk image"
run_command "${OUT}"-makedmg "${TL_DIR}" make_dmg
+cleanup_temp_files
notify_finished
# inputs: source tar
# outputs: binary tar
+umask go-w
+
system_args ()
{
(( ${#} == 2 )) || usage
system_usage ()
{
echo "usage: ${PROGRAM} TYPE ARCH"
- usage_arg_type
- echo " ARCH must be one of 'i386', 'x86-64', or 'svm1'"
+ standard_args_usage
+ echo " ARCH must be a supported native-code architecture,"
+ echo " such as 'x86-64' or 'aarch64le'"
}
USAGE_FUNCTION=system_usage
. "$(dirname "${0}")"/shared.sh
-make_output_dir
-
-shift 2
+restore_release_vars
build ()
{
OUT_ROOT=${NATIVE_OUT}-${ARCH}
notify "Building binaries for arch ${ARCH}"
-unpack_dist_file_to "${DIST_DIR}" "${DIST_DIR}"
+unpack_dist_dir "${DIST_DIR}"
run_command "${OUT_ROOT}"-compile "${DIST_DIR}"/src build
run_command "${OUT_ROOT}"-clean "${DIST_DIR}"/src clean
notify "Making tarball"
-fixup_perms "${DIST_DIR}"
make_tar_file "${OUT_ROOT}" "${DIST_DIR}"-"${ARCH}" "${DIST_DIR}"
-cleanup_temp_files
+cleanup_temp_files
notify_finished
# inputs: git source tree
# outputs: changelog, source tar
+system_args ()
+{
+ (( ${#} <= 2 )) || usage
+ DIST_TYPE=${1:-standard}
+ GIT_BRANCH=${2:-master}
+}
+ARGS_FUNCTION=system_args
+
+system_usage ()
+{
+ echo "usage: ${PROGRAM} TYPE [BRANCH]"
+ standard_args_usage
+ echo " BRANCH is the git branch to use"
+}
+USAGE_FUNCTION=system_usage
+
. "$(dirname "${0}")"/shared.sh
reset_output_dir
-notify "Creating the changelog"
-my_rm_f "${CHANGELOG}"
-run_command "${CHANGELOG}" "${SOURCE_TREE}" git log --name-status
-make_read_only "${CHANGELOG}"
+GIT_REPO=https://git.savannah.gnu.org/git/"${PROJECT_NAME}".git
-notify "Creating the distribution directory"
-new_temp_dir "${DIST_DIR}"
-my_cp "${CHANGELOG}" "${DIST_DIR}"/.
-for FILE in src tests doc dist/Makefile; do
- my_cp "${SOURCE_TREE}"/"${FILE}" "${DIST_DIR}"/.
-done
-my_mkdir "${DIST_DIR}"/etc
-my_cp "${SOURCE_TREE}"/etc/xscheme.el "${DIST_DIR}"/etc/.
+notify "Cloning the source tree"
+run_command "${SRC_OUT}"-clone . git clone -b "${GIT_BRANCH}" "${GIT_REPO}"
+cleanup_file "${PROJECT_NAME}"
-# Clean up dot files from source tree
-my_find "${DIST_DIR}" -name '.*' -exec rm -f '{}' \;
-
-reconf ()
+generate_changelog ()
{
- if [[ -f configure ]]; then
- my_configure
- my_make distclean
- else
- cmd autoconf
- fi
+ git log --name-status > ../"${CHANGELOG}"
+ make_read_only ../"${CHANGELOG}"
}
-notify "Configuring the distribution directory"
-run_command "${SRC_OUT}"-config "${DIST_DIR}"/src ./Setup.sh
-run_command "${DOC_OUT}"-config "${DIST_DIR}"/doc reconf
+notify "Creating the changelog"
+run_command "${SRC_OUT}"-changelog "${PROJECT_NAME}" generate_changelog
+my_rm_rf "${PROJECT_NAME}"/.git
-# Clean up after autoconf
-find "${DIST_DIR}" -type d -name autom4te.cache | xargs rm -rf
-fixup_perms "${DIST_DIR}"
+notify "Setting release number"
+set_release_vars "${PROJECT_NAME}"
+my_mv "${PROJECT_NAME}" "${DIST_DIR}"
+cleanup_file "${DIST_DIR}"
+
+notify "Configuring the source tree"
+run_command "${SRC_OUT}"-config "${DIST_DIR}"/src ./Setup.sh
+run_command_append "${SRC_OUT}"-config "${DIST_DIR}"/doc autoconf
notify "Creating archive file"
make_tar_file "${SRC_OUT}" "${DIST_DIR}"
+notify "Cleaning up"
+my_rm_rf "${PROJECT_NAME}"/"${DIST_DIR}"
+
+cleanup_temp_files
notify_finished
# 02110-1301, USA.
set -ae
-umask 022
+umask 0002
# Capture standard out so we can send messages there even when it's
# redirected.
TL_DIR=$(pwd)
PROGRAM=${0}
PROJECT_NAME=mit-scheme
-SOURCE_TREE=${PROJECT_NAME}
usage ()
{
standard_usage ()
{
echo "usage: ${PROGRAM} TYPE"
- usage_arg_type
+ standard_args_usage
}
-usage_arg_type ()
+standard_args_usage ()
{
echo " TYPE must be 'snapshot' to specify today's date"
echo " or 'standard' to specify standard release"
DIST_TYPE=${1:-standard}
}
-source_missing ()
-{
- echo "${SOURCE_TREE}: directory not found"
- exit 1
-}
+${ARGS_FUNCTION:-standard_args} "${@}"
-[[ -d ${SOURCE_TREE} ]] || source_missing
+CHANGELOG=changelog.txt
+TAR_SUFFIX=.tar.gz
-${ARGS_FUNCTION:-standard_args} "${@}"
+OUTPUT_DIR=${TL_DIR}/.out
+RELEASE_OUT=${OUTPUT_DIR}/release
+SRC_OUT=${OUTPUT_DIR}/src
+DOC_OUT=${OUTPUT_DIR}/doc
+LIARC_OUT=${OUTPUT_DIR}/liarc
+NATIVE_OUT=${OUTPUT_DIR}/native
+MACOSX_OUT=${OUTPUT_DIR}/macosx
+
+PLUGINS=(blowfish gdbm mcrypt edwin imail x11 x11-screen)
+
+set_release_vars ()
+{
+ local -r SOURCE_TREE=${1}
+ case ${DIST_TYPE} in
+ snapshot)
+ RELEASE=$(date +%Y%m%d)
+ ;;
+ standard)
+ RELEASE=$(get_release "${SOURCE_TREE}")
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ DIST_DIR=${PROJECT_NAME}-${RELEASE}
+ echo "${RELEASE}" > "${RELEASE_OUT}"
+}
get_release ()
{
+ local -r SOURCE_TREE=${1}
fgrep Release "${SOURCE_TREE}"/src/runtime/version.scm \
| awk 'BEGIN { OFS = "." }
NF == 4 { print $3, $4 }
| 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}
-
-OUTPUT_DIR=${TL_DIR}/.out
-SRC_OUT=${OUTPUT_DIR}/src
-DOC_OUT=${OUTPUT_DIR}/doc
-LIARC_OUT=${OUTPUT_DIR}/liarc
-NATIVE_OUT=${OUTPUT_DIR}/native
-MACOSX_OUT=${OUTPUT_DIR}/macosx
+restore_release_vars ()
+{
+ guarantee_file "${RELEASE_OUT}"
+ RELEASE=$(cat "${RELEASE_OUT}")
+ DIST_DIR=${PROJECT_NAME}-${RELEASE}
+}
-PLUGINS=(blowfish gdbm mcrypt edwin imail x11 x11-screen)
+guarantee_file ()
+{
+ if [[ ! -f ${1} ]]; then
+ echo "Missing required file: ${1}" >&2
+ exit 1
+ fi
+}
notify ()
{
reset_output_dir ()
{
my_rm_rf "${OUTPUT_DIR}"
- cmd mkdir "${OUTPUT_DIR}"
+ my_mkdir "${OUTPUT_DIR}"
}
make_output_dir ()
make_read_only "${TAR_FILE}"
}
-unpack_dist_file_to ()
+unpack_dist_dir ()
{
local SOURCE=${1}
- local DEST=${2}
- guarantee_tar "${SOURCE}"
- new_temp_dir "${DEST}"
- unpack_into_existing_dir "${SOURCE}" "${DEST}"
-}
-
-unpack_into_existing_dir ()
-{
- my_untar "${1}" -C "${2}" --strip-components 1
+ guarantee_file "${SOURCE}""${TAR_SUFFIX}"
+ my_rm_rf "${SOURCE}"
+ my_untar "${SOURCE}"
+ cleanup_file "${SOURCE}"
}
-guarantee_tar ()
-{
- guarantee_file "${1}""${TAR_SUFFIX}"
-}
+# Keep track of temp files and clean them up.
-guarantee_file ()
+cleanup_file ()
{
- if [[ ! -f ${1} ]]; then
- echo "No source file: ${1}"
- exit 1
- fi
+ TEMP_FILES+=("${@}")
}
-# Keep track of temp files and clean them up.
-
new_temp_file ()
{
- TEMP_FILES+=("${@}")
+ cleanup_file "${@}"
my_rm_rf "${@}"
}