jtreg6/make/build.sh

937 lines
33 KiB
Bash

#!/bin/bash
#
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code 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
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# This script will download/build the dependencies for jtreg and then
# build jtreg. Downloaded files are verified against known/specified
# specified checksums.
# The default version to use when building jtreg can be found in the
# make/version-numbers file, where the default versions and
# corresponding known checksums for the dependencies are also
# specified. Almost all of the defaults can be overridden by setting
# the respective environment variables.
# For each of the dependency the following steps are applied and the
# first successful one is used:
#
# 1. Check if the dependency is available locally
# 2. Download a prebuilt version of the dependency
# 3. Build the dependency from source, downloading the source archive
# first
#
# In particular, when not found locally the dependencies will be
# handled as follows:
#
# * JUnit, TestNG, JCommander, and Ant jar are by default
# downloaded from Maven central.
# * JT Harness, JCov, and AsmTools are downloaded or built from
# source.
# * The JDK dependency is downloaded. No default URL is set.
#
# Some noteworthy control variables:
#
# MAVEN_REPO_URL_BASE (e.g. "https://repo1.maven.org/maven2")
# The base URL for the maven central repository.
#
# CODE_TOOLS_URL_BASE (e.g. "https://git.openjdk.java.net")
# The base URL for the code tools source repositories.
#
# ANT_ARCHIVE_URL_BASE (e.g. "https://archive.apache.org/dist/ant/binaries")
# The base URL for Ant dist binaries.
#
# JTREG_VERSION (e.g. "5.2")
# JTREG_VERSION_STRING (e.g. "jtreg-5.2+8"
# JTREG_BUILD_NUMBER (e.g. "8")
# JTREG_BUILD_MILESTONE (e.g. "dev")
# The version information to use for when building jtreg.
#
# MAKE_ARGS (e.g. "-j4 all")
# Additional arguments to pass to make when building jtreg.
#
# WGET
# The wget-like executable to use when downloading files.
#
# WGET_OPTS (e.g. "-v")
# Additional arguments to pass to WGET when downloading files.
#
# CURL (e.g. "/path/to/my/wget")
# The curl-like executable to use when downloading files.
# Note: If available, wget will be preferred.
#
# CURL_OPTS (e.g. "-v")
# Additional arguments to pass to CURL when downloading files.
#
# SKIP_DOWNLOAD
# Skip the downloads if the file is already present locally.
#
# SKIP_CHECKSUM_CHECK
# Skip the checksum verification for downloaded files.
# The control variables for dependencies are on the following general
# form (not all of them are relevant for all dependencies):
#
# <dependency>_URL (e.g. JTHARNESS_ARCHIVE_URL)
# The full URL for the dependency.
#
# <dependency>_URL_BASE (e.g. JTHARNESS_ARCHIVE_URL_BASE)
# The base URL for the dependency. Requires additional dependency
# specific variables to be specified.
#
# <dependency>_CHECKSUM (e.g. JTHARNESS_ARCHIVE_CHECKSUM)
# The expected checksum of the download file.
#
# <dependency>_SRC_TAG (e.g. JTHARNESS_SRC_TAG)
# The SCM tag to use when building from source. The special value
# "tip" can be used to get the most recent version.
#
# <dependency>_SRC_ARCHIVE_CHECKSUM (e.g. JTHARNESS_SRC_ARCHIVE_CHECKSUM)
# The checksum of the source archive.
#
# The below outlines the details of how the dependencies are
# handled. For each dependency the steps are tried in order and the
# first successful one will be used.
#
# Ant
# Checksum variables:
# ANT_ARCHIVE_CHECKSUM: checksum of binary archive
#
# 1. ANT
# The path to the ant executable.
# 2a. ANT_ARCHIVE_URL
# The full URL for the archive.
# 2b. ANT_ARCHIVE_URL_BASE + ANT_VERSION
# The individual URL components used to construct the full URL.
#
# Ant jar
# Checksum variables:
# ANT_JAR_CHECKSUM: checksum of binary archive
#
# 1. ANT_JAR
# The path to ant.jar.
# 2a. ANT_JAR_URL
# The full URL for the jar.
# 2b. ANT_JAR_URL_BASE + ANT_JAR_VERSION
# The individual URL components used to construct the full URL.
#
# AsmTools
# Checksum variables:
# ASMTOOLS_ARCHIVE_CHECKSUM: checksum of binary archive
# ASMTOOLS_SRC_ARCHIVE_CHECKSUM: checksum of source archive
#
# 1. ASMTOOLS_JAR + ASMTOOLS_LICENSE
# The path to asmtools.jar and LICENSE respectively.
# 2a. ASMTOOLS_ARCHIVE_URL
# The full URL for the archive.
# 2b. ASMTOOLS_ARCHIVE_URL_BASE + ASMTOOLS_VERSION + ASMTOOLS_BUILD_NUMBER + ASMTOOLS_FILE
# The individual URL components used to construct the full URL.
# 3. ASMTOOLS_SRC_TAG
# The SCM repository tag to use when building from source.
#
# Google Guice (required by TestNG)
# Checksum variables:
# GOOGLE_GUICE_JAR_CHECKSUM: checksum of jar
#
# 1. GOOGLE_GUICE_JAR
# The path to guice.jar.
# 2a. GOOGLE_GUICE_JAR_URL
# The full URL for the jar.
# 2b. GOOGLE_GUICE_JAR_URL_BASE + GOOGLE_GUICE_VERSION
# The individual URL components used to construct the full URL.
#
# Hamcrest (required by JUnit)
# Checksum variables:
# HAMCREST_JAR_CHECKSUM: checksum of jar
#
# 1. HAMCREST_JAR
# The path to hamcrest.jar.
# 2a. HAMCREST_JAR_URL
# The full URL for the jar.
# 2b. HAMCREST_JAR_URL_BASE + HAMCREST_VERSION
# The individual URL components used to construct the full URL.
#
# JCommander (required by TestNG)
# Checksum variables:
# JCOMMANDER_JAR_CHECKSUM: checksum of jar
#
# 1. JCOMMANDER_JAR
# The path to jcommander.jar.
# 2a. JCOMMANDER_JAR_URL
# The full URL for the jar.
# 2b. JCOMMANDER_JAR_URL_BASE + JCOMMANDER_VERSION
# The individual URL components used to construct the full URL.
#
# JCov
# Checksum variables:
# JCOV_ARCHIVE_CHECKSUM: checksum of binary archive
# JCOV_SRC_ARCHIVE_CHECKSUM: checksum of source archive
#
# 1. JCOV_JAR + JCOV_NETWORK_SAVER_JAR + JCOV_LICENSE
# The path to jcov.jar, jcov_network_saver.jar, and LICENSE respectively.
# 2a. JCOV_ARCHIVE_URL
# The full URL for the archive.
# 2b. JCOV_ARCHIVE_URL_BASE + JCOV_VERSION + JCOV_BUILD_NUMBER + JCOV_FILE
# The individual URL components used to construct the full URL.
# 3. JCOV_SRC_TAG
# The SCM repository tag to use when building from source.
#
# JDK
# Checksum variables:
# JDK_ARCHIVE_CHECKSUM: checksum of binary archive
#
# 1. JAVA_HOME
# The path to the JDK.
# 2a. JDK_ARCHIVE_URL
# The full URL for the archive.
# 2b. JDK_ARCHIVE_URL_BASE + JDK_VERSION + JDK_BUILD_NUMBER + JDK_FILE
# The individual URL components used to construct the full URL.
#
# JT Harness
# Checksum variables:
# JTHARNESS_ARCHIVE_CHECKSUM: checksum of binary archive
# JTHARNESS_SRC_ARCHIVE_CHECKSUM: checksum of source archive
#
# 1. JTHARNESS_JAVATEST_JAR + JTHARNESS_LICENSE + JTHARNESS_COPYRIGHT
# The path to javatest.jar, license.txt, and copyright.txt respectively.
# 2a. JTHARNESS_ARCHIVE_URL
# The full URL for the archive.
# 2b. JTHARNESS_ARCHIVE_URL_BASE + JTHARNESS_VERSION + JTHARNESS_BUILD_NUMBER + JTHARNESS_FILE
# The individual URL components used to construct the full URL.
# 3. JTHARNESS_SRC_TAG
# The SCM repository tag to use when building from source.
#
# JUnit (requires HamCrest)
# Checksum variables:
# JUNIT_JAR_CHECKSUM: checksum of binary archive
#
# 1. JUNIT_JAR + JUNIT_LICENSE
# The path to asmtools.jar and LICENSE respectively.
# 2a. JUNIT_JAR_URL
# The full URL for the jar.
# 2b. JUNIT_JAR_URL_BASE + JUNIT_VERSION + JUNIT_FILE
# The individual URL components used to construct the full URL.
#
# TestNG (requires JCommander, Google Guice)
# Checksum variables:
# TESTNG_JAR_CHECKSUM: checksum of binary archive
# TESTNG_LICENSE_CHECKSUM: checksum of LICENSE file
#
# 1. TESTNG_JAR + TESTNG_LICENSE
# The path to testng.jar and LICENSE.txt respectively.
# 2a. TESTNG_JAR_URL
# The full URL for the jar.
# 2b. TESTNG_JAR_URL_BASE + TESTNG_VERSION + TESTNG_FILE
# The individual URL components used to construct the full URL.
#
mydir="$(dirname ${BASH_SOURCE[0]})"
log_module="$(basename "${BASH_SOURCE[0]}")"
. "${mydir}/build-support/build-common.sh"
usage() {
echo "Usage: $0 <options> [ [--] <make-options-and-targets> ]"
echo "--help"
echo " Show this message"
echo "--jdk /path/to/jdk"
echo " Path to JDK; must be JDK 8 or higher"
echo "--quiet | -q"
echo " Reduce the logging output."
echo "--show-default-versions"
echo " Show default versions of external components"
echo "--show-config-details"
echo " Show configuration details"
echo "--skip-checksum-check"
echo " Skip the checksum check for downloaded files."
echo "--skip-download"
echo " Skip downloading files if file already available"
echo "--skip-make"
echo " Skip running 'make' (just download dependencies if needed)"
echo "--version-numbers file"
echo " Provide an alternate file containing dependency version information"
echo "--"
echo " Subsequent arguments are for 'make'"
}
ensure_arg() {
check_arguments "${FUNCNAME}" 2 $#
local option="$1"
local arg_count="$2"
if [ "$2" -lt "2" ]; then
echo "The $option option requires an argument"
exit
fi
}
process_args() {
while [ "$#" -gt 0 ]; do
case "$1" in
--help|-h ) HELP=1 ; shift ;;
--jdk ) ensure_arg "$1" $# ; JAVA_HOME="$2" ; shift ; shift ;;
--quiet|-q ) export QUIET=1 ; shift ;;
--show-config-details ) SHOW_CONFIG_DETAILS=1 ; shift ;;
--show-default-versions ) SHOW_DEFAULT_VERSIONS=1 ; shift ;;
--skip-checksum-check ) export SKIP_CHECKSUM_CHECK=1 ; shift ;;
--skip-download ) export SKIP_DOWNLOAD=1 ; shift ;;
--skip-make ) SKIP_MAKE=1 ; shift ;;
--version-numbers ) ensure_arg "$1" $# ; VERSION_NUMBERS="$2" ; shift ; shift ;;
-- ) shift ; MAKE_ARGS="$@" ; break ;;
-* ) error "unknown option: '$1'" ; exit 1 ;;
* ) MAKE_ARGS="$@" ; break ;;
esac
done
}
process_args "$@"
if [ -n "${HELP:-}" ]; then
usage
exit
fi
. "${VERSION_NUMBERS:-${mydir}/build-support/version-numbers}"
JTREG_VERSION="${JTREG_VERSION:-}"
ANT_VERSION="${ANT_VERSION:-${DEFAULT_ANT_VERSION}}"
ANT_ARCHIVE_CHECKSUM="${ANT_ARCHIVE_CHECKSUM:-${DEFAULT_ANT_ARCHIVE_CHECKSUM}}"
ANT_JAR_VERSION="${ANT_JAR_VERSION:-${ANT_VERSION}}"
ANT_JAR_URL_BASE="${ANT_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}"
ANT_JAR_VERSION="${ANT_JAR_VERSION:-${DEFAULT_ANT_JAR_VERSION:-${ANT_VERSION}}}"
ANT_JAR_CHECKSUM="${ANT_JAR_CHECKSUM:-${DEFAULT_ANT_JAR_CHECKSUM}}"
# Not available in Maven
ASMTOOLS_SRC_TAG="${ASMTOOLS_SRC_TAG:-${DEFAULT_ASMTOOLS_SRC_TAG}}"
ASMTOOLS_SRC_ARCHIVE_CHECKSUM="${ASMTOOLS_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_ASMTOOLS_SRC_ARCHIVE_CHECKSUM}}"
GOOGLE_GUICE_VERSION="${GOOGLE_GUICE_VERSION:-${DEFAULT_GOOGLE_GUICE_VERSION}}"
GOOGLE_GUICE_JAR_URL_BASE="${GOOGLE_GUICE_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}"
GOOGLE_GUICE_JAR_CHECKSUM="${GOOGLE_GUICE_JAR_CHECKSUM:-${DEFAULT_GOOGLE_GUICE_JAR_CHECKSUM}}"
HAMCREST_VERSION="${HAMCREST_VERSION:-${DEFAULT_HAMCREST_VERSION}}"
HAMCREST_JAR_URL_BASE="${HAMCREST_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}"
HAMCREST_JAR_CHECKSUM="${HAMCREST_JAR_CHECKSUM:-${DEFAULT_HAMCREST_JAR_CHECKSUM}}"
JCOMMANDER_VERSION="${JCOMMANDER_VERSION:-${DEFAULT_JCOMMANDER_VERSION}}"
JCOMMANDER_JAR_URL_BASE="${JCOMMANDER_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}"
JCOMMANDER_JAR_CHECKSUM="${JCOMMANDER_JAR_CHECKSUM:-${DEFAULT_JCOMMANDER_JAR_CHECKSUM}}"
# Not available in Maven
JCOV_SRC_TAG="${JCOV_SRC_TAG:-${DEFAULT_JCOV_SRC_TAG}}"
JCOV_SRC_ARCHIVE_CHECKSUM="${JCOV_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_JCOV_SRC_ARCHIVE_CHECKSUM}}"
# Not available in Maven
JTHARNESS_SRC_TAG="${JTHARNESS_SRC_TAG:-${DEFAULT_JTHARNESS_SRC_TAG}}"
JTHARNESS_SRC_ARCHIVE_CHECKSUM="${JTHARNESS_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_JTHARNESS_SRC_ARCHIVE_CHECKSUM}}"
JUNIT_VERSION="${JUNIT_VERSION:-${DEFAULT_JUNIT_VERSION}}"
JUNIT_JAR_URL_BASE="${JUNIT_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}"
JUNIT_JAR_CHECKSUM="${JUNIT_JAR_CHECKSUM:-${DEFAULT_JUNIT_JAR_CHECKSUM}}"
JUNIT_LICENSE_FILE="${JUNIT_LICENSE_FILE:-${DEFAULT_JUNIT_LICENSE_FILE}}"
TESTNG_VERSION="${TESTNG_VERSION:-${DEFAULT_TESTNG_VERSION}}"
TESTNG_JAR_URL_BASE="${TESTNG_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}"
TESTNG_JAR_CHECKSUM="${TESTNG_JAR_CHECKSUM:-${DEFAULT_TESTNG_JAR_CHECKSUM}}"
TESTNG_LICENSE_VERSION="${TESTNG_LICENSE_VERSION:-${DEFAULT_TESTNG_LICENSE_VERSION:-${TESTNG_VERSION}}}"
TESTNG_LICENSE_CHECKSUM="${TESTNG_LICENSE_CHECKSUM:-${DEFAULT_TESTNG_LICENSE_CHECKSUM}}"
if [ "${SHOW_DEFAULT_VERSIONS:-}" != "" ]; then
find ${mydir} -name version-numbers | \
xargs cat | \
grep -v '^#' | \
grep -E 'DEFAULT.*(_VERSION|_SRC_TAG)' | \
sort -u
exit
fi
if [ "${SHOW_CONFIG_DETAILS:-}" != "" ]; then
( set -o posix ; set ) | \
grep -E '^(ANT|ASM|ASMTOOLS|GOOGLE_GUICE|HAMCREST|JCOMMANDER|JCOV|JTHARNESS|JUNIT|TESTNG)_[A-Z_]*=' | \
sort -u
exit
fi
setup_java_home() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JAVA_HOME:-}" ]; then
return
fi
if [ -z "${JDK_ARCHIVE_URL:-}" ]; then
if [ -n "${JDK_ARCHIVE_URL_BASE:-}" ]; then
if [ -z "${JDK_VERSION:-}" ]; then
error "JDK_VERSION not set"
exit 1
fi
if [ -z "${JDK_BUILD_NUMBER:-}" ]; then
error "JDK_BUILD_NUMBER not set"
exit 1
fi
if [ -z "${JDK_FILE:-}" ]; then
error "JDK_FILE not set"
exit 1
fi
JDK_ARCHIVE_URL="${JDK_ARCHIVE_URL_BASE}/${JDK_VERSION}/${JDK_BUILD_NUMBER}/${JDK_FILE}"
fi
fi
local JDK_DEPS_DIR="${DEPS_DIR}"
if [ -n "${JDK_ARCHIVE_URL:-}" ]; then
local JDK_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${JDK_ARCHIVE_URL}")"
if [ -n "${JDK_ARCHIVE_CHECKSUM:-}" ]; then
get_archive "${JDK_ARCHIVE_URL}" "${JDK_LOCAL_ARCHIVE_FILE}" "${JDK_DEPS_DIR}" "${JDK_ARCHIVE_CHECKSUM}"
else
get_archive_no_checksum "${JDK_ARCHIVE_URL}" "${JDK_LOCAL_ARCHIVE_FILE}" "${JDK_DEPS_DIR}"
fi
local JDK_JAVAC="$(find "${JDK_DEPS_DIR}" -path '*/bin/javac')"
JAVA_HOME="$(dirname $(dirname "${JDK_JAVAC}"))"
return
fi
error "None of JAVA_HOME, JDK_ARCHIVE_URL or JDK_ARCHIVE_URL_BASE are set"
exit 1
}
sanity_check_java_home() {
if [ -z "${JAVA_HOME:-}" ]; then
error "No JAVA_HOME set"
exit 1
fi
if [ ! -d "${JAVA_HOME}" ]; then
error "'${JAVA_HOME}' is not a directory"
exit 1
fi
if [ ! -x "${JAVA_HOME}/bin/java" ]; then
error "Could not find an executable binary at '${JAVA_HOME}/bin/java'"
exit 1
fi
local version=$(${JAVA_HOME}/bin/java -version 2>&1)
local vnum=$(echo "${version}" | \
grep -e ^java -e ^openjdk |
head -n 1 | \
sed -e 's/^[^0-9]*\(1\.\)*\([1-9][0-9]*\).*/\2/' )
if [ "${vnum:-0}" -lt "8" ]; then
error "JDK 8 or newer is required to build jtreg"
exit 1
fi
}
setup_java_home
sanity_check_java_home
export JAVA_HOME
info "JAVA_HOME: ${JAVA_HOME}"
#----- Ant -----
setup_ant
info "ANT: ${ANT}"
#----- Ant jar -----
setup_ant_jar() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${ANT_JAR:-}" ]; then
return
fi
if [ -z "${ANT_JAR_URL:-}" ]; then
if [ -n "${ANT_JAR_URL_BASE:-}" ]; then
if [ -z "${ANT_JAR_VERSION:-}" ]; then
error "ANT_JAR_VERSION not set"
exit 1
fi
ANT_JAR_URL="${ANT_JAR_URL_BASE}/org/apache/ant/ant/${ANT_JAR_VERSION}/ant-${ANT_JAR_VERSION}.jar"
fi
fi
local ANT_JAR_DEPS_DIR="${DEPS_DIR}/ant-jar"
if [ -n "${ANT_JAR_URL:-}" ]; then
ANT_JAR="${ANT_JAR_DEPS_DIR}/$(basename ${ANT_JAR_URL})"
download_and_checksum "${ANT_JAR_URL}" "${ANT_JAR}" "${ANT_JAR_CHECKSUM}"
return
fi
error "None of ANT_JAR, ANT_JAR_URL or ANT_JAR_URL_BASE are set"
exit 1
}
setup_ant_jar
info "ANT_JAR: ${ANT_JAR}"
#----- JT Harness -----
setup_jtharness_javatest_jar() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JTHARNESS_JAVATEST_JAR:-}" ]; then
return
fi
if [ -z "${JTHARNESS_ARCHIVE_URL:-}" ]; then
if [ -n "${JTHARNESS_ARCHIVE_URL_BASE:-}" ]; then
JTHARNESS_ARCHIVE_URL="${JTHARNESS_ARCHIVE_URL_BASE}/${JTHARNESS_VERSION}/${JTHARNESS_BUILD_NUMBER}/${JTHARNESS_FILE}"
fi
fi
local JTHARNESS_DEPS_DIR="${DEPS_DIR}/jtharness"
if [ -n "${JTHARNESS_ARCHIVE_URL:-}" ]; then
local JTHARNESS_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${JTHARNESS_ARCHIVE_URL}")"
get_archive "${JTHARNESS_ARCHIVE_URL}" "${JTHARNESS_LOCAL_ARCHIVE_FILE}" "${JTHARNESS_DEPS_DIR}" "${JTHARNESS_ARCHIVE_CHECKSUM}"
JTHARNESS_JAVATEST_JAR="$(find "${JTHARNESS_DEPS_DIR}" -path '*/lib/javatest.jar')"
JTHARNESS_LICENSE="$(dirname "${JTHARNESS_JAVATEST_JAR}")/../legal/license.txt"
JTHARNESS_COPYRIGHT="$(dirname "${JTHARNESS_JAVATEST_JAR}")/../legal/copyright.txt"
return
fi
info "None of JTHARNESS_JAVATEST_JAR, JTHARNESS_ARCHIVE_URL or JTHARNESS_ARCHIVE_URL_BASE are set; building from source"
export JTHARNESS_BUILD_RESULTS_FILE="${DEPS_DIR}/jtharness.results"
(
export BUILD_DIR="${JTHARNESS_DEPS_DIR}"
export BUILD_RESULTS_FILE="${JTHARNESS_BUILD_RESULTS_FILE}"
export JTHARNESS_SRC_TAG="${JTHARNESS_SRC_TAG}"
export JTHARNESS_SRC_ARCHIVE_CHECKSUM="${JTHARNESS_SRC_ARCHIVE_CHECKSUM}"
export ANT="${ANT}"
bash "${mydir}/build-support/jtharness/build.sh"
)
ret=$?
if [ ! $ret = 0 ]; then
exit ${ret}
fi
. "${JTHARNESS_BUILD_RESULTS_FILE}"
}
setup_jtharness_javatest_jar
info "JTHARNESS_JAVATEST_JAR: ${JTHARNESS_JAVATEST_JAR}"
#----- JT Harness License and Copyright -----
setup_jtharness_license_and_copyright() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JTHARNESS_LICENSE:-}" -a -n "${JTHARNESS_COPYRIGHT:-}" ]; then
return
fi
if [ -z "${JTHARNESS_SRC:-}" ]; then
local JTHARNESS_SRC_DEPS_DIR="${DEPS_DIR}/jtharness-src"
local JTHARNESS_LOCAL_SRC_ARCHIVE="${JTHARNESS_SRC_DEPS_DIR}/source.zip"
get_archive "${CODE_TOOLS_URL_BASE}/jtharness/archive/${JTHARNESS_SRC_VERSION}.zip" "${JTHARNESS_LOCAL_SRC_ARCHIVE}" "${JTHARNESS_SRC_DEPS_DIR}" "${JTHARNESS_SRC_ARCHIVE_CHECKSUM}"
JTHARNESS_SRC="${JTHARNESS_SRC_DEPS_DIR}/jtharness-${JTHARNESS_SRC_VERSION}"
fi
JTHARNESS_LICENSE="${JTHARNESS_SRC}/legal/license.txt"
JTHARNESS_COPYRIGHT="${JTHARNESS_SRC}/legal/copyright.txt"
}
setup_jtharness_license_and_copyright
info "JTHARNESS_LICENSE: ${JTHARNESS_LICENSE}"
info "JTHARNESS_COPYRIGHT: ${JTHARNESS_COPYRIGHT}"
#----- JCov -----
setup_jcov() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JCOV_JAR:-}" -a -n "${JCOV_NETWORK_SAVER_JAR:-}" ]; then
return
fi
if [ -z "${JCOV_ARCHIVE_URL:-}" ]; then
if [ -n "${JCOV_ARCHIVE_URL_BASE:-}" ]; then
JCOV_ARCHIVE_URL="${JCOV_ARCHIVE_URL_BASE}/${JCOV_VERSION}/${JCOV_BUILD_NUMBER}/${JCOV_FILE}"
fi
fi
local JCOV_DEPS_DIR="${DEPS_DIR}/jcov"
if [ -n "${JTHARNESS_ARCHIVE_URL:-}" ]; then
local JCOV_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${JCOV_ARCHIVE_URL}")"
get_archive "${JCOV_ARCHIVE_URL}" "${JCOV_LOCAL_ARCHIVE_FILE}" "${JCOV_DEPS_DIR}" "${JCOV_ARCHIVE_CHECKSUM}"
JCOV_JAR="${JCOV_DEPS_DIR}/jcov_${JCOV_VERSION}/lib/jcov.jar"
JCOV_NETWORK_SAVER_JAR="${JCOV_DEPS_DIR}/jcov_${JCOV_VERSION}/lib/jcov_network_saver.jar"
return
fi
info "None of JCOV_JAR, JCOV_ARCHIVE_URL or JCOV_ARCHIVE_URL_BASE are set; building from source"
export JCOV_BUILD_RESULTS_FILE="${DEPS_DIR}/jcov.results"
(
export BUILD_DIR="${JCOV_DEPS_DIR}"
export BUILD_RESULTS_FILE="${JCOV_BUILD_RESULTS_FILE}"
export JCOV_SRC_TAG="${JCOV_SRC_TAG}"
export JCOV_SRC_ARCHIVE_CHECKSUM="${JCOV_SRC_ARCHIVE_CHECKSUM}"
export ANT="${ANT}"
export JTHARNESS_JAVATEST_JAR="${JTHARNESS_JAVATEST_JAR}"
bash "${mydir}/build-support/jcov/build.sh"
)
ret=$?
if [ ! $ret = 0 ]; then
exit ${ret}
fi
. "${JCOV_BUILD_RESULTS_FILE}"
}
setup_jcov
info "JCOV_JAR: ${JCOV_JAR}"
info "JCOV_NETWORK_SAVER_JAR: ${JCOV_NETWORK_SAVER_JAR}"
#----- JCov License -----
# TODO: File issue to include LICENSE in the jcov binary bundle
setup_jcov_license() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JCOV_LICENSE:-}" ]; then
return
fi
if [ -z "${JCOV_SRC:-}" ]; then
local JCOV_SRC_DEPS_DIR="${DEPS_DIR}/jcov-src"
local JCOV_LOCAL_SRC_ARCHIVE_FILE="${JCOV_SRC_DEPS_DIR}/source.zip"
get_archive "${CODE_TOOLS_URL_BASE}/jcov/archive/${JCOV_SRC_TAG}.zip" "${JCOV_LOCAL_SRC_ARCHIVE_FILE}" "${JCOV_SRC_DEPS_DIR}" "${JCOV_SRC_ARCHIVE_CHECKSUM}"
JCOV_SRC="${JCOV_SRC_DEPS_DIR}/jcov-${JCOV_SRC_TAG}"
fi
JCOV_LICENSE="${JCOV_SRC}/LICENSE"
}
setup_jcov_license
info "JCOV_LICENSE: ${JCOV_LICENSE}"
#----- AsmTools -----
setup_asmtools() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${ASMTOOLS_JAR:-}" -a -n "${ASMTOOLS_LICENSE:-}" ]; then
return
fi
if [ -z "${ASMTOOLS_ARCHIVE_URL:-}" ]; then
if [ -n "${ASMTOOLS_ARCHIVE_URL_BASE:-}" ]; then
if [ -z "${ASMTOOLS_VERSION:-}" ]; then
error "ASMTOOLS_VERSION not set"
exit 1
fi
if [ -z "${ASMTOOLS_BUILD_NUMBER:-}" ]; then
error "ASMTOOLS_BUILD_NUMBER not set"
exit 1
fi
if [ -z "${ASMTOOLS_FILE:-}" ]; then
error "ASMTOOLS_FILE not set"
exit 1
fi
ASMTOOLS_ARCHIVE_URL="${ASMTOOLS_ARCHIVE_URL_BASE}/${ASMTOOLS_VERSION}/${ASMTOOLS_BUILD_NUMBER}/${ASMTOOLS_FILE}"
fi
fi
local ASMTOOLS_DEPS_DIR="${DEPS_DIR}/asmtools"
if [ -n "${ASMTOOLS_ARCHIVE_URL:-}" ]; then
local ASMTOOLS_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${ASMTOOLS_ARCHIVE_URL}")"
get_archive "${ASMTOOLS_ARCHIVE_URL}" "${ASMTOOLS_LOCAL_ARCHIVE_FILE}" "${ASMTOOLS_DEPS_DIR}" "${ASMTOOLS_ARCHIVE_CHECKSUM}"
ASMTOOLS_JAR="$(find "${ASMTOOLS_DEPS_DIR}" -name asmtools.jar)"
ASMTOOLS_LICENSE="$(dirname "${ASMTOOLS_JAR}")/../LICENSE"
return
fi
info "None of ASMTOOLS_JAR, ASMTOOLS_ARCHIVE_URL or ASMTOOLS_ARCHIVE_URL_BASE are set; building from source"
export ASMTOOLS_BUILD_RESULTS_FILE="${DEPS_DIR}/asmtools.results"
(
export BUILD_DIR="${ASMTOOLS_DEPS_DIR}"
export BUILD_RESULTS_FILE="${ASMTOOLS_BUILD_RESULTS_FILE}"
export ANT="${ANT}"
export ASMTOOLS_SRC_TAG="${ASMTOOLS_SRC_TAG}"
bash "${mydir}/build-support/asmtools/build.sh"
)
ret=$?
if [ ! $ret = 0 ]; then
exit ${ret}
fi
. "${ASMTOOLS_BUILD_RESULTS_FILE}"
}
setup_asmtools
info "ASMTOOLS_JAR: ${ASMTOOLS_JAR}"
info "ASMTOOLS_LICENSE: ${ASMTOOLS_LICENSE}"
#----- JUnit -----
setup_junit() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JUNIT_JAR:-}" ]; then
return
fi
if [ -z "${JUNIT_JAR_URL:-}" ]; then
if [ -n "${JUNIT_JAR_URL_BASE:-}" ]; then
JUNIT_JAR_URL="${JUNIT_JAR_URL_BASE}/junit/junit/${JUNIT_VERSION}/junit-${JUNIT_VERSION}.jar"
fi
fi
local JUNIT_DEPS_DIR="${DEPS_DIR}/junit"
if [ -n "${JUNIT_JAR_URL:-}" ]; then
JUNIT_JAR="${JUNIT_DEPS_DIR}/$(basename ${JUNIT_JAR_URL})"
download_and_checksum "${JUNIT_JAR_URL}" "${JUNIT_JAR}" "${JUNIT_JAR_CHECKSUM}"
return
fi
error "None of JUNIT_JAR, JUNIT_JAR_URL or JUNIT_JAR_URL_BASE is set"
exit 1
}
setup_junit
info "JUNIT_JAR ${JUNIT_JAR}"
#----- JUnit license -----
setup_junit_license() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JUNIT_LICENSE:-}" ]; then
return
fi
local JUNIT_LICENSE_DEPS_DIR="${DEPS_DIR}/junit-license"
"${UNZIP_CMD}" ${UNZIP_OPTIONS} "${JUNIT_JAR}" ${JUNIT_LICENSE_FILE} -d "${JUNIT_LICENSE_DEPS_DIR}"
JUNIT_LICENSE="${JUNIT_LICENSE_DEPS_DIR}/${JUNIT_LICENSE_FILE}"
}
setup_junit_license
info "JUNIT_LICENSE: ${JUNIT_LICENSE}"
#----- TestNG -----
setup_testng() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${TESTNG_JAR:-}" ]; then
return
fi
if [ -z "${TESTNG_JAR_URL:-}" ]; then
if [ -n "${TESTNG_JAR_URL_BASE:-}" ]; then
TESTNG_JAR_URL="${TESTNG_JAR_URL_BASE}/org/testng/testng/${TESTNG_VERSION}/testng-${TESTNG_VERSION}.jar"
fi
fi
local TESTNG_DEPS_DIR="${DEPS_DIR}/testng"
if [ -n "${TESTNG_JAR_URL:-}" ]; then
TESTNG_JAR="${TESTNG_DEPS_DIR}/$(basename "${TESTNG_JAR_URL}")"
download_and_checksum "${TESTNG_JAR_URL}" "${TESTNG_JAR}" "${TESTNG_JAR_CHECKSUM}"
return
fi
error "None of TESTNG_JAR, TESTNG_JAR_URL or TESTNG_JAR_URL_BASE are set"
exit 1
}
setup_testng
info "TESTNG_JAR: ${TESTNG_JAR}"
#----- TestNG License -----
setup_testng_license() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${TESTNG_LICENSE:-}" ]; then
return
fi
local TESTNG_LICENSE_DEPS_DIR="${DEPS_DIR}/testng-license"
TESTNG_LICENSE="${TESTNG_LICENSE_DEPS_DIR}/LICENSE.txt"
download_and_checksum "https://raw.githubusercontent.com/cbeust/testng/${TESTNG_LICENSE_VERSION}/LICENSE.txt" "${TESTNG_LICENSE}" "${TESTNG_LICENSE_CHECKSUM}"
}
setup_testng_license
info "TESTNG_LICENSE: ${TESTNG_LICENSE}"
#----- JCommander (required by TestNG) -----
setup_jcommander() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${JCOMMANDER_JAR:-}" ]; then
return
fi
if [ -z "${JCOMMANDER_JAR_URL:-}" ]; then
if [ -n "${JCOMMANDER_JAR_URL_BASE:-}" ]; then
JCOMMANDER_JAR_URL="${JCOMMANDER_JAR_URL_BASE}/com/beust/jcommander/${JCOMMANDER_VERSION}/jcommander-${JCOMMANDER_VERSION}.jar"
fi
fi
local JCOMMANDER_DEPS_DIR="${DEPS_DIR}/jcommander"
if [ -n "${JCOMMANDER_JAR_URL:-}" ]; then
JCOMMANDER_JAR="${JCOMMANDER_DEPS_DIR}/$(basename "${JCOMMANDER_JAR_URL}")"
download_and_checksum "${JCOMMANDER_JAR_URL}" "${JCOMMANDER_JAR}" "${JCOMMANDER_JAR_CHECKSUM}"
return
fi
error "None of JCOMMANDER_JAR, JCOMMANDER_JAR_URL or JCOMMANDER_JAR_URL_BASE are set"
exit 1
}
setup_jcommander
info "JCOMMANDER_JAR: ${JCOMMANDER_JAR}"
#----- Google Guice (required by TestNG) -----
setup_google_guice() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${GOOGLE_GUICE_JAR:-}" ]; then
return
fi
if [ -z "${GOOGLE_GUICE_JAR_URL:-}" ]; then
if [ -n "${GOOGLE_GUICE_JAR_URL_BASE:-}" ]; then
GOOGLE_GUICE_JAR_URL="${GOOGLE_GUICE_JAR_URL_BASE}/com/google/inject/guice/${GOOGLE_GUICE_VERSION}/guice-${GOOGLE_GUICE_VERSION}.jar"
fi
fi
local GOOGLE_GUICE_DEPS_DIR="${DEPS_DIR}/guice"
if [ -n "${GOOGLE_GUICE_JAR_URL:-}" ]; then
GOOGLE_GUICE_JAR="${GOOGLE_GUICE_DEPS_DIR}/$(basename "${GOOGLE_GUICE_JAR_URL}")"
download_and_checksum "${GOOGLE_GUICE_JAR_URL}" "${GOOGLE_GUICE_JAR}" "${GOOGLE_GUICE_JAR_CHECKSUM}"
return
fi
error "None of GOOGLE_GUICE_JAR, GOOGLE_GUICE_JAR_URL or GOOGLE_GUICE_JAR_URL_BASE are set"
exit 1
}
setup_google_guice
info "GOOGLE_GUICE_JAR: ${GOOGLE_GUICE_JAR}"
#----- HamCrest Core (required by JUnit) -----
setup_hamcrest() {
check_arguments "${FUNCNAME}" 0 $#
if [ -n "${HAMCREST_JAR:-}" ]; then
return
fi
if [ -z "${HAMCREST_JAR_URL:-}" ]; then
if [ -n "${HAMCREST_JAR_URL_BASE:-}" ]; then
HAMCREST_JAR_URL="${HAMCREST_JAR_URL_BASE}/org/hamcrest/hamcrest/${HAMCREST_VERSION}/hamcrest-${HAMCREST_VERSION}.jar"
fi
fi
local HAMCREST_DEPS_DIR="${DEPS_DIR}/hamcrest"
if [ -n "${HAMCREST_JAR_URL:-}" ]; then
HAMCREST_JAR="${HAMCREST_DEPS_DIR}/$(basename "${HAMCREST_JAR_URL}")"
download_and_checksum "${HAMCREST_JAR_URL}" "${HAMCREST_JAR}" "${HAMCREST_JAR_CHECKSUM}"
return
fi
error "None of HAMCREST_JAR, HAMCREST_JAR_URL or HAMCREST_JAR_URL_BASE are set"
exit 1
}
setup_hamcrest
info "HAMCREST_JAR: ${HAMCREST_JAR}"
##
# The build version typically comes from the version-numbers file;
# It is expected that the build number will typically come from an external CI system.
#
setup_build_info() {
check_arguments "${FUNCNAME}" 0 $#
JTREG_BUILD_MILESTONE="${JTREG_BUILD_MILESTONE:-dev}"
JTREG_BUILD_NUMBER="${JTREG_BUILD_NUMBER:-0}"
if [ -z "${JTREG_VERSION_STRING:-}" ]; then
MILESTONE=""
if [ -n "${JTREG_BUILD_MILESTONE}" ]; then
MILESTONE="-${JTREG_BUILD_MILESTONE}"
fi
JTREG_VERSION_STRING="${JTREG_VERSION}${MILESTONE}+${JTREG_BUILD_NUMBER}"
fi
}
setup_build_info
info "JTREG_VERSION: ${JTREG_VERSION}"
info "JTREG_BUILD_NUMBER: ${JTREG_BUILD_NUMBER}"
info "JTREG_BUILD_MILESTONE: ${JTREG_BUILD_MILESTONE}"
check_file() {
check_arguments "${FUNCNAME}" 1 $#
info "Checking $1"
if [ ! -f "$1" ]; then
error "Missing: $1"
exit 1
fi
}
check_dir() {
check_arguments "${FUNCNAME}" 1 $#
info "Checking $1"
if [ ! -d "$1" ]; then
error "Missing: $1"
exit 1
fi
}
check_file "${ANT}"
check_file "${ANT_JAR}"
check_file "${ASMTOOLS_JAR}"
check_file "${ASMTOOLS_LICENSE}"
check_file "${GOOGLE_GUICE_JAR}"
check_file "${HAMCREST_JAR}"
check_dir "${JAVA_HOME}"
check_file "${JCOMMANDER_JAR}"
check_file "${JCOV_JAR}"
check_file "${JCOV_LICENSE}"
check_file "${JCOV_NETWORK_SAVER_JAR}"
check_file "${JTHARNESS_COPYRIGHT}"
check_file "${JTHARNESS_JAVATEST_JAR}"
check_file "${JTHARNESS_LICENSE}"
check_file "${JUNIT_JAR}"
check_file "${JUNIT_LICENSE}"
check_file "${TESTNG_JAR}"
check_file "${TESTNG_LICENSE}"
if [ -n "${SKIP_MAKE:-}" ]; then
exit
fi
# Build jtreg
cd "${ROOT}/make"
make ANT="${ANT}" \
ANT_JAR="$(mixed_path "${ANT_JAR}")" \
ASMTOOLS_JAR="${ASMTOOLS_JAR}" \
ASMTOOLS_LICENSE="${ASMTOOLS_LICENSE}" \
BUILDDIR="${BUILD_DIR}" \
BUILD_MILESTONE="${JTREG_BUILD_MILESTONE}" \
BUILD_NUMBER="${JTREG_BUILD_NUMBER}" \
BUILD_VERSION="${JTREG_VERSION}" \
BUILD_VERSION_STRING="${JTREG_VERSION_STRING}" \
GOOGLE_GUICE_JAR="${GOOGLE_GUICE_JAR}" \
HAMCREST_JAR="${HAMCREST_JAR}" \
JAVATEST_JAR="$(mixed_path "${JTHARNESS_JAVATEST_JAR}")" \
JCOMMANDER_JAR="${JCOMMANDER_JAR}" \
JCOV_JAR="${JCOV_JAR}" \
JCOV_LICENSE="${JCOV_LICENSE}" \
JCOV_NETWORK_SAVER_JAR="${JCOV_NETWORK_SAVER_JAR}" \
JDKHOME="$(mixed_path ${JAVA_HOME})" \
JTHARNESS_COPYRIGHT="${JTHARNESS_COPYRIGHT}" \
JTHARNESS_LICENSE="${JTHARNESS_LICENSE}" \
JUNIT_JAR="$(mixed_path "${JUNIT_JAR}")" \
JUNIT_LICENSE="${JUNIT_LICENSE}" \
TESTNG_JAR="$(mixed_path "${TESTNG_JAR}")" \
TESTNG_LICENSE="${TESTNG_LICENSE}" \
${MAKE_ARGS:-}