162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# Linux kernel symbol namespace import generator 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci# This script requires a minimum spatch version. 662306a36Sopenharmony_ciSPATCH_REQ_VERSION="1.0.4" 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciDIR="$(dirname $(readlink -f $0))/.." 962306a36Sopenharmony_ciSPATCH="`which ${SPATCH:=spatch}`" 1062306a36Sopenharmony_ciif [ ! -x "$SPATCH" ]; then 1162306a36Sopenharmony_ci echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/' 1262306a36Sopenharmony_ci exit 1 1362306a36Sopenharmony_cifi 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciSPATCH_VERSION=$($SPATCH --version | head -1 | awk '{print $3}') 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciif ! { echo "$SPATCH_REQ_VERSION"; echo "$SPATCH_VERSION"; } | sort -CV ; then 1862306a36Sopenharmony_ci echo "spatch needs to be version $SPATCH_REQ_VERSION or higher" 1962306a36Sopenharmony_ci exit 1 2062306a36Sopenharmony_cifi 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciif [ "$KBUILD_EXTMOD" ]; then 2362306a36Sopenharmony_ci src_prefix= 2462306a36Sopenharmony_cielse 2562306a36Sopenharmony_ci src_prefix=$srctree/ 2662306a36Sopenharmony_cifi 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cigenerate_deps_for_ns() { 2962306a36Sopenharmony_ci $SPATCH --very-quiet --in-place --sp-file \ 3062306a36Sopenharmony_ci $srctree/scripts/coccinelle/misc/add_namespace.cocci -D nsdeps -D ns=$1 $2 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cigenerate_deps() { 3462306a36Sopenharmony_ci local mod=${1%.ko:} 3562306a36Sopenharmony_ci shift 3662306a36Sopenharmony_ci local namespaces="$*" 3762306a36Sopenharmony_ci local mod_source_files=$(sed "s|^\(.*\)\.o$|${src_prefix}\1.c|" $mod.mod) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci for ns in $namespaces; do 4062306a36Sopenharmony_ci echo "Adding namespace $ns to module $mod.ko." 4162306a36Sopenharmony_ci generate_deps_for_ns $ns "$mod_source_files" 4262306a36Sopenharmony_ci # sort the imports 4362306a36Sopenharmony_ci for source_file in $mod_source_files; do 4462306a36Sopenharmony_ci sed '/MODULE_IMPORT_NS/Q' $source_file > ${source_file}.tmp 4562306a36Sopenharmony_ci offset=$(wc -l ${source_file}.tmp | awk '{print $1;}') 4662306a36Sopenharmony_ci cat $source_file | grep MODULE_IMPORT_NS | LC_ALL=C sort -u >> ${source_file}.tmp 4762306a36Sopenharmony_ci tail -n +$((offset +1)) ${source_file} | grep -v MODULE_IMPORT_NS >> ${source_file}.tmp 4862306a36Sopenharmony_ci if ! diff -q ${source_file} ${source_file}.tmp; then 4962306a36Sopenharmony_ci mv ${source_file}.tmp ${source_file} 5062306a36Sopenharmony_ci else 5162306a36Sopenharmony_ci rm ${source_file}.tmp 5262306a36Sopenharmony_ci fi 5362306a36Sopenharmony_ci done 5462306a36Sopenharmony_ci done 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciwhile read line 5862306a36Sopenharmony_cido 5962306a36Sopenharmony_ci generate_deps $line 6062306a36Sopenharmony_cidone < $MODULES_NSDEPS 61