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