Add a script that allows looking up the full Kconfig entry based on the symbol name. Documentation and example usage is found at the top of the script itself. Signed-off-by: Brian Masney <bmasney@xxxxxxxxxx> --- scripts/kconfig/lookup.sh | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 scripts/kconfig/lookup.sh diff --git a/scripts/kconfig/lookup.sh b/scripts/kconfig/lookup.sh new file mode 100755 index 000000000000..d1ff52b23835 --- /dev/null +++ b/scripts/kconfig/lookup.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2023 Red Hat, Inc. All Rights Reserved. +# Written by Brian Masney <bmasney@xxxxxxxxxx> +# +# This script takes as input one or more Kconfig symbols and outputs the full +# entry from the Kconfig file. It can be invoked by reading a list of symbol +# names from either stdin or as command line arguments. Example output: +# +# x1:~/src/linux$ ./scripts/kconfig/lookup.sh TSL2772 SOUND +# # drivers/iio/light/Kconfig +# config TSL2772 +# tristate "TAOS TSL/TMD2x71 and TSL/TMD2x72 Family of light and proximity sensors" +# depends on I2C +# help +# Support for: tsl2571, tsl2671, tmd2671, tsl2771, tmd2771, tsl2572, tsl2672, +# tmd2672, tsl2772, tmd2772 devices. +# Provides iio_events and direct access via sysfs. +# +# # arch/um/drivers/Kconfig +# config SOUND +# tristate +# default UML_SOUND +# +# # sound/Kconfig +# menuconfig SOUND +# tristate "Sound card support" +# depends on HAS_IOMEM +# help +# If you have a sound card in your computer, i.e. if it can say more +# than an occasional beep, say Y. + + +process_kconfig() +{ + KCONFIG="${1/CONFIG_/}" + + FOUND=0 + for KCONFIG_FILE in $(git grep -E "^(config|menuconfig) ${KCONFIG}$" | \ + awk -F: '{print $1}') ; do + echo "# ${KCONFIG_FILE}" + awk "/^(config|menuconfig) ${KCONFIG}$/{ m=1; print; next; } \ + /^(choice|comment|config|end|if|menuconfig|source)/ { m=0; } m" \ + "${KCONFIG_FILE}" + FOUND=1 + done + + if [[ "${FOUND}" = "0" ]] ; then + echo "Skipping ${KCONFIG} since Kconfig symbol is not found" >&2 + return 1 + fi + +} + +# Run this script from the toplevel kernel source directory. +SCRIPT_PATH=$(readlink -f "$0") +cd "$(dirname "${SCRIPT_PATH}")/../.." || exit 1 + +RET=0 +if [[ $# == 0 ]] ; then + # Read Kconfig names from stdin + while read -r KCONFIG ; do + if ! process_kconfig "${KCONFIG}" ; then + RET=1 + fi + done +else + # Read Kconfig names from the command line arguments + for NUM in $(seq 1 "$#") ; do + if ! process_kconfig "${!NUM}" ; then + RET=1 + fi + done +fi + +exit "${RET}" -- 2.41.0