forked from qt-creator/qt-creator
		
	* Make sure all scripts come with a license * Update the license in the scripts * Add scripts to help with license changes Change-Id: I38a25aa1287ee8a75e0f0307d1b30320d781ad1f Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| ############################################################################
 | |
| #
 | |
| # Copyright (C) 2016 The Qt Company Ltd.
 | |
| # Contact: https://www.qt.io/licensing/
 | |
| #
 | |
| # This file is part of Qt Creator.
 | |
| #
 | |
| # Commercial License Usage
 | |
| # Licensees holding valid commercial Qt licenses may use this file in
 | |
| # accordance with the commercial license agreement provided with the
 | |
| # Software or, alternatively, in accordance with the terms contained in
 | |
| # a written agreement between you and The Qt Company. For licensing terms
 | |
| # and conditions see https://www.qt.io/terms-conditions. For further
 | |
| # information use the contact form at https://www.qt.io/contact-us.
 | |
| #
 | |
| # GNU General Public License Usage
 | |
| # Alternatively, this file may be used under the terms of the GNU
 | |
| # General Public License version 3 as published by the Free Software
 | |
| # Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 | |
| # included in the packaging of this file. Please review the following
 | |
| # information to ensure the GNU General Public License requirements will
 | |
| # be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | |
| #
 | |
| ############################################################################
 | |
| 
 | |
| # --- 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} -cc1 -code-completion-at ${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
 | |
| 
 |