#!/bin/bash

############################################################################
#
# Script for generating a kernel source tree with the SCST patches applied.
#
# Copyright (C) 2010 Bart Van Assche <bvanassche@acm.org>
#
# 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 usage {
  echo "Usage: $0 <kernel version>"
}


script_dir="$(dirname "$0")"
if [ "${script_dir#/}" = "${script_dir}" ]; then
  script_dir="$PWD/$script_dir"
fi
scriptdir="${scriptdir%/.}"
scst_dir="$(dirname "${script_dir}")"

# shellcheck source=./kernel-functions
source "${script_dir}/kernel-functions"

if [ "$1" = "" ]; then
  echo "Error: missing kernel version argument."
  exit 1
fi

target="linux-$1"
kernel_version="$(kernel_version "$1")"
patchlevel="$(patchlevel "$1")"

download_and_extract_kernel_tree "$1" || exit $?

cd "${target}" || exit $?

"${script_dir}/list-source-files" "${scst_dir}" |
  grep -- "-${kernel_version}.*.patch$" |
  grep -v /in-tree/ |
  while read -r p; do
    if [ "${p/readahead-2.6.32.below11.patch//}" = "$p" ] ||
       [ "${patchlevel:-0}" -lt 11 ]; then
      echo "==== $p"
      patch -p1 <"${scst_dir}/$p"
    fi
  done
