#!/usr/bin/env bash -e
###############################################################################
#
# Copyright (C) 2018 
# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# $Id$
#
###############################################################################

#
# Initialisation script to setup the environment variables for this branch
#

# 
# Make sure it is sourced and no one accidentally gave the script execution rights and just executes it.
if [[ "$_" == "${0}" ]]; then
    echo "ERROR: Use this command with '. ' or 'source '"
    sleep 1
    return
fi

# 
if [ -z "${ALTERA_DIR}" ]; then
    echo "== environ variable 'ALTERA_DIR' not set. =="
    echo "should be in your .bashrc file."
    echo "if it is your .bashrc file but not active run bash in your terminal"
    return
fi

# Figure out where this script is located and set environment variables accordingly
export HDL_WORK="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "HDL environment will be setup for" $HDL_WORK

# setup paths to build and config dir if not already defined by the user.
export ARGS_WORK=${HDL_WORK}
export HDL_BUILD_DIR=${HDL_WORK}/build
if [[ ! -d "${HDL_BUILD_DIR}" ]]; then
    echo "make buil dir"
    echo "${HDL_BUILD_DIR}"
    mkdir "${HDL_BUILD_DIR}"
fi

# set hdl_build_quartus dir
export HDL_BUILD_QUARTUS_DIR=${HDL_BUILD_DIR}/quartus
if [[ ! -d "${HDL_BUILD_QUARTUS_DIR}" ]]; then
    echo "make hdl/build/quartus dir"
    echo "${HDL_BUILD_QUARTUS_DIR}"
    mkdir "${HDL_BUILD_QUARTUS_DIR}"
    echo "Do not remove this dir, it is used by modelsim_altera_libs symlink" > ${HDL_BUILD_QUARTUS_DIR}/readme.txt
fi

export MODELSIM_ALTERA_LIBS_DIR=${HDL_BUILD_DIR}/modelsim_altera_libs
if [[ -L "${MODELSIM_ALTERA_LIBS_DIR}" ]] && [[ -e "${MODELSIM_ALTERA_LIBS_DIR}" ]]; then
    echo "${MODELSIM_ALTERA_LIBS_DIR} is a valid symlink"
else
    echo "make a symlink for modelsim_altera_libs dir"
    echo "${MODELSIM_ALTERA_LIBS_DIR}"
    ln -s "${HDL_BUILD_QUARTUS_DIR}" "${MODELSIM_ALTERA_LIBS_DIR}"
fi

# modelsim uses this sim dir for testing
export HDL_IOFILE_SIM_DIR=${HDL_BUILD_DIR}/sim
if [[ ! -d "${HDL_IOFILE_SIM_DIR}" ]]; then
    echo "make sim dir"
    echo "${HDL_IOFILE_SIM_DIR}"
    mkdir "${HDL_IOFILE_SIM_DIR}"
fi
# if sim dir not empty, remove all files and dirs
if [ ! -z "$(ls -A ${HDL_IOFILE_SIM_DIR})" ]; then
    echo "clear sim dir"
    rm -r ${HDL_IOFILE_SIM_DIR}/*
fi

# copy git user_componets.ipx into Altera dir's
for altera_dir in ${ALTERA_DIR}/*; do
    if [[ -d "${altera_dir}" ]] &&  [[ ! -h "${altera_dir}" ]]; then
        echo "copy git hdl_user_components.ipx to ${altera_dir}/ip/altera/user_components.ipx"
        cp ${HDL_WORK}/hdl_user_components.ipx $altera_dir/ip/altera/user_components.ipx
    fi
done

# source also radiohdl, args and vhdl_style tools
. ${GIT}/radiohdl/init_radiohdl.sh
if [[ -d "${HDL_WORK}/../args" ]]; then
    . ${GIT}/args/init_args.sh
fi
if [[ -d "${HDL_WORK}/../vhdlstyle" ]]; then
    . ${GIT}/vhdlstyle/init_vhdl_style.sh
fi
