#!/bin/bash -e

# Copyright (C) 2019 The Android Open Source Project
#
# Licensed 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.

ELFUTILS_VERSION=elfutils-0.176
ABIGAIL_VERSION=d7ae619f

NUM_CORES=$(cat /proc/cpuinfo | grep -c proc)
BASE_DIR=$(readlink -f $(dirname $0))
OUT_DIR="${BASE_DIR}/abigail-inst/${ABIGAIL_VERSION}"

ELFUTILS_SRC="${BASE_DIR}/elfutils-src"
LIBABIGAIL_SRC="${BASE_DIR}/abigail-src"

# Check output dir.
if [ -e "${OUT_DIR}" ]; then
  echo "WARN: ${OUT_DIR} exists. Press enter to continue or Ctrl-C to abort."
  read
fi

PACKAGES="autoconf libtool libxml2-dev pkg-config python3"
# Install the dependencies.
if ! ( hash dpkg 2>/dev/null ); then
    echo "WARN: not running on a Debian compatible system!"
    echo "      Please be sure you have the required packages installed on"
    echo "      your system before continuing."
    echo ""
    echo "      The list of required packages is, at the minimum:"
    echo "        ${PACKAGES}"
    echo "      but some distributions may require more."
    echo "      You are on your own here, be careful."
    echo ""
    echo "Press enter to continue or Ctrl-C to abort."
    read
elif ! dpkg -s ${PACKAGES} > /dev/null 2>&1 ; then
    set -x
    sudo apt-get install --yes ${PACKAGES}
fi
set -x

# Acquire elfutils sources
if [ ! -d "${ELFUTILS_SRC}" ]; then
  git clone git://sourceware.org/git/elfutils.git "${ELFUTILS_SRC}"
else
  git -C ${ELFUTILS_SRC} fetch
fi

git -C ${ELFUTILS_SRC} checkout ${ELFUTILS_VERSION}

# Build elfutils
pushd "${ELFUTILS_SRC}"
  #git clean -dfx
  autoreconf -i --force
  mkdir -p build/
  pushd build/
    ../configure --prefix="${OUT_DIR}" --enable-maintainer-mode
    make -j${NUM_CORES}
    make -j${NUM_CORES} install
  popd
popd

# Acquire libabigail sources
if [ ! -d "${LIBABIGAIL_SRC}" ]; then
  git clone git://sourceware.org/git/libabigail.git "${LIBABIGAIL_SRC}"
else
  git -C ${LIBABIGAIL_SRC} fetch
fi

git -C ${LIBABIGAIL_SRC} checkout ${ABIGAIL_VERSION}

# Build libabigail
pushd "${LIBABIGAIL_SRC}"
  #git clean -dfx
  autoreconf -i --force
  mkdir -p build/
  pushd build/
    ../configure --prefix="${OUT_DIR}"           \
                 --enable-cxx11=yes              \
                 --disable-shared                \
                 "CPPFLAGS=-I${OUT_DIR}/include" \
                 "LDFLAGS=-L${OUT_DIR}/lib"
    make -j${NUM_CORES}
    make -j${NUM_CORES} install
  popd
popd

set +x

echo
echo "Note: Export following environment before running the executables:"
echo
echo "export PATH=\"${OUT_DIR}/bin:\${PATH}\""
echo "export LD_LIBRARY_PATH=\"${OUT_DIR}/lib:${OUT_DIR}/lib/elfutils:\${LD_LIBRARY_PATH}\""
echo
echo
