#!/usr/bin/env bash

# This script keeps track of all projects that are linked to the llvm src
# directory. It can detect, enable, disable and map to specific projects,
# so different builds get to see the source dir as they saw originally.

. llvm-common

prog=`basename $0`
syntax() {
  echo "Syntax: $prog {+/-}[clang|rt|libs|tools|test]"
  echo " noarg: list linked projects"
  echo " {+/-}: link / unlik projects (default: link)"
}

# Dirs and links into LLVM
clang_dir=clang
clang_link=tools/clang
rt_dir=compiler-rt
rt_link=projects/compiler-rt
libcxx_dir=libcxx
libcxx_link=projects/libcxx
libcxxabi_dir=libcxxabi
libcxxabi_link=projects/libcxxabi
libunwind_dir=libunwind
libunwind_link=projects/libunwind
lld_dir=lld
lld_link=tools/lld
lldb_dir=lldb
lldb_link=tools/lldb
tests_dir=test-suite
tests_link=projects/test-suite

# Check if link exists
has() {
  link=$1
  [ -s "$LLVM_SRC/$link" ]
}

# Initialise status
init() {
  link=$1
  if has $link; then
    echo "true";
  else
    echo "false"
  fi
}

# Link/Unlink upon need
update() {
  dir=$1
  link=$2
  need=$3
  if $need; then
    ln -sf $LLVM_SRC/../$dir $LLVM_SRC/$link
  else
    rm -f $LLVM_SRC/$link
  fi
}

# Lists linked projects and quit
list_all() {
  echo "Projects linked:"
  has $clang_link && echo " + Clang"
  has $rt_link && echo " + Compiler-RT"
  has $libcxx_link && echo " + LibC++"
  has $libcxxabi_link && echo " + LibC++abi"
  has $libunwind_link && echo " + LibUnwind"
  has $lld_link && echo " + LLD"
  has $lldb_link && echo " + LLDB"
  has $tests_link && echo " + Test-Suite"
  echo
}

# No args, list
if [ "$1" = "" ]; then
  echo "Use $prog -h for options"
  echo
  list_all
  exit
fi

# Need/not need
clang=`init $clang_link`
rt=`init $rt_link`
libcxx=`init $libcxx_link`
libcxxabi=`init $libcxxabi_link`
libunwind=`init $libunwind_link`
lld=`init $lld_link`
lldb=`init $lldb_link`
tests=`init $tests_link`

# Check all needed projects
while ! test -z $1; do
  opt=$1
  sign=${opt:0:1}
  flag=true
  if [ "$sign" = "-" ]; then
    flag=false
    opt=${opt:1}
  fi
  if [ "$sign" = "+" ]; then
    opt=${opt:1}
  fi

  case $opt in
    clang)
      clang=$flag
      ;;
    rt)
      rt=$flag
      ;;
    libs)
      libcxx=$flag
      libcxxabi=$flag
      libunwind=$flag
      ;;
    tools)
      lld=$flag
      lldb=$flag
      ;;
    test)
      tests=$flag
      ;;
    list)
      list_all
      exit
      ;;
    -h)
      syntax
      exit
      ;;
    *)
      syntax
      exit 1
  esac
  shift
done

# Update links
update $tests_dir $tests_link $tests
update $lldb_dir $lldb_link $lldb
update $lld_dir $lld_link $lld
update $libunwind_dir $libunwind_link $libunwind
update $libcxxabi_dir $libcxxabi_link $libcxxabi
update $libcxx_dir $libcxx_link $libcxx
update $rt_dir $rt_link $rt
update $clang_dir $clang_link $clang
list_all
