Files
scst/scripts/generate-kernel-patch
Vladislav Bolkhovitin eb7c33a0b0 As known the script generate-kernel-patch generates a patch for the specified
vanilla Linux kernel version. When I submitted this script for inclusion in the
SCST Subversion repository the SRPT target driver was excluded by default
because of checkpatch errors triggered by the SRPT source code. These errors
have been fixed considerable time ago. Hence the patch below makes inclusion
of the SRPT driver the default.

This patch has been tested by verifying that the generated patch still applies
cleanly to the 2.6.25.17 kernel, and that the patched kernel still compiles cleanly.

Signed-off-by: Bart Van Assche <bart.vanassche@gmail.com>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@511 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2008-10-06 17:15:08 +00:00

267 lines
6.6 KiB
Bash
Executable File

#!/bin/bash
############################################################################
#
# Script for converting the SCST source tree as it exists in the Subversion
# repository to a Linux kernel patch.
#
# Copyright (C) 2008 Bart Van Assche <bart.vanassche@gmail.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, version 2
# of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
############################################################################
########################
# Function definitions #
########################
function usage {
echo "Usage: $0 [-q] [-s] [-m] <kernel version>, where: "
echo " -q - add qla2x00t driver"
echo " -s - exclude srpt driver"
echo " -m - add mpt target driver"
}
# Convert an existing patch.
# $1: path of patch to be added.
# $2: path in kernel tree of file to be patched.
function add_patch {
if [ ! -e "$1" ]; then
echo "Error: could not find $1." >&2
exit 1
fi
sed -e "s:^--- [^ ]*:--- orig/linux-${kernel_version}/$2:" \
-e "s:^+++ [^ ]*:+++ linux-${kernel_version}/$2:" \
< "$1"
}
# Generate a patch for a file to be added to the kernel source tree, and strip
# trailing whitespace from C source files while converting the file to patch
# format.
# $1: path of file to be added.
# $2: path in kernel tree where file should be added.
function add_file {
local a b
if [ ! -e "$1" ]; then
echo "Error: could not find $1." >&2
exit 1
fi
# Only include files that were not generated by the build process
# -- skip *.mod.c.
if [ "$1" = "${1%.mod.c}" -a "$1" ]; then
cat <<EOF
diff -uprN orig/linux-${kernel_version}/$2 linux-${kernel_version}/$2
--- orig/linux-${kernel_version}/$2
+++ linux-${kernel_version}/$2
@@ -0,0 +1,$(wc -l "$1" | { read a b; echo $a; }) @@
EOF
if [ "${2%.[ch]}" != "$2" ]; then
sed -e 's/sBUG(/BUG(/g' -e 's/sBUG_ON(/BUG_ON(/g' -e 's/^/+/' \
-e 's/^ \([^ ]*:\)$/\1/' < "$1"
else
sed -e 's/sBUG(/BUG(/g' -e 's/sBUG_ON(/BUG_ON(/g' -e 's/^/+/' < "$1"
fi
fi
}
#########################
# Argument verification #
#########################
qla2x00t="false"
srpt="true"
mpt_scst="false"
if [ ! -e scst -o ! -e iscsi-scst -o ! -e srpt ]; then
echo "Please run this script from inside the SCST subversion source tree."
exit 1
fi
set -- $(/usr/bin/getopt hmqs "$@")
while [ "$1" != "${1#-}" ]
do
case "$1" in
'-h') usage; exit 1;;
'-m') mpt_scst="true"; shift;;
'-q') qla2x00t="true"; shift;;
'-s') srpt="false"; shift;;
'--') shift;;
*) usage; exit 1;;
esac
done
if [ $# != 1 ]; then
usage
exit 1
fi
####################
# Patch Generation #
####################
kernel_version="$1"
kpatch=( \
"scst/kernel/scst_exec_req_fifo-${kernel_version}.patch" \
"iscsi-scst/kernel/patches/put_page_callback-${kernel_version}.patch" \
)
for p in "${kpatch[@]}"
do
if [ ! -e "$p" ]; then
echo "Error: kernel version ${kernel_version} is not supported by SCST."
echo "(could not find file $p)."
exit 1
fi >&2
done
# Redirect the output of all subsequent commands to the specialize-patch script
trap "rm -f ${fifo}" EXIT
fifo=/tmp/generate-kernel-patch-fifo.$$
rm -f "${fifo}"
mkfifo "${fifo}"
"$(dirname $0)/specialize-patch" -v kernel_version="${kernel_version}" \
< "${fifo}" &
exec >"${fifo}"
# General kernel patches.
cat "${kpatch[@]}"
# Directory include/scst/
for f in scst/include/*h
do
add_file "${f}" "include/scst/${f#scst/include/}"
done
# Directory drivers/
add_patch "scst/kernel/in-tree/Kconfig.drivers.Linux-${kernel_version}.patch" \
"drivers/Kconfig"
add_patch "scst/kernel/in-tree/Makefile.drivers.Linux-${kernel_version}.patch"\
"drivers/Makefile"
# Directory drivers/scst/
add_file "scst/kernel/in-tree/Kconfig.scst" "drivers/scst/Kconfig"
add_file "scst/kernel/in-tree/Makefile.scst" "drivers/scst/Makefile"
add_file "scst/README_in-tree" "Documentation/scst/README.scst"
for f in scst/src/*.[ch]
do
add_file "${f}" "drivers/scst/${f#scst/src/}"
done
# Directory drivers/scst/dev_handlers/
add_file "scst/kernel/in-tree/Makefile.dev_handlers" \
"drivers/scst/dev_handlers/Makefile"
for f in scst/src/dev_handlers/*.[ch]
do
add_file "${f}" "drivers/scst/dev_handlers/${f#scst/src/dev_handlers/}"
done
# Directory drivers/scst/iscsi-scst/
# Make sure the file iscsi-scst/iscsi_scst_itf_ver.h is up to date.
make -s -C iscsi-scst include/iscsi_scst_itf_ver.h
for f in iscsi-scst/include/*h
do
add_file "${f}" "include/scst/${f#iscsi-scst/include/}"
done
add_file "iscsi-scst/kernel/Makefile.in-kernel" \
"drivers/scst/iscsi-scst/Makefile"
add_file "iscsi-scst/kernel/Kconfig" "drivers/scst/iscsi-scst/Kconfig"
for f in iscsi-scst/kernel/*.[ch]
do
add_file "${f}" "drivers/scst/iscsi-scst/${f#iscsi-scst/kernel/}"
done
# Directory drivers/scst/qla2x00-target/
if [ "${qla2x00t}" = "true" ]; then
add_file "qla2x00t/qla2x00-target/Makefile_in-tree" \
"drivers/scst/qla2xxx-target/Makefile"
add_file "qla2x00t/qla2x00-target/Kconfig" \
"drivers/scst/qla2xxx-target/Kconfig"
#add_file "qla2x00t/qla2x_tgt_def.h" \
# "drivers/scst/qla2x00-target/qla2x_tgt_def.h"
# add_file "qla2x00t/qla2x00-target/README" \
# "Documentation/scst/README.qla2x00t"
for f in qla2x00t/qla2x00-target/*.[ch]
do
add_file "${f}" "drivers/scst/qla2xxx-target/${f#qla2x00t/qla2x00-target/}"
done
fi
# Directory drivers/infiniband/ulp/srpt/
if [ "$srpt" = "true" ]; then
add_file "srpt/src/Kconfig" "drivers/scst/srpt/Kconfig"
add_file "srpt/src/Makefile.in_kernel" "drivers/scst/srpt/Makefile"
add_file "srpt/README" "Documentation/scst/README.srpt"
for f in srpt/src/*.[ch]
do
add_file "${f}" "drivers/scst/srpt/${f#srpt/src/}"
done
fi
# Directory drivers/message/fusion/mpt_scst
if [ "$mpt_scst" = "true" ]; then
add_patch "mpt/in-tree/Kconfig-2.6.24.diff" "drivers/message/fusion/Kconfig"
add_patch "mpt/in-tree/Makefile.diff" "drivers/message/fusion/Makefile"
add_file "mpt/Makefile" "drivers/message/fusion/mpt_scst/Makefile"
add_file "mpt/Kconfig" "drivers/message/fusion/mpt_scst/Kconfig"
for f in mpt/*.[ch]
do
add_file "${f}" "drivers/message/fusion/mpt_scst/${f#mpt/}"
done
fi