forked from qt-creator/qt-creator
Broke with a7956df3ca
.
Change-Id: I072ea34183aedf2fd693af1bb589660aa06b9e1c
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
126 lines
3.0 KiB
Bash
Executable File
126 lines
3.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Copyright (C) 2016 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
|
|
|
# --- helpers -----------------------------------------------------------------
|
|
|
|
printUsage()
|
|
{
|
|
echo "Usage: $0 [-v] [-c clang-executable] file line column"
|
|
echo
|
|
echo "Options:"
|
|
echo " -v Run c-index-test instead of clang to get more details."
|
|
echo " -c clang-executable Use the provided clang-executable."
|
|
echo
|
|
echo "The clang executable is determined by this order:"
|
|
echo " 1. Use clang from the -c option."
|
|
echo " 2. Use clang from environment variable CLANG_FOR_COMPLETION."
|
|
echo " 3. Use clang from \$PATH."
|
|
echo
|
|
echo "Path to c-index-test will be determined with the help of the clang executable."
|
|
}
|
|
|
|
# There is no readlink on cygwin.
|
|
hasReadLink()
|
|
{
|
|
return $(command -v readlink >/dev/null 2>&1)
|
|
}
|
|
|
|
checkIfFileExistsOrDie()
|
|
{
|
|
[ ! -f "$1" ] && echo "'$1' is not a file or does not exist." && exit 1
|
|
}
|
|
|
|
checkIfFileExistsAndIsExecutableOrDie()
|
|
{
|
|
checkIfFileExistsOrDie "$1"
|
|
[ ! -x "$1" ] && echo "'$1' is not executable." && exit 2
|
|
}
|
|
|
|
findClangOrDie()
|
|
{
|
|
if [ -z "$CLANG_EXEC" ]; then
|
|
if [ -n "${CLANG_FOR_COMPLETION}" ]; then
|
|
CLANG_EXEC=${CLANG_FOR_COMPLETION}
|
|
else
|
|
CLANG_EXEC=$(which clang)
|
|
fi
|
|
fi
|
|
hasReadLink && CLANG_EXEC=$(readlink -e "$CLANG_EXEC")
|
|
checkIfFileExistsAndIsExecutableOrDie "$CLANG_EXEC"
|
|
}
|
|
|
|
findCIndexTestOrDie()
|
|
{
|
|
if [ -n "$RUN_WITH_CINDEXTEST" ]; then
|
|
CINDEXTEST_EXEC=$(echo $CLANG_EXEC | sed -e 's/clang/c-index-test/g')
|
|
hasReadLink && CINDEXTEST_EXEC=$(readlink -e "$CINDEXTEST_EXEC")
|
|
checkIfFileExistsAndIsExecutableOrDie "$CINDEXTEST_EXEC"
|
|
fi
|
|
}
|
|
|
|
printClangVersion()
|
|
{
|
|
command="${CLANG_EXEC} --version"
|
|
echo "Command: $command"
|
|
eval $command
|
|
}
|
|
|
|
runCodeCompletion()
|
|
{
|
|
if [ -n "${CINDEXTEST_EXEC}" ]; then
|
|
command="${CINDEXTEST_EXEC} -code-completion-at=${FILE}:${LINE}:${COLUMN} ${FILE}"
|
|
else
|
|
command="${CLANG_EXEC} -fsyntax-only -Xclang -code-completion-at -Xclang ${FILE}:${LINE}:${COLUMN} ${FILE}"
|
|
fi
|
|
echo "Command: $command"
|
|
eval $command
|
|
}
|
|
|
|
# --- Process arguments -------------------------------------------------------
|
|
|
|
CLANG_EXEC=
|
|
RUN_WITH_CINDEXTEST=
|
|
|
|
FILE=
|
|
LINE=
|
|
COLUMN=
|
|
|
|
while [ -n "$1" ]; do
|
|
param=$1
|
|
shift
|
|
case $param in
|
|
-h | -help | --help)
|
|
printUsage
|
|
exit 0
|
|
;;
|
|
-v | -verbose | --verbose)
|
|
RUN_WITH_CINDEXTEST=1
|
|
;;
|
|
-c | -clang | --clang)
|
|
CLANG_EXEC=$1
|
|
shift
|
|
;;
|
|
*)
|
|
break;
|
|
;;
|
|
esac
|
|
done
|
|
|
|
[ "$#" -ne 2 ] && printUsage && exit 1
|
|
checkIfFileExistsOrDie "$param"
|
|
FILE=$param
|
|
LINE=$1
|
|
COLUMN=$2
|
|
|
|
# --- main --------------------------------------------------------------------
|
|
|
|
findClangOrDie
|
|
findCIndexTestOrDie
|
|
|
|
printClangVersion
|
|
echo
|
|
runCodeCompletion
|
|
|