cab07dfbca
macOS’s `readlink` doesn’t support the `-f` flag. By using `realpath` we get the same functionality with added support for macOS. Finally, this patch adds `v8` and `v8-debug` to the completion command. These are the binary names used by jsvu [1]. [1]: https://github.com/GoogleChromeLabs/jsvu Bug: v8:11567 Change-Id: I1ec47752e50bce4bfb97a7ce23571d0a6e55dbc1 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2762147 Commit-Queue: Mathias Bynens <mathias@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#73438}
121 lines
4.6 KiB
Bash
Executable File
121 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright 2012 the V8 project authors. All rights reserved.
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above
|
|
# copyright notice, this list of conditions and the following
|
|
# disclaimer in the documentation and/or other materials provided
|
|
# with the distribution.
|
|
# * Neither the name of Google Inc. nor the names of its
|
|
# contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
# Inspired by and based on:
|
|
# https://chromium.googlesource.com/chromium/src/+/master/tools/bash-completion
|
|
|
|
# Flag completion rule for bash.
|
|
# To load in your shell, "source path/to/this/file".
|
|
|
|
v8_source="$(realpath "$(dirname "$BASH_SOURCE")"/..)"
|
|
|
|
_get_v8_flags() {
|
|
# The first `sed` command joins lines when a line ends with '('.
|
|
# See http://sed.sourceforge.net/sedfaq3.html#s3.2
|
|
local flags_file="$v8_source/src/flags/flag-definitions.h"
|
|
local defines=$( \
|
|
sed -e :a -e '/($/N; s/(\n\s*/(/; ta' < "$flags_file" \
|
|
| grep "^DEFINE" \
|
|
| grep -v "DEFINE_IMPLICATION" \
|
|
| grep -v "DEFINE_NEG_IMPLICATION" \
|
|
| grep -v "DEFINE_VALUE_IMPLICATION" \
|
|
| sed -e 's/_/-/g'; \
|
|
grep "^ V(harmony_" "$flags_file" \
|
|
| sed -e 's/^ V/DEFINE-BOOL/' \
|
|
| sed -e 's/_/-/g'; \
|
|
grep "^ V(" "$v8_source/src/wasm/wasm-feature-flags.h" \
|
|
| sed -e 's/^ V(/DEFINE-BOOL(experimental-wasm-/' \
|
|
| sed -e 's/_/-/g')
|
|
sed -ne 's/^DEFINE-[^(]*(\([^,]*\).*/--\1/p' <<< "$defines"
|
|
sed -ne 's/^DEFINE-BOOL(\([^,]*\).*/--no\1/p' <<< "$defines"
|
|
}
|
|
|
|
_get_d8_flags() {
|
|
grep "strcmp(argv\[i\]" "$v8_source/src/d8/d8.cc" \
|
|
| sed -ne 's/^[^"]*"--\([^"]*\)".*/--\1/p'
|
|
}
|
|
|
|
_d8_flag() {
|
|
local targets
|
|
targets=$(_get_v8_flags ; _get_d8_flags)
|
|
COMPREPLY=($(compgen -W "$targets" -- "${COMP_WORDS[COMP_CWORD]}"))
|
|
return 0
|
|
}
|
|
|
|
_test_flag() {
|
|
local targets
|
|
targets=$(_get_v8_flags)
|
|
COMPREPLY=($(compgen -W "$targets" -- "${COMP_WORDS[COMP_CWORD]}"))
|
|
return 0
|
|
}
|
|
|
|
complete -F _d8_flag -f d8 v8 v8-debug
|
|
complete -F _test_flag -f cctest unittests
|
|
|
|
# Many distros set up their own GDB completion scripts. The logic below is
|
|
# careful to wrap any such functions (with additional logic), rather than
|
|
# overwriting them.
|
|
# An additional complication is that tested distros dynamically load their
|
|
# completion scripts on first use. So in order to be able to detect their
|
|
# presence, we have to force-load them first.
|
|
_maybe_setup_gdb_completions() {
|
|
# We only want to set up the wrapping once:
|
|
[[ -n "$_ORIGINAL_GDB_COMPLETIONS" ]] && return 0;
|
|
|
|
# This path works for Debian, Ubuntu, and Gentoo; other distros unknown.
|
|
# Feel free to submit patches to extend the logic.
|
|
local GDB_COMP
|
|
for GDB_COMP in "/usr/share/bash-completion/completions/gdb"; do
|
|
[[ -f "$GDB_COMP" ]] && source $GDB_COMP
|
|
done
|
|
_ORIGINAL_GDB_COMPLETIONS="$(complete -p gdb 2>/dev/null \
|
|
| sed -e 's/^.*-F \([^ ]*\).*/\1/')"
|
|
|
|
_gdb_v8_flag() {
|
|
local c i next
|
|
for (( i=1; i<$(($COMP_CWORD-1)); i++ )); do
|
|
c=${COMP_WORDS[$i]}
|
|
if [ "$c" = "-args" ] || [ "$c" = "--args" ] || [ "$c" == "--" ]; then
|
|
next=$(basename -- ${COMP_WORDS[$(($i+1))]})
|
|
if [ "$next" = "d8" ] ; then
|
|
_d8_flag
|
|
return 0
|
|
elif [ "$next" = "unittests" ] || [ "$next" = "cctest" ]; then
|
|
_test_flag
|
|
return 0
|
|
fi
|
|
fi
|
|
done
|
|
[[ -n "$_ORIGINAL_GDB_COMPLETIONS" ]] && $_ORIGINAL_GDB_COMPLETIONS
|
|
return 0
|
|
}
|
|
complete -F _gdb_v8_flag -f gdb
|
|
}
|
|
_maybe_setup_gdb_completions
|
|
unset _maybe_setup_gdb_completions
|