# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Add programmable completion to some Chromium OS build scripts


# Echo a list of -- flags that the current command accepts. The
# function assumes that the command supports shflags' --help flag.
#
_flags()
{
  echo $(command "${COMP_WORDS[0]}" --help 2>&1 | \
    egrep -o -- --\[^\ \]+: | \
    sed 's/://; s/--\[no\]\(.\+\)/--\1 --no\1/')
}


# Complete flags, i.e., current words starting with --. Return 1 if
# the current word doesn't start with --, 0 otherwise.
#
_flag_complete()
{
  COMPREPLY=()
  local cur="${COMP_WORDS[COMP_CWORD]}"
  if [[ "${cur}" == --* ]]; then
    COMPREPLY=( $(compgen -W "$(_flags)" -- ${cur}) )
    return 0
  fi
  return 1
}


# Look for "--arg=foo" or "--arg foo" (where foo can be an empty string) in the
# word to be completed. If found, echo "--arg=foo".
#
_argeq()
{
  local arg=$1
  local w0="${COMP_WORDS[COMP_CWORD]}"
  local w1="${COMP_WORDS[COMP_CWORD-1]}"

  # Check for completing "--arg="
  if [ "${w1}" == ${arg} -a "${w0}" == "=" ]; then
    echo "${w1}${w0}"
    return 0
  fi

  # Check for completing "--arg foo"
  if [ "${w1}" == ${arg} ]; then
    echo "${w1}=${w0}"
    return 0
  fi

  # Check for completing "--arg=foo"
  if [ ${COMP_CWORD} -gt 2 ]; then
    local w2="${COMP_WORDS[COMP_CWORD-2]}"
    if [ "${w2}" == ${arg} -a "${w1}" == "=" ]; then
      echo "${w2}${w1}${w0}"
      return 0
    fi
  fi
}


# echo the existing target board sysroots
#
_board_sysroots()
{
  local builddir=/build
  if [ -d ${builddir} ]; then
    echo $(command ls "${builddir}")
  fi
}

_complete_board_sysroot_flag()
{
  COMPREPLY=()
  local arg=$(_argeq --board)
  if [[ ${arg} == --board=* ]]; then
    COMPREPLY=( $(compgen -W "$(_board_sysroots)" -- ${arg#--board=}) )
    return 0
  fi
  return 1
}

# Completion for --board= argument for existing board sysroots
#
_board_sysroot()
{
  _flag_complete && return 0
  _complete_board_sysroot_flag && return 0
}

complete -o bashdefault -o default -F _board_sysroot \
  build_autotest.sh \
  build_image \
  build_packages \
  image_to_usb.sh \
  mod_image_for_test.sh


# echo the existing target board overlays
#
_board_overlays()
{
  local overlaydir=../overlays
  if [ -d ${overlaydir} ]; then
    echo $(command ls $overlaydir | grep overlay- | sed s,overlay-,,)
  fi
}

# Completion for --board= argument for existing board overlays
#
_board_overlay()
{
  _flag_complete && return 0

  COMPREPLY=()
  local arg=$(_argeq --board)
  if [[ ${arg} == --board=* ]]; then
    COMPREPLY=( $(compgen -W "$(_board_overlays)" -- ${arg#--board=}) )
  fi
}

complete -o bashdefault -o default -F _board_overlay setup_board

# Completion for -c and -s argument for autotest script
_ls_autotest() {
  local autotest_dir=../third_party/autotest/files
  ls --color=never -dBFH ${autotest_dir}/$1* 2>/dev/null |\
    sed s/"..\/third_party\/autotest\/files\/"//g
}

_autotest_complete()
{
  _flag_complete && return 0

  local arg=$(_argeq -c)
  if [[ ${arg} == -c=* ]]; then
    COMPREPLY=($(compgen -W "$(_ls_autotest ${arg#-c=})"))
    return 0
  fi

  arg=$(_argeq -s)
  if [[ ${arg} == -s=* ]]; then
    COMPREPLY=($(compgen -W "$(_ls_autotest ${arg#-s=})"))
    return 0
  fi

  _complete_board_sysroot_flag && return 0
}

complete -o bashdefault -o default -o nospace -F _autotest_complete autotest

###  Local Variables:
###  mode: shell-script
###  End:
