linux-imx/scripts/nsdeps
Jessica Yu 0968495005 scripts/nsdeps: use alternative sed delimiter
When doing an out of tree build with O=, the nsdeps script constructs
the absolute pathname of the module source file so that it can insert
MODULE_IMPORT_NS statements in the right place. However, ${srctree}
contains an unescaped path to the source tree, which, when used in a sed
substitution, makes sed complain:

++ sed 's/[^ ]* *//home/jeyu/jeyu-linux\/&/g'
sed: -e expression #1, char 12: unknown option to `s'

The sed substitution command 's' ends prematurely with the forward
slashes in the pathname, and sed errors out when it encounters the 'h',
which is an invalid sed substitution option. To avoid escaping forward
slashes ${srctree}, we can use '|' as an alternative delimiter for
sed instead to avoid this error.

Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Matthias Maennich <maennich@google.com>
Tested-by: Matthias Maennich <maennich@google.com>
Signed-off-by: Jessica Yu <jeyu@kernel.org>
2019-10-23 11:21:06 +02:00

1.9 KiB

#!/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