blob: 9c09916be3f3bb7c087ab39d9b93371b5c0eae27 [file] [log] [blame]
#!/bin/bash -u
#
# This script will attempt to build and install the necessary CLDR JAR files
# from a given CLDR installation root directory. The JAR files are installed
# according to the manual instructions given in README.txt and lib/README.txt.
#
# The user must have installed both 'ant' and 'maven' in accordance with the
# instructions in README.txt before attempting to run this script.
#
# Usage (from the directory of this script):
#
# ./install-cldr-jars.sh <CLDR-root-directory>
# Exit with a message for fatal errors.
function die() {
echo "$1"
echo "Exiting..."
exit 1
} >&2
# Runs a given command and captures output to the global log file.
# If a command errors, the user can then view the log file.
function run_with_logging() {
echo >> "${LOG_FILE}"
echo "Running: ${@}" >> "${LOG_FILE}"
echo "----------------------------------------------------------------" >> "${LOG_FILE}"
"${@}" >> "${LOG_FILE}" 2>&1
if (( $? != 0 )) ; then
echo "---- Previous command failed ----" >> "${LOG_FILE}"
echo "Error running: ${@}"
read -p "Show log file? " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]] ; then
less -X "${LOG_FILE}"
fi
mv -f "${LOG_FILE}" "${ROOT_DIR}/last_log.txt"
echo "Log file: ${ROOT_DIR}/last_log.txt"
exit 1
fi
echo "---- Previous command succeeded ----" >> "${LOG_FILE}"
}
# First require that we are run from the same directory as the script.
ROOT_DIR="$(realpath $(dirname $0))"
if [[ "${ROOT_DIR}" != "$(realpath ${PWD})" ]] ; then
echo "WARNING: Shell script should be run from the project root directory"
echo "Current directory:"
echo " ${PWD}"
echo "Project root direcory (where this script is):"
echo " ${ROOT_DIR}"
read -p "Change to project root and continue? " -n 1 -r
echo
[[ "${REPLY}" =~ ^[Yy]$ ]] || die "Script must be run from the project root directory"
cd "$ROOT_DIR"
fi
# Check for some expected environmental things early.
which ant > /dev/null || die "Cannot find Ant executable 'ant' in the current path."
which mvn > /dev/null || die "Cannot find Maven executable 'mvn' in the current path."
[[ -d "lib" ]] || die "Cannot find expected 'lib' directory in: $PWD"
# Check there's one argument that points at a directory (or a symbolic link to a directory).
(( $# == 1 )) && [[ -d "$1" ]] || die "Usage: ./install-cldr-jars.sh <CLDR-root-directory>"
# Set up a log file (and be nice about tidying it up).
LOG_FILE="$(tempfile)" || die "Cannot create temporary file!"
trap "rm -f -- '${LOG_FILE}'" EXIT
echo "---- LOG FILE ---- $(date '+%F %T') ----" >> "${LOG_FILE}"
# Build the cldr.jar in the CLDR tools directory.
CLDR_TOOLS_DIR="$1/tools/java"
pushd "${CLDR_TOOLS_DIR}" > /dev/null || die "Cannot change directory to: ${CLDR_TOOLS_DIR}"
echo "Building CLDR JAR file..."
run_with_logging ant -f ./build.xml clean jar
[[ -f "cldr.jar" ]] || die "Error creating cldr.jar file"
[[ -f "libs/utilities.jar" ]] || die "Cannot find libs/utilities.jar"
popd > /dev/null
# Install both required CLDR jars in the lib/ directory.
pushd "${ROOT_DIR}/lib" > /dev/null || die "Cannot change to lib directory"
# The -B flag is "batch" mode and won't mess about with escape codes in the log file.
echo "Installing CLDR JAR file..."
run_with_logging mvn -B install:install-file \
-DgroupId=org.unicode.cldr \
-DartifactId=cldr-api \
-Dversion=0.1-SNAPSHOT \
-Dpackaging=jar \
-DgeneratePom=true \
-DlocalRepositoryPath=. \
-Dfile="${CLDR_TOOLS_DIR}/cldr.jar"
echo "Installing CLDR utilities JAR file..."
run_with_logging mvn -B install:install-file \
-DgroupId=com.ibm.icu \
-DartifactId=icu-utilities \
-Dversion=0.1-SNAPSHOT \
-Dpackaging=jar \
-DgeneratePom=true \
-DlocalRepositoryPath=. \
-Dfile="${CLDR_TOOLS_DIR}/libs/utilities.jar"
popd > /dev/null
# We are back in the root directory now.
echo "Syncing local Maven repository..."
run_with_logging mvn -B dependency:purge-local-repository -DsnapshotsOnly=true
mv -f "${LOG_FILE}" "last_log.txt"
echo "All done! (log file: last_log.txt)"
trap - EXIT