Kconfig: Add a whitelist of ad-hoc CONFIG options

Add a list of ad-hoc CONFIG options that don't use Kconfig. This can be used
to check that new ones are not being added.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/scripts/build-whitelist.sh b/scripts/build-whitelist.sh
new file mode 100755
index 0000000..7cf7a66
--- /dev/null
+++ b/scripts/build-whitelist.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+# Copyright (c) 2016 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+
+# This script creates the configuration whitelist file. This file contains
+# all the config options which are allowed to be used outside Kconfig.
+# Please do not add things to the whitelist. Instead, add your new option
+# to Kconfig.
+#
+export LC_ALL=C LC_COLLATE=C
+
+# There are two independent greps. The first pulls out the component parts
+# of CONFIG_SYS_EXTRA_OPTIONS. An example is:
+#
+#	SUNXI_GMAC,AHCI,SATAPWR=SUNXI_GPB(8)
+#
+# We want this to produce:
+#	CONFIG_SUNXI_GMAC
+#	CONFIG_AHCI
+#	CONFIG_SATAPWR
+#
+# The second looks for the rest of the CONFIG options, but excludes those in
+# Kconfig and defconfig files.
+#
+(
+git grep CONFIG_SYS_EXTRA_OPTIONS |sed -n \
+	's/.*CONFIG_SYS_EXTRA_OPTIONS="\(.*\)"/\1/ p' \
+	| tr , '\n' \
+	| sed 's/ *\([A-Za-z0-9_]*\).*/CONFIG_\1/'
+
+git grep CONFIG_ | \
+	egrep -vi "(Kconfig:|defconfig:|README|\.py|\.pl:)" \
+	| tr ' \t' '\n\n' \
+	| sed -n 's/^\(CONFIG_[A-Za-z0-9_]*\).*/\1/p'
+) \
+	|sort |uniq >scripts/config_whitelist.txt.tmp1;
+
+# Finally, we need a list of the valid Kconfig options to exclude these from
+# the whitelist.
+cat `find . -name "Kconfig*"` |sed -n \
+	-e 's/^config *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \
+	-e 's/^menuconfig *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \
+	|sort |uniq >scripts/config_whitelist.txt.tmp2
+
+# Use only the options that are present in the first file but not the second.
+comm -23 scripts/config_whitelist.txt.tmp1 scripts/config_whitelist.txt.tmp2 \
+	|sort |uniq >scripts/config_whitelist.txt
+rm scripts/config_whitelist.txt.tmp1 scripts/config_whitelist.txt.tmp2
+
+unset LC_ALL LC_COLLATE