#!/usr/bin/env bash
#*******************************************************************************
# Copyright (c) 2016 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
#*******************************************************************************

# common variables used in scripts

# It is required to specify a top level directory,
# that will contain all else involved with the promote
export BUILD_HOME=${BUILD_HOME:-${WORKSPACE}}
echo "BUILD_HOME: $BUILD_HOME"

# Java should be configured per machine,
# so this variable point to valid installs.

export JAVA_8_HOME=${JAVA_8_HOME:-/shared/common/jdk1.8.0_x64-latest}

REPO_ROOT=${REPO_ROOT:-/home/data/httpd/download.eclipse.org}

# each machine needs valid path to an appropriate, local Eclipse SDK, for fresh re-installs
FULL_FILENAME=${FULL_FILENAME:-/home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/R-4.8-201806110500/eclipse-platform-4.8-linux-gtk-x86_64.tar.gz}

# ##################################
# typically the remaining variables not have to be
# changed on a local, non-production machine,
# as they just compute variables based on above,
# or provide relatively machine-independent values.

export BUILD_TOOLS_DIR=${BUILD_HOME}/org.eclipse.simrel.tools

export JAVA_HOME=${JAVA_8_HOME}
export JAVA_EXEC_DIR=${JAVA_HOME}/jre/bin
export JAVA_CMD=${JAVA_EXEC_DIR}/java

# remember, the '&' should be uescaped here ... the p2 api (or underlying xml) will escape it.
export devArgs="-Djava.io.tmpdir=${BUILD_HOME}/tmp -Dp2MirrorsURL=http://www.eclipse.org/downloads/download.php?format=xml&file=/releases/${release}/${dirdate} -DartifactRepoDirectory=${REPO_ROOT}/releases/${release}/${dirdate} -Dp2StatsURI=https://download.eclipse.org/stats/releases/${release} -Dp2ArtifactRepositoryName=${release}/${dirdate}"

mkdir -p ${BUILD_HOME}/tmp

ECLIPSE_HOME=${BUILD_HOME}/eclipseInstall

export stagingDirectory="${REPO_ROOT}/staging/${release}"
export releaseDirectory=${REPO_ROOT}/releases/${release}

export ECLIPSE_EXE=${ECLIPSE_HOME}/eclipse/eclipse

