a98ed5c
#!/bin/bash
a98ed5c
#
a98ed5c
# This script merges together the hierarchy of CONFIG_* files under generic
a98ed5c
# and debug to form the necessary $PACKAGE_NAME<version>-<arch>-<variant>.config
a98ed5c
# files for building RHEL kernels, based on the contents of a control file
a98ed5c
a98ed5c
PACKAGE_NAME=kernel # defines the package name used
a98ed5c
a98ed5c
set errexit
a98ed5c
set nounset
a98ed5c
a98ed5c
control_file="config_generation"
a98ed5c
a98ed5c
function combine_config_layer()
a98ed5c
{
a98ed5c
	dir=$1
a98ed5c
	file="config-$(echo $dir | sed -e 's|/|-|g')"
a98ed5c
a98ed5c
	if [ $(ls $dir/ | grep -c "^CONFIG_") -eq 0 ]; then
a98ed5c
		touch $file
a98ed5c
		return
a98ed5c
	fi
a98ed5c
a98ed5c
	cat $dir/CONFIG_* > $file
a98ed5c
}
a98ed5c
a98ed5c
function merge_configs()
a98ed5c
{
a98ed5c
	archvar=$1
a98ed5c
	arch=$(echo "$archvar" | cut -f1 -d"-")
a98ed5c
	configs=$2
a98ed5c
	name=$PACKAGE_NAME-$archvar.config
a98ed5c
	echo -n "Building $name ... "
a98ed5c
	touch config-merging config-merged
a98ed5c
	for config in $(echo $configs | sed -e 's/:/ /g')
a98ed5c
	do
a98ed5c
		perl merge.pl config-$config config-merging > config-merged
a98ed5c
		if [ ! $? -eq 0 ]; then
a98ed5c
			exit
a98ed5c
		fi
a98ed5c
		mv config-merged config-merging
a98ed5c
	done
a98ed5c
	if [ "x$arch" == "xaarch64" ]; then
a98ed5c
		echo "# arm64" > $name
a98ed5c
	elif [ "x$arch" == "xppc64" ]; then
a98ed5c
		echo "# powerpc" > $name
a98ed5c
	elif [ "x$arch" == "xppc64le" ]; then
a98ed5c
		echo "# powerpc" > $name
a98ed5c
	elif [ "x$arch" == "xppc64p7" ]; then
a98ed5c
		echo "# powerpc" > $name
a98ed5c
	elif [ "x$arch" == "xs390x" ]; then
a98ed5c
		echo "# s390" > $name
a98ed5c
	elif [ "x$arch" == "xarmv7hl" ]; then
a98ed5c
		echo "# arm" > $name
a98ed5c
	elif [ "x$arch" == "xi686" ]; then
a98ed5c
		echo "# i386" > $name
a98ed5c
	else
a98ed5c
		echo "# $arch" > $name
a98ed5c
	fi
a98ed5c
	sort config-merging >> $name
a98ed5c
	rm -f config-merged config-merging
a98ed5c
	echo "done"
a98ed5c
}
a98ed5c
a98ed5c
glist=$(find baseconfig -type d)
a98ed5c
dlist=$(find debugconfig -type d)
a98ed5c
a98ed5c
for d in $glist $dlist
a98ed5c
do
a98ed5c
	combine_config_layer $d
a98ed5c
done
a98ed5c
a98ed5c
while read line
a98ed5c
do
a98ed5c
	if [ $(echo "$line" | grep -c "^#") -ne 0 ]; then
a98ed5c
		continue
a98ed5c
	elif [ $(echo "$line" | grep -c "^$") -ne 0 ]; then
a98ed5c
		continue
a98ed5c
	else
a98ed5c
		arch=$(echo "$line" | cut -f1 -d"=")
a98ed5c
		configs=$(echo "$line" | cut -f2 -d"=")
a98ed5c
a98ed5c
		if [ -n "$SUBARCH" -a "$SUBARCH" != "$arch" ]; then
a98ed5c
			continue
a98ed5c
		fi
a98ed5c
a98ed5c
		merge_configs $arch $configs
a98ed5c
	fi
a98ed5c
done < $control_file
a98ed5c
a98ed5c
rm -f config-*