Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/scripts/bash-completion/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 10 kB image not shown  

Quelle  make   Sprache: JAVA

 
# SPDX-License-Identifier: GPL-2.0-only
# bash completion for GNU make with kbuild extension       -*- shell-script -*-

# Load the default completion script for make. It is typically located at
# /usr/share/bash-completion/completions/make, but we do not rely on it.
__kbuild_load_default_make_completion()
{
 local -a dirs=("${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions")
 local ifs=$IFS IFS=: dir compfile this_dir

 for dir in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share}; do
         dirs+=("$dir"/bash-completion/completions)
 done
 IFS=$ifs

 this_dir="$(realpath "$(dirname "${BASH_SOURCE[0]}")")"

 for dir in "${dirs[@]}"do
  if [[ ! -d ${dir} || ${dir} = "${this_dir}" ]]; then
   continue
  fi

  for compfile in make make.bash _make; do
   compfile=$dir/$compfile
   # Avoid trying to source dirs; https://bugzilla.redhat.com/903540
   if [[ -f ${compfile} ]] && . "${compfile}" &>/dev/null; then

    __kbuild_default_make_completion=$(
     # shellcheck disable=SC2046 # word splitting is the point here
     set -- $(complete -p make)

     while [[ $# -gt 1 && "$1" != -F ]]; do
      shift
     done

     if [[ "$1" = -F ]]; then
      echo "$2"
     fi
    )

    return
   fi
  done
 done
}

__kbuild_load_default_make_completion

__kbuild_handle_variable()
{
 local var=${1%%=*}
 local cur=${cur#"${var}"=}
 local srctree=$2
 local keywords=()

 case $var in
 ARCH)
  # sub-directories under arch/
  keywords+=($(find "${srctree}/arch" -mindepth 1 -maxdepth 1 -type d -printf '%P\n'))
  # architectures hard-coded in the top Makefile
  keywords+=(i386 x86_64 sparc32 sparc64 parisc64)
  ;;
 CROSS_COMPILE)
  # toolchains with a full path
  local cross_compile=()
  local c c2
  _filedir

  for c in "${COMPREPLY[@]}"do
   # eval for tilde expansion
   # suppress error, as this fails when it contains a space
   eval "c2=${c}" 2>/dev/null || continue
   if [[ ${c} == *-elfedit && ! -d ${c2} && -x ${c2} ]]; then
    cross_compile+=("${c%elfedit}")
   fi
  done

  # toolchains in the PATH environment
  while read -r c; do
   if [[ ${c} == *-elfedit ]]; then
    keywords+=("${c%elfedit}")
   fi
  done < <(compgen -c)

  COMPREPLY=()
  _filedir -d

  # Add cross_compile directly without passing it to compgen.
  # Otherwise, toolchain paths with a tilde do not work.
  # e.g.)
  #   CROSS_COMPILE=~/0day/gcc-14.2.0-nolibc/aarch64-linux/bin/aarch64-linux-
  COMPREPLY+=("${cross_compile[@]}")
  ;;
 LLVM)
  # LLVM=1 uses the default 'clang' etc.
  keywords+=(1)

  # suffix for a particular version. LLVM=-18 uses 'clang-18' etc.
  while read -r c; do
   if [[ ${c} == clang-[0-9]* ]]; then
    keywords+=("${c#clang}")
   fi
  done < <(compgen -c)

  # directory path to LLVM toolchains
  _filedir -d
  ;;
 KCONFIG_ALLCONFIG)
  # KCONFIG_ALLCONFIG=1 selects the default fragment
  keywords+=(1)
  # or the path to a fragment file
  _filedir
  ;;
 C | KBUILD_CHECKSRC)
  keywords+=(1 2)
  ;;
 V | KBUILD_VERBOSE)
  keywords+=({,1}{,2})
  ;;
 W | KBUILD_EXTRA_WARN)
  keywords+=({,1}{,2}{,3}{,c}{,e})
  ;;
 KBUILD_ABS_SRCTREE | KBUILD_MODPOST_NOFINAL | KBUILD_MODPOST_WARN | \
  CLIPPY | KBUILD_CLIPPY | KCONFIG_NOSILENTUPDATE | \
  KCONFIG_OVERWRITECONFIG | KCONFIG_WARN_UNKNOWN_SYMBOL | \
  KCONFIG_WERROR )
  keywords+=(1)
  ;;
 INSTALL_MOD_STRIP)
  keywords+=(1 --strip-debug --strip-unneeded)
  ;;
 O | KBUILD_OUTPUT | M | KBUILD_EXTMOD | MO | KBUILD_EXTMOD_OUTPUT | *_PATH)
  # variables that take a directory.
  _filedir -d
  return
  ;;
 KBUILD_EXTRA_SYMBOL | KBUILD_KCONFIG | KCONFIG_CONFIG)
  # variables that take a file.
  _filedir
  return
 esac

 COMPREPLY+=($(compgen -W "${keywords[*]}" -- "${cur}"))
}

