#!/bin/sh

# NOTE: this is a simple script wrapper around the cmake command line tools,
# for those used to the autotools configure script conventions

if ! command -v cmake > /dev/null 2>&1; then
  echo "ERROR: You need the 'cmake' program to configure the Hatari build process."
  echo "Please install 'cmake' first, then try again."
  exit 1
fi

print_help()
{
  echo "This is a simple configure script wrapper around cmake build system."
  echo "Parameters are:"
  echo "  --prefix=<path>            Set the install prefix to path"
  echo "  --enable-asan              Enable address sanitizer debug build"
  echo "  --enable-debug             Enable debug (non-optimized) build"
  echo "  --disable-dsp              Disable DSP emulation for Falcon mode."
  echo "  --disable-tracing          Disable tracing messages for debugging"
  echo "  --disable-osx-bundle       Disable application bundling on macOS"
  echo "  --enable-ubsan             Enable undefined behavior sanitizer debug build"
  echo "  --enable-werror            Use -Werror flag to stop on compiler warnings"
  echo "  --cross-compile-win64_32   Build the 32 bit Windows version using mingw-w64"
  echo "  --cross-compile-win64_64   Build the 64 bit Windows version using mingw-w64"
  echo
  echo "Please run cmake directly for full control over the build."
  echo
}

cmake_args=""
build_type="Release"

while [ $# -gt 0 ]
do
  preq=${1%=*}			# get part before =
  case $preq
  in
    --help)
      print_help
      exit 0
    ;;
    --prefix)
      prefix=${1##*=}		# get part after =
      cmake_args="$cmake_args -DCMAKE_INSTALL_PREFIX:PATH=$prefix"
    ;;
    --enable-asan)
      cmake_args="$cmake_args -DENABLE_ASAN:BOOL=1"
    ;;
    --disable-asan)
      cmake_args="$cmake_args -DENABLE_ASAN:BOOL=0"
    ;;
    --enable-debug)
      build_type="Debug"
      cmake_args="$cmake_args -DCMAKE_BUILD_TYPE:STRING=Debug"
    ;;
    --disable-debug)
      build_type="Release"
      cmake_args="$cmake_args -DCMAKE_BUILD_TYPE:STRING=Release"
    ;;
    --enable-dsp)
      cmake_args="$cmake_args -DENABLE_DSP_EMU:BOOL=1"
    ;;
    --disable-dsp)
      cmake_args="$cmake_args -DENABLE_DSP_EMU:BOOL=0"
    ;;
    --enable-tracing)
      cmake_args="$cmake_args -DENABLE_TRACING:BOOL=1"
    ;;
    --disable-tracing)
      cmake_args="$cmake_args -DENABLE_TRACING:BOOL=0"
    ;;
    --enable-osx-bundle)
      cmake_args="$cmake_args -DENABLE_OSX_BUNDLE:BOOL=1"
    ;;
    --disable-osx-bundle)
      cmake_args="$cmake_args -DENABLE_OSX_BUNDLE:BOOL=0"
    ;;
    --enable-ubsan)
      cmake_args="$cmake_args -DENABLE_UBSAN:BOOL=1"
    ;;
    --disable-ubsan)
      cmake_args="$cmake_args -DENABLE_UBSAN:BOOL=0"
    ;;
    --enable-werror)
      cmake_args="$cmake_args -DENABLE_WERROR:BOOL=1"
    ;;
    --disable-werror)
      cmake_args="$cmake_args -DENABLE_WERROR:BOOL=0"
    ;;
    --cross-compile-win64_32)
      cmake_args="$cmake_args -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-mingw32-win64_32.cmake"
    ;;
    --cross-compile-win64_64)
      cmake_args="$cmake_args -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-mingw32-win64_64.cmake"
    ;;
    *)
      echo "Invalid argument: $preq"
      echo "Run $0 --help for a list of valid parameters."
      exit 2
    ;;
  esac
  shift 1
done

# remove previous cmake's cache
rm -rf CMakeCache.txt CMakeFiles/

if [ -e `dirname $0`/CMakeCache.txt ]; then
    echo "Source directory is not clean, please run 'make distclean' there first."
    exit 1
fi

cmake `dirname $0` $cmake_args || exit 1

echo
echo "Now you must type: make; make install"
echo "to actually build and install the software"
echo
