#!/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 # # 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 [-m] [-q] ." } # 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 <&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/ # 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 scst/include/*h do add_file "${f}" "include/scst/${f#scst/include/}" done for f in iscsi-scst/include/*h do add_file "${f}" "include/scst/${f#iscsi-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" "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/ add_file "iscsi-scst/kernel/Makefile.in-kernel" \ "drivers/scst/iscsi-scst/Makefile" add_file "iscsi-scst/kernel/Kconfig" "drivers/scst/iscsi-scst/Kconfig" add_file "iscsi-scst/README" "Documentation/scst/README.iscsi" 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-kernel" \ # "drivers/scst/qla2x00-target/Makefile" #add_file "qla2x00t/qla2x00-target/Kconfig" \ # "drivers/scst/qla2x00-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/qla2x00-target/${f#qla2x00t/qla2x00-target/}" done fi # Directory drivers/infiniband/ulp/srpt/ add_patch "srpt/src/Kconfig.infiniband.Linux-${kernel_version}.patch" \ "drivers/infiniband/Kconfig" add_patch "srpt/src/Makefile.infiniband.Linux-${kernel_version}.patch" \ "drivers/infiniband/Makefile" add_file "srpt/src/Kconfig" "drivers/infiniband/ulp/srpt/Kconfig" add_file "srpt/src/Makefile.in_kernel" "drivers/infiniband/ulp/srpt/Makefile" add_file "srpt/README" "Documentation/scst/README.srpt" for f in srpt/src/*.[ch] do add_file "${f}" "drivers/infiniband/ulp/srpt/${f#srpt/src/}" done # 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