#!/bin/bash
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

#### CATEGORY=Build
### manipulate the symbol-index file

## "symbol-index" is a file used by debugging tools (zxdb, fidlcat, symbolizer) to
## locate all debugging symbols from different source code checkouts on a local
## machine. It's normally located at ~/.fuchsia/debug/symbol-index.
##
## This script interacts with a symbol-index file.
##
## Usage: fx symbol-index <verb> [<arguments> ...]
##
## Available verbs:
##
##   list
##       Lists all paths in symbol-index.
##
##   register
##       Add all symbols in the current Fuchsia checkout to symbol-index.
##
##   add <symbol path> [ <build directory> ]
##       Adds a new symbol path to symbol-index. A symbol path could be either a
##       a text file in "ids.txt" format, or a directory in ".build-id" structure.
##       An optional build directory could be supplemented, which is used by zxdb
##       to locate the source code. If the symbol path is already in symbol-index,
##       no changes will be made regardless of the optional build directory.
##
##   add-all [ <input file> ]
##       Reads the input and adds all symbol paths with optional build directories.
##       The input file can contain multiple lines, each describing a symbol path.
##       An optional build directory could be supplemented and separated from the
##       symbol path with whitespaces. Relative paths will be resolved based on
##       the input file. Empty lines and lines starting with "#" will be ignored.
##       If the input file is not specified, the input will be read from the stdin.
##
##   remove <symbol path>
##       Removes a symbol path from symbol-index.
##
##   purge
##       Removes all non-existent paths from symbol-index.

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
fx-config-read
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/symbol-index.sh || exit $?

while [[ $# -gt 0 ]]; do
  case "$1" in
    --help|-h)
      fx-command-help
      exit 0
      ;;
    -*)
      fx-error "Unknown option ${$1}"
      exit 1
      ;;
    *)
      break
      ;;
  esac
  shift
done

if [[ $# -eq 0 ]]; then
  fx-command-help
  exit 1
fi

if [[ $1 == "register" ]]; then
  if [[ $# -gt 1 ]]; then
    fx-error "Verb register requires 0 arguments, but 1 is given."
    exit 1
  fi

  if ensure-symbol-index-registered; then
    echo "Registered ${FUCHSIA_DIR} successfully!"
  else
    fx-error "Failed to register ${FUCHSIA_DIR}!"
    exit 1
  fi
else
  symbol-index "$@"
  exit $?
fi
