#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -ex

. `dirname $0`/bigtop.bom

./dev/change_scala_version.sh ${SCALA_VERSION%.*}

BUILD_OPTS="-Dscala.version=${SCALA_VERSION} \
            -Dscala.binary.version=${SCALA_VERSION%.*} \
            -Dscala.macros.version=2.1.0 \
            -Dspark.version=${SPARK_VERSION} \
            -Dhadoop.version=${HADOOP_VERSION} \
            -Dhbase.hbase.version=${HBASE_VERSION} \
            -Dhbase.hadoop.version=${HADOOP_VERSION} \
            -Dignite.version=${IGNITE_HADOOP_VERSION} \
            -Dflink.version=${FLINK_VERSION} \
            -Pspark-${SPARK_VERSION%.*} \
            -Pscala-${SCALA_VERSION%.*} \
            -Pr \
            -Pbuild-distr"

if [ "$ZEPPELIN_RUN_TESTS" = "true" ]; then
  BUILD_OPTS="$BUILD_OPTS -DskipTests=false"
else
  BUILD_OPTS="$BUILD_OPTS -DskipTests"
fi

export MAVEN_OPTS="-Xmx1500m -Xms1500m"

# BIGTOP-2742:
# The default zeppelin PIDFILE includes the literal $(hostname) string, which is carried into the init script's pidfile declaration.
# But pidfile does not subshell out to generate the expected string.
# The zeppelin process does indeed start up, but systemctl reports a failure because it's looking for a non-existent pidfile.
#
# Workaround:
#   Remove unnecessary $HOSTNAME from zeppelin-daemon.sh and also make the same adjustment to zeppelin.svc.
# TODO:
#   Request the issue to zeppelin upstream, If accepted, remove this workaround.
sed -i "s/^.*ZEPPELIN_PID=.*$/ZEPPELIN_PID=\"\$\{ZEPPELIN_PID_DIR\}\/zeppelin\-\$\{ZEPPELIN_IDENT_STRING\}\.pid\"/" bin/zeppelin-daemon.sh

mvn $BUILD_OPTS clean package

mkdir -p build/dist
tar -C build/dist --strip-components=1 -xzf zeppelin-distribution/target/zeppelin-*.tar.gz