# Check the -C, -f options and 'source' symlink. Return the source tree we are
# working in.
__kbuild_get_srctree()
{
 local words=("$@")
 local cwd makef_dir

 # see if a path was specified with -C/--directory
 for ((i = 1; i < ${#words[@]}; i++)); do
  if [[ ${words[i]} == -@(C|-directory) ]]; then
   # eval for tilde expansion.
   # suppress error, as this fails when it contains a space
   eval "cwd=${words[i + 1]}" 2>/dev/null
   break
  fi
 done

 if [[ -z ${cwd} ]]; then
  cwd=.
 fi

 # see if a Makefile was specified with -f/--file/--makefile
 for ((i = 1; i < ${#words[@]}; i++)); do
  if [[ ${words[i]} == -@(f|-?(make)file) ]]; then
   # eval for tilde expansion
   # suppress error, as this fails when it contains a space
   eval "makef_dir=${words[i + 1]%/*}" 2>/dev/null
   break
  fi
 done

 if [ -z "${makef_dir}" ]; then
  makef_dir=${cwd}
 elif [[ ${makef_dir} != /* ]]; then
makef_dir=${cwd}/${makef_dir}
fi

# If ${makef_dir} is a build directory created by the O= option, there
# is a symbolic link 'source', which points to the kernel source tree.
if [[ -L ${makef_dir}/source ]]; then
makef_dir=$(readlink "${makef_dir}/source")
fi

echo "${makef_dir}"
}

# Get SRCARCH to do a little more clever things
__kbuild_get_srcarch()
{
local words=("$@")
local arch srcarch uname_m

# see if ARCH= is explicitly specified
for ((i = 1; i < ${#words[@]}; i++)); do
if [[ ${words[i]} == ARCH=* ]]; then
arch=${words[i]#ARCH=}
break
fi
done

# If ARCH= is not specified, check the build marchine's architecture
if [[ -z ${arch} ]]; then
uname_m=$(uname -m)

# shellcheck disable=SC2209 # 'sh' is SuperH, not a shell command
case ${uname_m} in
arm64 | aarch64*) arch=arm64 ;;
arm* | sa110)     arch=arm ;;
i?86 | x86_64)    arch=x86 ;;
loongarch*)       arch=loongarch ;;
mips*)            arch=mips ;;
ppc*)             arch=powerpc ;;
riscv*)           arch=riscv ;;
s390x)            arch=s390 ;;
sh[234]*)         arch=sh ;;
sun4u)            arch=sparc64 ;;
*)                arch=${uname_m} ;;
esac
fi

case ${arch} in
parisc64)          srcarch=parisc ;;
sparc32 | sparc64) srcarch=sparc ;;
i386 | x86_64)     srcarch=x86 ;;
*)                 srcarch=${arch} ;;
esac

echo "$srcarch"
}

# small Makefile to parse obj-* syntax
__kbuild_tmp_makefile()
{
cat <<'EOF'
.PHONY: __default
__default:
$(foreach m,$(obj-y) $(obj-m) $(obj-),$(foreach s, -objs -y -m -,$($(m:%.o=%$s))) $(m))
EOF
echo "include ${1}"
}

_make_for_kbuild ()
{
# shellcheck disable=SC2034 # these are set by _init_completion
local cur prev words cword split
_init_completion -s || return

local srctree
srctree=$(__kbuild_get_srctree "${words[@]}")

# If 'kernel' and 'Documentation' directories are found, we assume this
# is a kernel tree. Otherwise, we fall back to the generic rule provided
# by the bash-completion project.
if [[ ! -d ${srctree}/kernel || ! -d ${srctree}/Documentation ]]; then
if [ -n "${__kbuild_default_make_completion}" ]; then
"${__kbuild_default_make_completion}" "$@"
fi
return
fi

# make options with a parameter (copied from the bash-completion project)
case ${prev} in
--file | --makefile | --old-file | --assume-old | --what-if | --new-file | \
--assume-new | -!(-*)[foW])
_filedir
return
;;
--include-dir | --directory | -!(-*)[ICm])
_filedir -d
return
;;
-!(-*)E)
COMPREPLY=($(compgen -v -- "$cur"))
return
;;
--eval | -!(-*)[DVx])
return
;;
--jobs | -!(-*)j)
COMPREPLY=($(compgen -W "{1..$(($(_ncpus) * 2))}" -- "$cur"))
return
;;
esac

local keywords=()

case ${cur} in
-*)
# make options (copied from the bash-completion project)
local opts
opts="$(_parse_help "$1")"
COMPREPLY=($(compgen -W "${opts:-$(_parse_usage "$1")}" -- "$cur"))
if [[ ${COMPREPLY-} == *= ]]; then
compopt -o nospace
fi
return
;;
*=*)
__kbuild_handle_variable "${cur}" "${srctree}"
return
;;
KBUILD_*)
# There are many variables prefixed with 'KBUILD_'.
# Display them only when 'KBUILD_' is entered.
# shellcheck disable=SC2191 # '=' is appended for variables
keywords+=(
KBUILD_{CHECKSRC,EXTMOD,EXTMOD_OUTPUT,OUTPUT,VERBOSE,EXTRA_WARN,CLIPPY}=
KBUILD_BUILD_{USER,HOST,TIMESTAMP}=
KBUILD_MODPOST_{NOFINAL,WARN}=
KBUILD_{ABS_SRCTREE,EXTRA_SYMBOLS,KCONFIG}=
)
;;
KCONFIG_*)
# There are many variables prefixed with 'KCONFIG_'.
# Display them only when 'KCONFIG_' is entered.
# shellcheck disable=SC2191 # '=' is appended for variables
keywords+=(
KCONFIG_{CONFIG,ALLCONFIG,NOSILENTUPDATE,OVERWRITECONFIG}=
KCONFIG_{SEED,PROBABILITY}=
KCONFIG_WARN_UNKNOWN_SYMBOL=
KCONFIG_WERROR=
)
;;
*)
# By default, hide KBUILD_* and KCONFIG_* variables.
# Instead, display only the prefix parts.
keywords+=(KBUILD_ KCONFIG_)
;;
esac

if [[ ${cur} != /* && ${cur} != */

  local dir srcarch kbuild_file tmp
  srcarch=$(__kbuild_get_srcarch "${words[@]}")

  # single build
  dir=${cur}
  while truedo
   if [[ ${dir} == */* ]]; then
dir=${dir%/*}
else
dir=.
fi

# Search for 'Kbuild' or 'Makefile' in the parent
# directories (may not be a direct parent)
if [[ -f ${srctree}/${dir}/Kbuild ]]; then
kbuild_file=${srctree}/${dir}/Kbuild
break
fi
if [[ -f ${srctree}/${dir}/Makefile ]]; then
kbuild_file=${srctree}/${dir}/Makefile
break
fi

if [[ ${dir} == . ]]; then
break
fi
done

if [[ -n ${kbuild_file} ]]; then
tmp=($(__kbuild_tmp_makefile "${kbuild_file}" |
       SRCARCH=${srcarch} obj=${dir} src=${srctree}/${dir} \
       "${1}" -n -f - 2>/dev/null))

# Add $(obj)/ prefix
if [[ ${dir} != . ]]; then
tmp=("${tmp[@]/#/${dir}\/}")
fi

keywords+=("${tmp[@]}")
fi

# *_defconfig and *.config files. These might be grouped into
# subdirectories, e.g., arch/powerpc/configs/*/

  if [[ ${cur} == */* ]]; then
dir=${cur%/*}
else
dir=.
fi

tmp=($(find "${srctree}/arch/${srcarch}/configs/${dir}" \
       "${srctree}/kernel/configs/${dir}" \
       -mindepth 1 -maxdepth 1 -type d -printf '%P/\n' \
       -o -printf '%P\n' 2>/dev/null))

if [[ ${dir} != . ]]; then
tmp=("${tmp[@]/#/${dir}\/}")
fi

keywords+=("${tmp[@]}")
fi

# shellcheck disable=SC2191 # '=' is appended for variables
keywords+=(
#
# variables (append =)
#
ARCH=
CROSS_COMPILE=
LLVM=
C= M= MO= O= V= W=
INSTALL{,_MOD,_HDR,_DTBS}_PATH=
KERNELRELEASE=

#
# targets
#
all help
clean mrproper distclean
clang-{tidy,analyzer} compile_commands.json
coccicheck
dtbs{,_check,_install} dt_binding_{check,schemas}
headers{,_install}
vmlinux install
modules{,_prepare,_install,_sign}
vdso_install
tags TAGS cscope gtags
rust{available,fmt,fmtcheck}
kernel{version,release} image_name
kselftest{,-all,-install,-clean,-merge}

# configuration
{,old,olddef,sync,def,savedef,rand,listnew,helpnew,test,tiny}config
{,build_}{menu,n,g,x}config
local{mod,yes}config
all{no,yes,mod,def}config
{yes2mod,mod2yes,mod2no}config

# docs
{html,textinfo,info,latex,pdf,epub,xml,linkcheck,refcheck,clean}docs

# package
{,bin,src}{rpm,deb}-pkg
{pacman,dir,tar}-pkg
tar{,gz,bz2,xz,zst}-pkg
perf-tar{,gz,bz2,xz,zst}-src-pkg
)

COMPREPLY=($(compgen -W "${keywords[*]}" -- "${cur}"))

# Do not append a space for variables, subdirs, "KBUILD_", "KCONFIG_".
if [[ ${COMPREPLY-} == *[=/] || ${COMPREPLY-} =~ ^(KBUILD|KCONFIG)_$ ]]; then
compopt -o nospace
fi

} && complete -F _make_for_kbuild make

Messung V0.5
C=93 H=99 G=95

¤ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.