| #!/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 |