#!/bin/sh
#
#  Used to build the Win32/Win64 version of bat
#
#
# Copyright (C) 2000-2020 Kern Sibbald
# License: BSD 2-Clause; see file LICENSE-FOSS
#

normalize_makefile()
{
    local makefile=$1
    local depkgs_mingw=$2

    # Drop host Linux paths if a host qmake leaks them in.
    sed -i s/-lGL// "${makefile}"
    perl -0pi -e "s:-I/usr/[^ ]+::g; s:-L/usr/[^ ]+::g" "${makefile}"

    # Keep the generated Makefile relocatable against \$DEPKGS.
    perl -0pi -e "s:\Q${DEPKGS}/${depkgs_mingw}\E:\\\$\\(DEPKGS\\)/${depkgs_mingw}:g" "${makefile}"
    # Fallback rewrite for host-qmake output that still emits bare Qt paths.
    perl -0pi -e "s:/usr/lib/(Qt[^ /]+)\\.:\\\$\\(DEPKGS\\)/${depkgs_mingw}/lib/lib\\1.a:g; s:/usr/lib/qtmain\\.:\\\$\\(DEPKGS\\)/${depkgs_mingw}/lib/libqtmain.a:g" "${makefile}"

}

prepare_bat_build ()
{
   local version=$1
   local dpkgs_mingw
   local qmake_bin
   if test -d ../win32/release${version}; then

      qmake_bin="${DEPKGS}/${depkgs_mingw}/bin/qmake"
      if ! test -x "${qmake_bin}"; then
        qmake_bin=qmake
      fi

      cp -f ${DEPKGS}/${depkgs_mingw}/bin/Qt5Gui.dll ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/bin/Qt5Core.dll ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/bin/Qt5Network.dll ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/bin/Qt5Widgets.dll ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/lib/libQt5Gui.a ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/lib/libQt5Core.a ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/lib/libQt5Network.a ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/lib/libQt5Widgets.a ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/lib/libqtmain.a ../win32/release${version}
      cp -f ${DEPKGS}/${depkgs_mingw}/bin/platforms/qwindows.dll ../win32/release${version}/

      rm -rf ../win32/release${version}/help
      mkdir ../win32/release${version}/help
      cp -f help/*.html ../win32/release${version}/help/
      cp -f images/status.png ../win32/release${version}/help/
      cp -f images/mail-message-new.png ../win32/release${version}/help/
      "${qmake_bin}" -spec $PWD/win32 -unix -o Makefile.mingw${version} bat.pro.mingw${version}
      normalize_makefile Makefile.mingw${version} "${depkgs_mingw}"

      echo "Make Windows bat"
      make -j3 -f Makefile.mingw${version} $2
      if test -f bat.exe; then
          cp -f bat.exe ../win32/release${version}
      elif test -f release/bat.exe; then
         cp -f release/bat.exe ../win32/release${version}
      else
         cp -f debug/bat.exe ../win32/release${version}
      fi
      rm -f bat.exe release/bat.exe debug/bat.exe
   fi
}

prepare_tray_monitor_build ()
{
    local version=$1
    local qmake_bin

    qmake_bin="${DEPKGS}/${depkgs_mingw}/bin/qmake"
    if ! test -x "${qmake_bin}"; then
      qmake_bin=qmake
    fi

    cd tray-monitor
    "${qmake_bin}" -spec ../win32 -unix -o Makefile.mingw${version} tray-monitor.pro.mingw${version}
    normalize_makefile Makefile.mingw${version} "${depkgs_mingw}"

    echo "Make Windows tray-monitor"
    make -j3 -f Makefile.mingw${version} $2
    if test -f bacula-tray-monitor.exe; then
        cp -f bacula-tray-monitor.exe ../../win32/release${version}
    elif test -f release/bacula-tray-monitor.exe; then
       cp -f release/bacula-tray-monitor.exe ../../win32/release${version}
    else
       cp -f debug/bacula-tray-monitor.exe ../../win32/release${version}
    fi
    rm -f bacula-tray-monitor.exe release/bacula-tray-monitor.exe debug/bacula-tray-monitor.exe
    cd ..
}

readonly BUILD_ARCH="$1"

if [ $BUILD_ARCH -eq 32 ]
then
    export CC=x86_64-mingw32-g++
    export CXX=x86_64-mingw32-g++
    export depkgs_mingw='depkgs-mingw32'
elif [ $BUILD_ARCH -eq 64 ]
then
    export CC=x86_64-w64-mingw32-g++
    export CXX=x86_64-w64-mingw32-g++
    export depkgs_mingw='depkgs-mingw-w64'
else
    echo "wrong version - $BUILD_ARCH'."
    exit 1
fi

rm -f debug/bat.exe
if test -f ../config.h ; then
   mv -f ../config.h ../config.h.orig
fi

prepare_bat_build ${BUILD_ARCH:-64}

if test -e ../config.h.orig ; then
   mv -f ../config.h.orig ../config.h
fi

prepare_tray_monitor_build ${BUILD_ARCH:-64}
