scripts/build/kernel/linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jan 22 23:20:18 2011 +0100 (2011-01-22)
changeset 2305 2ed26c646568
parent 2264 1452840382bb
child 2567 92e02b41d2d1
permissions -rw-r--r--
scripts: create the makeinfo wrapper before we set PATH

If we set PATH to the tools wrappers before we create the
makeinfo wrapper, then we may well wrap an existing wrapper
from a previous run.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1345
     1
# This file declares functions to install the kernel headers for linux
yann@1345
     2
# Copyright 2007 Yann E. MORIN
yann@1345
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1345
     4
yann@1345
     5
CT_DoKernelTupleValues() {
yann@1345
     6
    if [ "${CT_ARCH_USE_MMU}" = "y" ]; then
yann@1345
     7
        CT_TARGET_KERNEL="linux"
yann@1345
     8
    else
thomas@1910
     9
    # Sometime, noMMU linux targets have a -uclinux tuple, while
thomas@1910
    10
    # sometime it's -linux. We currently have only one noMMU linux
thomas@1910
    11
    # target, and it uses -linux, so let's just use that. Time
thomas@1910
    12
    # to fix that later...
thomas@1910
    13
    #    CT_TARGET_KERNEL="uclinux"
thomas@1910
    14
        CT_TARGET_KERNEL="linux"
yann@1345
    15
    fi
yann@1345
    16
}
yann@1345
    17
yann@1345
    18
# Download the kernel
yann@1345
    19
do_kernel_get() {
yann@2264
    20
    local k_ver
yann@1990
    21
    if [    "${CT_KERNEL_LINUX_INSTALL}" = "y"  \
yann@1990
    22
         -a "${CT_KERNEL_LINUX_CUSTOM}" != "y"  \
yann@1990
    23
       ]; then
yann@2264
    24
        case "${CT_KERNEL_VERSION}" in
yann@2264
    25
            ?*.?*.?*.?*)
yann@2264
    26
                # 4-part version, we need only first three digits
yann@2264
    27
                k_ver="${CT_KERNEL_VERSION%.*}"
yann@2264
    28
                ;;
yann@2264
    29
            *)  # 3-part version, use all of it
yann@2264
    30
                k_ver="${CT_KERNEL_VERSION}"
yann@2264
    31
                ;;
yann@2264
    32
        esac
yann@2265
    33
        CT_GetFile "linux-${CT_KERNEL_VERSION}"                             \
yann@2265
    34
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.6    \
yann@2265
    35
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.6/longterm/v${k_ver}
yann@1345
    36
    fi
yann@1345
    37
}
yann@1345
    38
yann@1345
    39
# Extract kernel
yann@1345
    40
do_kernel_extract() {
yann@1990
    41
    local tar_opt
yann@1989
    42
    if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
yann@1990
    43
        if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@1990
    44
            # We extract the custom linux tree into a directory with a
yann@1990
    45
            # well-known name, and strip the leading directory component
yann@1990
    46
            # of the extracted pathes. This is needed because we do not
yann@1990
    47
            # know the value for this first component, because it is a
yann@1990
    48
            # _custom_ tree.
yann@1990
    49
            # Also, we have to protect from partial extraction using the
yann@1990
    50
            # .extracting and .extracted locks (not using .patching and
yann@1990
    51
            # .patched as we are *not* patching that kernel).
yann@1990
    52
yann@1990
    53
            if [ -e "${CT_SRC_DIR}/.linux-custom.extracted" ]; then
yann@1990
    54
                CT_DoLog DEBUG "Custom linux kernel tree already extracted"
yann@1990
    55
                return 0
yann@1990
    56
            fi
yann@1990
    57
yann@1990
    58
            CT_TestAndAbort "Custom kernel tree partially extracted. Remove before resuming" -f "${CT_SRC_DIR}/.linux-custom.extracting"
yann@1990
    59
            CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.linux-custom.extracting"
yann@1990
    60
            CT_DoExecLog DEBUG mkdir "${CT_SRC_DIR}/linux-custom"
yann@1990
    61
yann@1990
    62
            case "${CT_KERNEL_LINUX_CUSTOM_TARBALL}" in
yann@1990
    63
                *.tar.bz2)      tar_opt=-j;;
yann@1990
    64
                *.tar.gz|*.tgz) tar_opt=-z;;
yann@1990
    65
                *.tar)          ;;
yann@1990
    66
                *)              CT_Abort "Don't know how to handle '${CT_KERNEL_LINUX_CUSTOM_TARBALL}': unknown extension";;
yann@1990
    67
            esac
yann@1990
    68
            CT_DoLog EXTRA "Extracting custom linux kernel"
yann@1990
    69
            CT_DoExecLog ALL tar x -C "${CT_SRC_DIR}/linux-custom"      \
yann@1990
    70
                                 --strip-components 1 -v ${tar_opt}     \
yann@1990
    71
                                 -f "${CT_KERNEL_LINUX_CUSTOM_TARBALL}"
yann@1990
    72
