#!/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=https://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

