#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Linux kernel symbol namespace import generator
#
# This script requires a minimum spatch version.
SPATCH_REQ_VERSION="1.0.4"

DIR="$(dirname $(readlink -f $0))/.."
SPATCH="`which ${SPATCH:=spatch}`"
if [ ! -x "$SPATCH" ]; then
	echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
	exit 1
fi

SPATCH_REQ_VERSION_NUM=$(echo $SPATCH_REQ_VERSION | ${DIR}/scripts/ld-version.sh)
SPATCH_VERSION=$($SPATCH --version | head -1 | awk '{print $3}')
SPATCH_VERSION_NUM=$(echo $SPATCH_VERSION | ${DIR}/scripts/ld-version.sh)

if [ "$SPATCH_VERSION_NUM" -lt "$SPATCH_REQ_VERSION_NUM" ] ; then
	echo "spatch needs to be version $SPATCH_REQ_VERSION or higher"
	exit 1
fi

generate_deps_for_ns() {
	$SPATCH --very-quiet --in-place --sp-file \
		$srctree/scripts/coccinelle/misc/add_namespace.cocci -D ns=$1 $2
}

generate_deps() {
	local mod_name=`basename $@ .ko`
	local mod_file=`echo $@ | sed -e 's/\.ko/\.mod/'`
	local ns_deps_file=`echo $@ | sed -e 's/\.ko/\.ns_deps/'`
	if [ ! -f "$ns_deps_file" ]; then return; fi
	local mod_source_files="`cat $mod_file | sed -n 1p                      \
					      | sed -e 's/\.o/\.c/g'           \
					      | sed "s|[^ ]* *|${srctree}/&|g"`"
	for ns in `cat $ns_deps_file`; do
		echo "Adding namespace $ns to module $mod_name (if needed)."
		generate_deps_for_ns $ns "$mod_source_files"
		# sort the imports
		for source_file in $mod_source_files; do
			sed '/MODULE_IMPORT_NS/Q' $source_file > ${source_file}.tmp
			offset=$(wc -l ${source_file}.tmp | awk '{print $1;}')
			cat $source_file | grep MODULE_IMPORT_NS | LANG=C sort -u >> ${source_file}.tmp
			tail -n +$((offset +1)) ${source_file} | grep -v MODULE_IMPORT_NS >> ${source_file}.tmp
			if ! diff -q ${source_file} ${source_file}.tmp; then
				mv ${source_file}.tmp ${source_file}
			else
				rm ${source_file}.tmp
			fi
		done
	done
}

for f in `cat $objtree/modules.order`; do
	generate_deps $f
done