yann@1990
    73
            CT_DoExecLog ALL mv -v "${CT_SRC_DIR}/.linux-custom.extracting" "${CT_SRC_DIR}/.linux-custom.extracted"
yann@1990
    74
        else
yann@1990
    75
            CT_Extract "linux-${CT_KERNEL_VERSION}"
yann@1990
    76
            CT_Patch "linux" "${CT_KERNEL_VERSION}"
yann@1990
    77
        fi
yann@1345
    78
    fi
yann@1345
    79
}
yann@1345
    80
yann@1345
    81
# Wrapper to the actual headers install method
yann@1345
    82
do_kernel_headers() {
yann@1345
    83
    CT_DoStep INFO "Installing kernel headers"
yann@1345
    84
yann@1989
    85
    if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
yann@1989
    86
        do_kernel_install
yann@1989
    87
    else
yann@1345
    88
        do_kernel_custom
yann@1345
    89
    fi
yann@1345
    90
yann@1345
    91
    CT_EndStep
yann@1345
    92
}
yann@1345
    93
yann@1345
    94
# Install kernel headers using headers_install from kernel sources.
yann@1345
    95
do_kernel_install() {
yann@1990
    96
    local kernel_path
yann@1990
    97
yann@1345
    98
    CT_DoLog DEBUG "Using kernel's headers_install"
yann@1345
    99
yann@1345
   100
    mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
yann@1345
   101
yann@1990
   102
    kernel_path="${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}"
yann@1990
   103
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@1990
   104
        kernel_path="${CT_SRC_DIR}/linux-custom"
yann@1990
   105
    fi
yann@1345
   106
    V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
yann@1345
   107
yann@1345
   108
    CT_DoLog EXTRA "Installing kernel headers"
yann@1345
   109
    CT_DoExecLog ALL                                    \
yann@1990
   110
    make -C "${kernel_path}"                            \
yann@1990
   111
         O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   112
         ARCH=${CT_ARCH}                                \
yann@1345
   113
         INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   114
         ${V_OPT}                                       \
yann@1345
   115
         headers_install
yann@1345
   116
yann@1345
   117
    if [ "${CT_KERNEL_LINUX_INSTALL_CHECK}" = "y" ]; then
yann@1345
   118
        CT_DoLog EXTRA "Checking installed headers"
yann@1345
   119
        CT_DoExecLog ALL                                    \
yann@1990
   120
        make -C "${kernel_path}"                            \
yann@1990
   121
             O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   122
             ARCH=${CT_ARCH}                                \
yann@1345
   123
             INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   124
             ${V_OPT}                                       \
yann@1345
   125
             headers_check
yann@1345
   126
    fi
bryanhundven@2228
   127
bryanhundven@2228
   128
    # Cleanup
bryanhundven@2228
   129
    find "${CT_SYSROOT_DIR}" -type f                        \
bryanhundven@2228
   130
                             \(    -name '.install'         \
bryanhundven@2228
   131
                                -o -name '..install.cmd'    \
bryanhundven@2228
   132
                                -o -name '.check'           \
bryanhundven@2228
   133
                                -o -name '..check.cmd'      \
bryanhundven@2228
   134
                             \)                             \
bryanhundven@2228
   135
                             -exec rm {} \;
yann@1345
   136
}
yann@1345
   137
yann@1345
   138
# Use custom headers (most probably by using make headers_install in a
yann@1345
   139
# modified (read: customised) kernel tree, or using pre-2.6.18 headers, such
yann@1345
   140
# as 2.4). In this case, simply copy the headers in place
yann@1345
   141
do_kernel_custom() {
yann@1345
   142
    local tar_opt
yann@1345
   143
yann@1345
   144
    CT_DoLog EXTRA "Installing custom kernel headers"
yann@1345
   145
yann@1345
   146
    mkdir -p "${CT_SYSROOT_DIR}/usr"
yann@1345
   147
    cd "${CT_SYSROOT_DIR}/usr"
yann@1345
   148
    if [ "${CT_KERNEL_LINUX_CUSTOM_IS_TARBALL}" = "y" ]; then
yann@1345
   149
        case "${CT_KERNEL_LINUX_CUSTOM_PATH}" in
yann@1345
   150
            *.tar)      ;;
yann@1345
   151
            *.tgz)      tar_opt=--gzip;;
yann@1345
   152
            *.tar.gz)   tar_opt=--gzip;;
yann@1345
   153
            *.tar.bz2)  tar_opt=--bzip2;;
yann@1345
   154
            *.tar.lzma) tar_opt=--lzma;;
yann@1345
   155
        esac
yann@1345
   156
        CT_DoExecLog ALL tar x ${tar_opt} -vf ${CT_KERNEL_LINUX_CUSTOM_PATH}
yann@1345
   157
    else
yann@1345
   158
        CT_DoExecLog ALL cp -rv "${CT_KERNEL_LINUX_CUSTOM_PATH}/include" .
yann@1345
   159
    fi
yann@1345
   160
}