#!/usr/bin/env bash

# Shorthand script for adding/removing llvm subprojects. It has a simpler
# interface than llvm.py, but it calls it to do the actual work.

prog=$(basename $0)
progdir=$(dirname $0)
syntax() {
  echo "Syntax: $prog [clang|lldb|lld|rt|libs|all|none] {+/-}[c|r|k|d|l|a|u|t]"
  echo " no args: List linked projects"
  echo "   clang: Clang"
  echo "    lldb: Clang + lldb"
  echo "     lld: Clang + lld"
  echo "      rt: Clang + compiler-rt"
  echo "    libs: Clang + libcxx + libcxxabi + libunwind"
  echo "     all: Link all projects"
  echo "    none: Unlink all projects"
  echo " {+/-}: enable / disable projects"
  echo "   c Clang"
  echo "   r Compiler-rt"
  echo "   k lld"
  echo "   d lldb"
  echo "   l libcxx"
  echo "   a libcxxabi"
  echo "   u libunwind"
  echo "   t test-suite"
  echo " Long options unlink everything before proceeding. Use the short options for fine-tuning"
}

need_all() {
  need=$1
  clang=$need
  rt=$need
  libcxx=$need
  libcxxabi=$need
  libunwind=$need
  lld=$need
  lldb=$need
  tests=$need
}

llvmtool=$progdir/../scripts/llvm.py

# Grab the environment name from $LLVM_SRC
. llvm-common
verify_env
repos=$LLVM_ROOT/repos
source_dir=$LLVM_SRC
env=$(dirname $source_dir)

# No args, list
if [ "$1" = "" ]; then
  echo "Use $prog -h for options"
  echo
  safe_run python3 $llvmtool projects --source-dir $source_dir
  exit
fi

need_all UNDEF

# See if the first option is one of the long options
opt=$1
case $opt in
  clang)
    need_all OFF
    clang=ON
    shift
    ;;
  lldb)
    need_all OFF
    clang=ON
    lldb=ON
    shift
    ;;
  lld)
    need_all OFF
    clang=ON
    lld=ON
    shift
    ;;
  rt)
    need_all OFF
    clang=ON
    rt=ON
    shift
    ;;
  libs)
    need_all OFF
    clang=ON
    libcxx=ON
    libcxxabi=ON
    libunwind=ON
    shift
    ;;
  all)
    need_all ON
    shift
    ;;
  none)
    need_all OFF
    shift
    ;;
  list)
    safe_run python3 $llvmtool projects --source-dir $source_dir
    exit
    ;;
  -h)
    syntax
    exit
    ;;
esac

# Parse short options, if any
while ! test -z $1; do
  opt=$1

  sign=${opt:0:1}
  flag=ON
  if [ "$sign" = "-" ]; then
    flag=OFF
    opt=${opt:1}
  elif [ "$sign" = "+" ]; then
    opt=${opt:1}
  else
    # Doesn't look like one of our short options
    syntax
    exit
  fi

  case $opt in
    c)
      clang=$flag
      ;;
    r)
      rt=$flag
      ;;
    k)
      lld=$flag
      ;;
    d)
      lldb=$flag
      ;;
    l)
      libcxx=$flag
      ;;
    a)
      libcxxabi=$flag
      ;;
    u)
      libunwind=$flag
      ;;
    t)
      tests=$flag
      ;;
    *)
      syntax
      exit
  esac
  shift
done

add=""
remove=""

update() {
  project="$1"
  flag="$2"

  case $flag in
    ON)
      add="$add $project"
      ;;
    OFF)
      remove="$remove $project"
      ;;
    UNDEF)
      # Don't care
      ;;
  esac
}

# Update links
update "test-suite" $tests
update "lldb" $lldb
update "lld" $lld
update "libunwind" $libunwind
update "libcxxabi" $libcxxabi
update "libcxx" $libcxx
update "compiler-rt" $rt
update "clang" $clang

if [ "$add" != "" ]; then
  add="-a $add"
fi

if [ "$remove" != "" ]; then
  remove="-r $remove"
fi

safe_run python3 $llvmtool projects --source-dir $source_dir --repos $repos $add $remove

if [ -d $env/build ]; then
  echo "Updating $env/build"
  safe_run python3 $llvmtool configure --source-dir $source_dir --build-dir $env/build
fi

if [ -d $env/debug ]; then
  echo "Updating $env/debug"
  safe_run python3 $llvmtool configure --source-dir $source_dir --build-dir $env/debug
fi
