#!/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.6.1-201609071200/eclipse-SDK-4.6.1-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}/${datetimestamp} -DartifactRepoDirectory=${REPO_ROOT}/releases/${release}/${datetimestamp} -Dp2StatsURI=http://download.eclipse.org/stats/releases/${release} -Dp2ArtifactRepositoryName=${release}/${datetimestamp}"

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

