xref: /openbmc/u-boot/scripts/check-config.sh (revision 7e40d0a3)
1371244cbSSimon Glass#!/bin/sh
2371244cbSSimon Glass# Copyright (c) 2016 Google, Inc
3371244cbSSimon Glass# Written by Simon Glass <sjg@chromium.org>
4371244cbSSimon Glass#
5371244cbSSimon Glass# Check that the u-boot.cfg file provided does not introduce any new
6371244cbSSimon Glass# ad-hoc CONFIG options
7371244cbSSimon Glass#
87b76daabSMasahiro Yamada# Use scripts/build-whitelist.sh to generate the list of current ad-hoc
97b76daabSMasahiro Yamada# CONFIG options (those which are not in Kconfig).
10371244cbSSimon Glass
11371244cbSSimon Glass# Usage
12371244cbSSimon Glass#    check-config.sh <path to u-boot.cfg> <path to whitelist file> <source dir>
13371244cbSSimon Glass#
14371244cbSSimon Glass# For example:
15371244cbSSimon Glass#   scripts/check-config.sh b/chromebook_link/u-boot.cfg kconfig_whitelist.txt .
16371244cbSSimon Glass
17f69dce50SLuca Ceresoliset -e
18f69dce50SLuca Ceresoliset -u
19f69dce50SLuca Ceresoli
20*94ca2690SAndy ShevchenkoPROG_NAME="${0##*/}"
21*94ca2690SAndy Shevchenko
22*94ca2690SAndy Shevchenkousage() {
23*94ca2690SAndy Shevchenko	echo "$PROG_NAME <path to u-boot.cfg> <path to whitelist file> <source dir>"
24*94ca2690SAndy Shevchenko	exit 1
25*94ca2690SAndy Shevchenko}
26*94ca2690SAndy Shevchenko
27*94ca2690SAndy Shevchenko[ $# -ge 3 ] || usage
28*94ca2690SAndy Shevchenko
29371244cbSSimon Glasspath="$1"
30371244cbSSimon Glasswhitelist="$2"
31371244cbSSimon Glasssrctree="$3"
32371244cbSSimon Glass
33371244cbSSimon Glass# Temporary files
34371244cbSSimon Glassconfigs="${path}.configs"
35371244cbSSimon Glasssuspects="${path}.suspects"
36371244cbSSimon Glassok="${path}.ok"
37371244cbSSimon Glassnew_adhoc="${path}.adhoc"
38371244cbSSimon Glass
39371244cbSSimon Glassexport LC_ALL=C
40371244cbSSimon Glassexport LC_COLLATE=C
41371244cbSSimon Glass
42371244cbSSimon Glasscat ${path} |sed -n 's/^#define \(CONFIG_[A-Za-z0-9_]*\).*/\1/p' |sort |uniq \
43371244cbSSimon Glass	>${configs}
44371244cbSSimon Glass
45371244cbSSimon Glasscomm -23 ${configs} ${whitelist} > ${suspects}
46371244cbSSimon Glass
47371244cbSSimon Glasscat `find ${srctree} -name "Kconfig*"` |sed -n \
481f54a47cSBin Meng	-e 's/^\s*config *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \
491f54a47cSBin Meng	-e 's/^\s*menuconfig \([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \
501f54a47cSBin Meng	|sort |uniq > ${ok}
51371244cbSSimon Glasscomm -23 ${suspects} ${ok} >${new_adhoc}
52371244cbSSimon Glassif [ -s ${new_adhoc} ]; then
531bdd942bSMasahiro Yamada	echo >&2 "Error: You must add new CONFIG options using Kconfig"
541bdd942bSMasahiro Yamada	echo >&2 "The following new ad-hoc CONFIG options were detected:"
551bdd942bSMasahiro Yamada	cat >&2 ${new_adhoc}
561bdd942bSMasahiro Yamada	echo >&2
571bdd942bSMasahiro Yamada	echo >&2 "Please add these via Kconfig instead. Find a suitable Kconfig"
581bdd942bSMasahiro Yamada	echo >&2 "file and add a 'config' or 'menuconfig' option."
59371244cbSSimon Glass	# Don't delete the temporary files in case they are useful
60371244cbSSimon Glass	exit 1
61371244cbSSimon Glasselse
62371244cbSSimon Glass	rm ${suspects} ${ok} ${new_adhoc}
63371244cbSSimon Glassfi
64