#!/bin/bash
WORKSPACE=/build
. /scripts/common/common.sh

set -euo pipefail
set -x
set -v

CMAKE_EXTRA=

case $CC in
at*)
  ls -la /opt
  P=$(echo /opt/${CC/-/-*}/bin)
  CC=${P}/gcc
  CXX=${P}/g++
  AR=${P}/ar
  export PATH=${P}:${PATH}
  CMAKE_EXTRA=-DCMAKE_AR=${AR}
  CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
  export CFLAGS="-m64 -O3 -g -mtune=native"
  # missing CC or CXX
  [ ! -x ${CXX} ] && exit 1
  [ ! -x ${CC} ] && exit 1
  ;;
clang*)
  if [ $CC == clang-master ]
  then
    export PATH=/compiler/bin:${PATH}
    CC=clang
    CXX=clang++
  else
    CXX=${CC%-*}++${CC#clang}
  fi
  # MDEV-5944
  CMAKE_EXTRA="${CMAKE_EXTRA} -DWITHOUT_OQGRAPH_STORAGE_ENGINE=1"
  CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
  export CFLAGS="-O3 -g -mtune=native"
  ;;
gcc*)
  if [[ $CC =~ gcc.*(branch|release|master) ]]
  then
    # MDEV-8941 - compile error in connect storage engine
    CMAKE_EXTRA="${CMAKE_EXTRA} -DWITHOUT_CONNECT_STORAGE_ENGINE=1"
    export PATH=/compiler/bin:${PATH}
    pushd /compiler/bin
    for CC in *gcc
    do
      echo COMPILER=$CC
    done
    popd
    AR=${CC/gcc/ar}
    arch=$(uname -m)
    # libaio packages are installed in /usr/lib/${arch}-linux-gnu
    # libssl has include packages in /usr/include/${arch}-linux-gnu
    if [ "$arch" == 'ppc64le' ]; then
       arch=powerpc64le
    fi
    export LDFLAGS=-L/usr/lib/${arch}-linux-gnu
    export CFLAGS="-I/usr/include -I/usr/include/${arch}-linux-gnu -O3 -g -mtune=native"
  else
    export CFLAGS="-O3 -g -mtune=native"
  fi
  CC=${CC}
  CXX=${CC/cc/++}
  CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
  ;;
xlc*)
  CC=/usr/bin/xlc_r
  CXX=/usr/bin/xlC_r
  export CFLAGS="-O3 -g"
  ;;
*)
  which ${CC} || CC=${CC%-*}
  CMAKE_EXTRA="${CMAKE_EXTRA} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
  ;;
esac

if [ $(uname -m) == ppc64le ]; then
  # https://jira.mariadb.org/browse/MDEV-10617
  CMAKE_EXTRA="${CMAKE_EXTRA} -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 -DWITHOUT_FEDERATEDX_STORAGE_ENGINE=1"
fi


case ${FLAVOUR} in
  mysql*)
    # fallthough
    ;&
  linux-on-ibm-power*)
    # fallthough
    ;&
  percona*)
    case ${FLAVOUR_BRANCH} in
    8.0*)
       CMAKE_EXTRA="${CMAKE_EXTRA} -DWITH_BOOST=/build/boost_1_63_0.tar.gz"
       ;;
    5.7*)
       CMAKE_EXTRA="${CMAKE_EXTRA} -DWITH_BOOST=/build/boost_1_59_0.tar.gz"
       ;;
    esac
    ;;
  facebook*)
    #  work around for https://github.com/facebook/mysql-5.6/issues/346
    # avoid error: object directory /var/lib/jenkins/git/mysql-db-variants.git/objects does not exist; check .git/objects/info/alternates.
    # fatal: bad object HEAD
    CMAKE_EXTRA="${CMAKE_EXTRA} -DMYSQL_MAINTAINER_MODE=0 \
                -DMYSQL_GITHASH=${GIT_COMMIT:-empty} \
                -DMYSQL_GITDATE=empty \
                -DROCKSDB_GITHASH=empty \
                -DROCKSDB_GITDATE=empty"

    ;;
  maria*)
    CMAKE_EXTRA="${CMAKE_EXTRA} -DWITHOUT_TOKUDB_STORAGE_ENGINE=1"
    ;;
esac

CPUS=$(nproc)

mkdir -p build
cd build
export CXXFLAGS=${CFLAGS}
for JAVA_HOME in /usr/lib/jvm/java-8-openjdk-*
do
	echo JAVA_HOME=$JAVA_HOME
done
export JAVA_HOME

DEST=/mysql/${FLAVOUR}-${BUILD_TYPE}-${FLAVOUR_BRANCH}

export CCACHE_DIR=/ccache

cmake /source -DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Release} \
     -DWITH_PROTOBUF=system \
     -DWITH_NDB_JAVA=NO \
     -DCMAKE_C_COMPILER="${CC:-gcc}" -DCMAKE_CXX_COMPILER="${CXX:-g++}" \
     -DCMAKE_C_FLAGS_RELWITHDEBINFO="${CFLAGS}"  -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="${CXXFLAGS}" \
     -DCMAKE_C_FLAGS="${CFLAGS}" -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \
     -DWITH_SSL=system \
     -DCMAKE_INSTALL_PREFIX="${DEST}" \
     ${CMAKE_EXTRA} || cat /build/build/CMakeFiles/CMakeOutput.log
[ -f /build/build/CMakeFiles/CMakeError.log ] && ( cat /build/build/CMakeFiles/CMakeError.log ; cat /build/build/CMakeCache.txt )

if [ "$CC" == clang ]
then
  makeWithClangAnalyzer . "/artifacts/clang-analyzer-results"  -j"${CPUS}" --output-sync=target VERBOSE=1
  runCppcheck . "${WORKSPACE}/cppcheck.xml"
  cpp_check_job_id=$!
else
  make -j"${CPUS}" --output-sync=target VERBOSE=1
  cpp_check_job_id=
fi

make DESTDIR=~/install  -j"${CPUS}" --output-sync=target install
pushd ~/install
# 800M or so:
[ -f mysql/*/lib/libmysqld.a ] && rm mysql/*/lib/libmysqld.a
find . -path ./"${DEST}"/mysql-test -prune -o -print| cpio --create | pbzip2 -c > /artifacts/mysql.cpio.bz2

popd

[ -n "$cpp_check_job_id" ] && wait "$cpp_check_job_id" || true

/scripts/func_test.sh
