summaryrefslogtreecommitdiff
path: root/scripts/build/kernel
diff options
context:
space:
mode:
authorYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-06-17 16:30:09 (GMT)
committerYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-06-17 16:30:09 (GMT)
commitc4933a400cc5911014d9cebb0a2a269c0a8747aa (patch)
treef720b4a1641287ab9cb0379e50ac57d1f228faa7 /scripts/build/kernel
parentf99f3208af85ea356acb7d85c544665163030c7a (diff)
kernel/linux: allow headers from full custom source tree
Accept a local tarball name as the source of the Linux kernel headers, rather than forcing the user to use either an upstream tarball, or a local pre-installed headers tree.
Diffstat (limited to 'scripts/build/kernel')
-rw-r--r--scripts/build/kernel/linux.sh57
1 files changed, 49 insertions, 8 deletions
diff --git a/scripts/build/kernel/linux.sh b/scripts/build/kernel/linux.sh
index e5ea57f..a6898d8 100644
--- a/scripts/build/kernel/linux.sh
+++ b/scripts/build/kernel/linux.sh
@@ -17,7 +17,9 @@ CT_DoKernelTupleValues() {
# Download the kernel
do_kernel_get() {
- if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
+ if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" \
+ -a "${CT_KERNEL_LINUX_CUSTOM}" != "y" \
+ ]; then
CT_GetFile "linux-${CT_KERNEL_VERSION}" \
{ftp,http}://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.{6{,/testing},4,2}
fi
@@ -25,9 +27,43 @@ do_kernel_get() {
# Extract kernel
do_kernel_extract() {
+ local tar_opt
if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
- CT_Extract "linux-${CT_KERNEL_VERSION}"
- CT_Patch "linux" "${CT_KERNEL_VERSION}"
+ if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
+ # We extract the custom linux tree into a directory with a
+ # well-known name, and strip the leading directory component
+ # of the extracted pathes. This is needed because we do not
+ # know the value for this first component, because it is a
+ # _custom_ tree.
+ # Also, we have to protect from partial extraction using the
+ # .extracting and .extracted locks (not using .patching and
+ # .patched as we are *not* patching that kernel).
+
+ if [ -e "${CT_SRC_DIR}/.linux-custom.extracted" ]; then
+ CT_DoLog DEBUG "Custom linux kernel tree already extracted"
+ return 0
+ fi
+
+ CT_TestAndAbort "Custom kernel tree partially extracted. Remove before resuming" -f "${CT_SRC_DIR}/.linux-custom.extracting"
+ CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.linux-custom.extracting"
+ CT_DoExecLog DEBUG mkdir "${CT_SRC_DIR}/linux-custom"
+
+ case "${CT_KERNEL_LINUX_CUSTOM_TARBALL}" in
+ *.tar.bz2) tar_opt=-j;;
+ *.tar.gz|*.tgz) tar_opt=-z;;
+ *.tar) ;;
+ *) CT_Abort "Don't know how to handle '${CT_KERNEL_LINUX_CUSTOM_TARBALL}': unknown extension";;
+ esac
+ CT_DoLog EXTRA "Extracting custom linux kernel"
+ CT_DoExecLog ALL tar x -C "${CT_SRC_DIR}/linux-custom" \
+ --strip-components 1 -v ${tar_opt} \
+ -f "${CT_KERNEL_LINUX_CUSTOM_TARBALL}"
+
+ CT_DoExecLog ALL mv -v "${CT_SRC_DIR}/.linux-custom.extracting" "${CT_SRC_DIR}/.linux-custom.extracted"
+ else
+ CT_Extract "linux-${CT_KERNEL_VERSION}"
+ CT_Patch "linux" "${CT_KERNEL_VERSION}"
+ fi
fi
}
@@ -46,17 +82,22 @@ do_kernel_headers() {
# Install kernel headers using headers_install from kernel sources.
do_kernel_install() {
+ local kernel_path
+
CT_DoLog DEBUG "Using kernel's headers_install"
mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
- cd "${CT_BUILD_DIR}/build-kernel-headers"
+ kernel_path="${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}"
+ if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
+ kernel_path="${CT_SRC_DIR}/linux-custom"
+ fi
V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
CT_DoLog EXTRA "Installing kernel headers"
CT_DoExecLog ALL \
- make -C "${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}" \
- O=$(pwd) \
+ make -C "${kernel_path}" \
+ O="${CT_BUILD_DIR}/build-kernel-headers" \
ARCH=${CT_ARCH} \
INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr" \
${V_OPT} \
@@ -65,8 +106,8 @@ do_kernel_install() {
if [ "${CT_KERNEL_LINUX_INSTALL_CHECK}" = "y" ]; then
CT_DoLog EXTRA "Checking installed headers"
CT_DoExecLog ALL \
- make -C "${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}" \
- O=$(pwd) \
+ make -C "${kernel_path}" \
+ O="${CT_BUILD_DIR}/build-kernel-headers" \
ARCH=${CT_ARCH} \
INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr" \
${V_OPT} \