#!/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=2651a362

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

set -x

PACKAGES="autoconf libtool libxml2-dev pkg-config python3"
# Install the dependencies.
if ! dpkg -s ${PACKAGES} > /dev/null 2>&1 ; then
    sudo apt-get install --yes ${PACKAGES}
fi

# 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
