scripts/build/libc/glibc-eglibc.sh-common
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Aug 19 00:52:05 2011 +0200 (2011-08-19)
branch1.12
changeset 2633 22e779b0a4ed
parent 2542 5efe494cf718
child 2585 45ef0b0660a5
child 2711 c5c8fd92fde9
permissions -rw-r--r--
scripts: simplify and fix the toolchain config script

The script that is installed, and which sole purpose is to dump
the .config that was used to build the toolchain, is pure insanity.

Let's make it much, much more simpler...

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
(transplanted from 814ea73df7e0fab3db1cbe7623932714359c732b)
yann@2270
     1
# This file contains the functions common to glibc and eglibc
yann@850
     2
yann@2483
     3
# Extract the C library tarball(s)
yann@2483
     4
do_libc_extract() {
yann@2483
     5
    local addon
yann@2483
     6
yann@2483
     7
    # Extract the main tarball
yann@2483
     8
    CT_Extract "${CT_LIBC}-${CT_LIBC_VERSION}"
yann@2483
     9
    CT_Pushd "${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
yann@2483
    10
    CT_Patch nochdir "${CT_LIBC}" "${CT_LIBC_VERSION}"
yann@2483
    11
yann@2483
    12
    # Extract the add-opns
yann@2483
    13
    for addon in $(do_libc_add_ons_list " "); do
yann@2496
    14
        # If the addon was bundled with the main archive, we do not
yann@2496
    15
        # need to extract it. Worse, if we were to try to extract
yann@2496
    16
        # it, we'd get an error.
yann@2496
    17
        if [ -d "${addon}" ]; then
yann@2496
    18
            CT_DoLog DEBUG "Add-on already present, spkipping extraction"
yann@2496
    19
            continue
yann@2496
    20
        fi
yann@2483
    21
yann@2483
    22
        CT_Extract nochdir "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    23
yann@2483
    24
        CT_TestAndAbort "Error in add-on '${addon}': both short and long names in tarball" \
yann@2483
    25
            -d "${addon}" -a -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    26
yann@2483
    27
        # Some addons have the 'long' name, while others have the
yann@2483
    28
        # 'short' name, but patches are non-uniformly built with
yann@2483
    29
        # either the 'long' or 'short' name, whatever the addons name
yann@2483
    30
        # but we prefer the 'short' name and avoid duplicates.
yann@2483
    31
        if [ -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" ]; then
yann@2483
    32
            mv "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" "${addon}"
yann@2483
    33
        fi
yann@2483
    34
yann@2483
    35
        ln -s "${addon}" "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    36
yann@2483
    37
        CT_Patch nochdir "${CT_LIBC}" "${addon}-${CT_LIBC_VERSION}"
yann@2483
    38
yann@2483
    39
        # Remove the long name since it can confuse configure scripts to run
yann@2483
    40
        # the same source twice.
yann@2483
    41
        rm "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    42
    done
yann@2483
    43
yann@2483
    44
    # The configure files may be older than the configure.in files
yann@2483
    45
    # if using a snapshot (or even some tarballs). Fake them being
yann@2483
    46
    # up to date.
yann@2483
    47
    find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL
yann@2483
    48
yann@2483
    49
    CT_Popd
yann@2483
    50
}
yann@2483
    51
yann@2270
    52
# Build and install headers and start files
yann@850
    53
do_libc_start_files() {
bryanhundven@2515
    54
    # Start files and Headers should be configured the same way as the
bryanhundven@2515
    55
    # final libc, but built and installed differently.
bryanhundven@2515
    56
    do_libc_backend libc_mode=startfiles
yann@850
    57
}
yann@850
    58
yann@2270
    59
# This function builds and install the full C library
yann@850
    60
do_libc() {
bryanhundven@2515
    61
    do_libc_backend libc_mode=final
bryanhundven@2515
    62
}
bryanhundven@2515
    63
bryanhundven@2515
    64
do_libc_backend() {
yann@2271
    65
    local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
bryanhundven@2515
    66
    local libc_mode=final
yann@2276
    67
    local extra_cc_args
yann@1478
    68
    local -a extra_config
yann@2271
    69
    local -a extra_make_args
yann@2312
    70
    local glibc_cflags
yann@1478
    71
bryanhundven@2515
    72
    while [ $# -ne 0 ]; do
yann@2542
    73
        eval "${1// /\\ }"
bryanhundven@2515
    74
        shift
bryanhundven@2515
    75
    done
yann@850
    76
bryanhundven@2515
    77
    if [ "${libc_mode}" = "startfiles" ]; then
bryanhundven@2515
    78
        CT_DoStep INFO "Installing C library headers & start files"
bryanhundven@2515
    79
        mkdir -p "${CT_BUILD_DIR}/build-libc-start-files"
bryanhundven@2515
    80
        cd "${CT_BUILD_DIR}/build-libc-start-files"
bryanhundven@2515
    81
    else # libc_mode = final
bryanhundven@2515
    82
        CT_DoStep INFO "Installing C library"
bryanhundven@2515
    83
        mkdir -p "${CT_BUILD_DIR}/build-libc"
bryanhundven@2515
    84
        cd "${CT_BUILD_DIR}/build-libc"
bryanhundven@2515
    85
    fi
yann@850
    86
yann@850
    87
    CT_DoLog EXTRA "Configuring C library"
yann@850
    88
yann@2271
    89
    case "${CT_LIBC}" in
yann@2271
    90
        eglibc)
yann@2271
    91
            if [ "${CT_EGLIBC_CUSTOM_CONFIG}" = "y" ]; then
yann@2271
    92
                CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/eglibc.config" option-groups.config
yann@2271
    93
            fi
yann@2271
    94
            if [ "${CT_EGLIBC_OPT_SIZE}" = "y" ]; then
yann@2271
    95
                OPTIMIZE=-Os
yann@2271
    96
            else
yann@2271
    97
                OPTIMIZE=-O2
yann@2271
    98
            fi
yann@2271
    99
            ;;
yann@2276
   100
        glibc)
yann@2276
   101
            # glibc can't be built without -O2 (reference needed!)
yann@2276
   102
            OPTIMIZE=-O2
yann@2276
   103
            # Also, if those two are missing, iconv build breaks
yann@2276
   104
            extra_config+=( --disable-debug --disable-sanity-checks )
yann@2276
   105
            ;;
yann@2271
   106
    esac
richard@1796
   107
yann@850
   108
    # Add some default glibc config options if not given by user.
yann@850
   109
    # We don't need to be conditional on wether the user did set different
yann@2467
   110
    # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY is passed after
yann@2467
   111
    # extra_config
yann@850
   112
yann@2273
   113
    extra_config+=("$(do_libc_min_kernel_config)")
yann@850
   114
yann@850
   115
    case "${CT_THREADS}" in
yann@1478
   116
        nptl)           extra_config+=("--with-__thread" "--with-tls");;
yann@1478
   117
        linuxthreads)   extra_config+=("--with-__thread" "--without-tls" "--without-nptl");;
yann@1478
   118
        none)           extra_config+=("--without-__thread" "--without-nptl")
yann@2467
   119
                        case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in
yann@850
   120
                            *-tls*) ;;
yann@1478
   121
                            *) extra_config+=("--without-tls");;
yann@850
   122
                        esac
yann@850
   123
                        ;;
yann@850
   124
    esac
yann@850
   125
yann@850
   126
    case "${CT_SHARED_LIBS}" in
yann@1478
   127
        y) extra_config+=("--enable-shared");;
yann@1478
   128
        *) extra_config+=("--disable-shared");;
yann@850
   129
    esac
yann@850
   130
yann@850
   131
    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
yann@1478
   132
        y,) extra_config+=("--with-fp");;
yann@1478
   133
        ,y) extra_config+=("--without-fp");;
yann@850
   134
    esac
yann@850
   135
bryanhundven@2180
   136
    if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then
bryanhundven@2180
   137
        extra_config+=("--disable-versioning")
bryanhundven@2180
   138
    fi
bryanhundven@2180
   139
bryanhundven@2181
   140
    if [ "${CT_LIBC_OLDEST_ABI}" != "" ]; then
bryanhundven@2181
   141
        extra_config+=("--enable-oldest-abi=${CT_LIBC_OLDEST_ABI}")
bryanhundven@2181
   142
    fi
bryanhundven@2181
   143
yann@850
   144
    case "$(do_libc_add_ons_list ,)" in
benoit@2573
   145
        "") extra_config+=("--enable-add-ons=no");;
yann@1478
   146
        *)  extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");;
yann@850
   147
    esac
yann@850
   148
benoit@2489
   149
    if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   150
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   151
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2489
   152
    fi
benoit@2489
   153
yann@850
   154
    extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
yann@850
   155
yann@2289
   156
    touch config.cache
yann@2289
   157
    if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then
yann@2289
   158
        echo "libc_cv_forced_unwind=yes" >>config.cache
yann@2289
   159
        echo "libc_cv_c_cleanup=yes" >>config.cache
yann@2289
   160
    fi
yann@2289
   161
yann@2276
   162
    # Pre-seed the configparms file with values from the config option
yann@2276
   163
    printf "${CT_LIBC_GLIBC_CONFIGPARMS}\n" > configparms
yann@2276
   164
benoit@2489
   165
    cross_cc=$(CT_Which "${CT_TARGET}-gcc")
yann@850
   166
yann@850
   167
    CT_DoLog DEBUG "Using gcc for target:     '${cross_cc}'"
yann@850
   168
    CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'"
yann@1478
   169
    CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
yann@850
   170
    CT_DoLog DEBUG "Extra CC args passed    : '${extra_cc_args}'"
yann@850
   171
yann@2312
   172
    glibc_cflags="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} ${OPTIMIZE}"
yann@2312
   173
    case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in
yann@2312
   174
        y)  ;;
yann@2312
   175
        *)  glibc_cflags+=" -U_FORTIFY_SOURCE";;
yann@2312
   176
    esac
yann@2312
   177
bryanhundven@2229
   178
    # ./configure is mislead by our tools override wrapper for bash
bryanhundven@2229
   179
    # so just tell it where the real bash is _on_the_target_!
bryanhundven@2229
   180
    # Notes:
bryanhundven@2229
   181
    # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL
bryanhundven@2229
   182
    # - ${BASH_SHELL}            is only used to set BASH
bryanhundven@2229
   183
    # - ${BASH}                  is only used to set the shebang
bryanhundven@2229
   184
    #                            in two scripts to run on the target
bryanhundven@2229
   185
    # So we can safely bypass bash detection at compile time.
bryanhundven@2229
   186
    # Should this change in a future eglibc release, we'd better
bryanhundven@2229
   187
    # directly mangle the generated scripts _after_ they get built,
bryanhundven@2229
   188
    # or even after they get installed... eglibc is such a sucker...
yann@2289
   189
    echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
bryanhundven@2229
   190
yann@2276
   191
    # Configure with --prefix the way we want it on the target...
yann@2276
   192
    # There are a whole lot of settings here.  You'll probably want
yann@2467
   193
    # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG_ARRAY
yann@2276
   194
    # Compare these options with the ones used when installing the glibc headers above - they're different.
yann@2276
   195
    # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory"
yann@2276
   196
    # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html.
yann@2276
   197
    # Set BUILD_CC, or we won't be able to build datafiles
yann@2276
   198
yann@2353
   199
    CT_DoExecLog CFG                                                \
yann@1041
   200
    BUILD_CC="${CT_BUILD}-gcc"                                      \
yann@2312
   201
    CFLAGS="${glibc_cflags}"                                        \
yann@850
   202
    CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
yann@850
   203
    AR=${CT_TARGET}-ar                                              \
yann@850
   204
    RANLIB=${CT_TARGET}-ranlib                                      \
yann@2271
   205
    "${src_dir}/configure"                                          \
yann@850
   206
        --prefix=/usr                                               \
yann@1041
   207
        --build=${CT_BUILD}                                         \
yann@850
   208
        --host=${CT_TARGET}                                         \
yann@2289
   209
        --cache-file="$(pwd)/config.cache"                          \
yann@2276
   210
        --without-cvs                                               \
yann@850
   211
        --disable-profile                                           \
yann@850
   212
        --without-gd                                                \
yann@2276
   213
        --with-headers="${CT_HEADERS_DIR}"                          \
yann@1478
   214
        "${extra_config[@]}"                                        \
yann@2467
   215
        "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[@]}"
benoit@2489
   216
yann@2276
   217
    # build hacks
yann@2276
   218
    case "${CT_ARCH},${CT_ARCH_CPU}" in
yann@2276
   219
        powerpc,8??)
yann@2276
   220
            # http://sourceware.org/ml/crossgcc/2008-10/msg00068.html
yann@2276
   221
            CT_DoLog DEBUG "Activating support for memset on broken ppc-8xx (CPU15 erratum)"
yann@2276
   222
            extra_make_args+=( ASFLAGS="-DBROKEN_PPC_8xx_CPU15" )
yann@2271
   223
            ;;
yann@1328
   224
    esac
yann@1328
   225
bryanhundven@2515
   226
    if [ "${libc_mode}" = "startfiles" ]; then
bryanhundven@2515
   227
        CT_DoLog EXTRA "Installing C library headers"
yann@850
   228
bryanhundven@2515
   229
        # use the 'install-headers' makefile target to install the
bryanhundven@2515
   230
        # headers
bryanhundven@2515
   231
        CT_DoExecLog ALL make ${JOBSFLAGS}              \
bryanhundven@2515
   232
                         install_root=${CT_SYSROOT_DIR} \
bryanhundven@2515
   233
                         install-bootstrap-headers=yes  \
bryanhundven@2515
   234
                         "${extra_make_args[@]}"        \
bryanhundven@2515
   235
                         install-headers
bryanhundven@2515
   236
bryanhundven@2515
   237
        # For glibc, a few headers need to be manually installed
bryanhundven@2515
   238
        if [ "${CT_LIBC}" = "glibc" ]; then
bryanhundven@2515
   239
            # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
bryanhundven@2515
   240
            # so do them by hand.  We can tolerate an empty stubs.h for the moment.
bryanhundven@2515
   241
            # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
bryanhundven@2515
   242
            mkdir -p "${CT_HEADERS_DIR}/gnu"
bryanhundven@2515
   243
            CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h"
bryanhundven@2515
   244
            CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h"  \
bryanhundven@2515
   245
                                   "${CT_HEADERS_DIR}/features.h"
bryanhundven@2515
   246
bryanhundven@2515
   247
            # Building the bootstrap gcc requires either setting inhibit_libc, or
bryanhundven@2515
   248
            # having a copy of stdio_lim.h... see
bryanhundven@2515
   249
            # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
bryanhundven@2515
   250
            CT_DoExecLog ALL cp -v bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h"
bryanhundven@2515
   251
bryanhundven@2515
   252
            # Following error building gcc-4.0.0's gcj:
bryanhundven@2515
   253
            #  error: bits/syscall.h: No such file or directory
bryanhundven@2515
   254
            # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html
bryanhundven@2515
   255
            # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
bryanhundven@2515
   256
            case "${CT_ARCH}" in
bryanhundven@2515
   257
                arm)    ;;
bryanhundven@2515
   258
                *)  CT_DoExecLog ALL cp -v "misc/syscall-list.h"            \
bryanhundven@2515
   259
                                           "${CT_HEADERS_DIR}/bits/syscall.h"
bryanhundven@2515
   260
                    ;;
bryanhundven@2515
   261
            esac
bryanhundven@2515
   262
        fi
bryanhundven@2515
   263
bryanhundven@2515
   264
        if [ "${CT_THREADS}" = "nptl" ]; then
bryanhundven@2515
   265
            CT_DoLog EXTRA "Installing C library start files"
bryanhundven@2515
   266
bryanhundven@2515
   267
            # there are a few object files needed to link shared libraries,
bryanhundven@2515
   268
            # which we build and install by hand
bryanhundven@2515
   269
            CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
bryanhundven@2515
   270
            CT_DoExecLog ALL make ${JOBSFLAGS}  \
bryanhundven@2515
   271
                        "${extra_make_args[@]}" \
bryanhundven@2515
   272
                        csu/subdir_lib
bryanhundven@2515
   273
            CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \
bryanhundven@2515
   274
                                "${CT_SYSROOT_DIR}/usr/lib"
bryanhundven@2515
   275
bryanhundven@2515
   276
            # Finally, 'libgcc_s.so' requires a 'libc.so' to link against.
bryanhundven@2515
   277
            # However, since we will never actually execute its code,
bryanhundven@2515
   278
            # it doesn't matter what it contains.  So, treating '/dev/null'
bryanhundven@2515
   279
            # as a C source file, we produce a dummy 'libc.so' in one step
bryanhundven@2515
   280
            CT_DoExecLog ALL "${cross_cc}" -nostdlib        \
bryanhundven@2515
   281
                                           -nostartfiles    \
bryanhundven@2515
   282
                                           -shared          \
bryanhundven@2515
   283
                                           -x c /dev/null   \
bryanhundven@2515
   284
                                           -o "${CT_SYSROOT_DIR}/usr/lib/libc.so"
bryanhundven@2515
   285
        fi # threads == nptl
bryanhundven@2515
   286
    else # libc_mode = final
bryanhundven@2515
   287
        CT_DoLog EXTRA "Building C library"
bryanhundven@2515
   288
        CT_DoExecLog ALL make ${JOBSFLAGS}                      \
bryanhundven@2515
   289
                              "${extra_make_args[@]}"           \
bryanhundven@2515
   290
                              all
bryanhundven@2515
   291
bryanhundven@2515
   292
        CT_DoLog EXTRA "Installing C library"
bryanhundven@2515
   293
        CT_DoExecLog ALL make ${JOBSFLAGS}                      \
bryanhundven@2515
   294
                              "${extra_make_args[@]}"           \
bryanhundven@2515
   295
                              install_root="${CT_SYSROOT_DIR}"  \
bryanhundven@2515
   296
                              install
bryanhundven@2515
   297
    fi
yann@850
   298
yann@850
   299
    CT_EndStep
yann@850
   300
}
yann@850
   301
yann@2270
   302
# This function finishes the C library install
yann@2270
   303
# This is a no-op
yann@850
   304
do_libc_finish() {
yann@850
   305
    :
yann@850
   306
}
yann@850
   307
yann@850
   308
# Build up the addons list, separated with $1
yann@850
   309
do_libc_add_ons_list() {
yann@850
   310
    local sep="$1"
yann@2274
   311
    local addons_list="$( echo "${CT_LIBC_ADDONS_LIST}"         \
yann@2274
   312
                          |sed -r -e "s/[[:space:],]/${sep}/g;" \
yann@2274
   313
                        )"
yann@850
   314
    case "${CT_THREADS}" in
yann@850
   315
        none)   ;;
yann@850
   316
        *)      addons_list="${addons_list}${sep}${CT_THREADS}";;
yann@850
   317
    esac
yann@850
   318
    [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
yann@2274
   319
    # Remove duplicate, leading and trailing separators
yann@2274
   320
    echo "${addons_list}" |sed -r -e "s/${sep}+/${sep}/g; s/^${sep}//; s/${sep}\$//;"
yann@850
   321
}
yann@2273
   322
yann@2273
   323
# Compute up the minimum supported Linux kernel version
yann@2273
   324
do_libc_min_kernel_config() {
yann@2273
   325
    local min_kernel_config
yann@2273
   326
yann@2467
   327
    case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in
yann@2273
   328
        *--enable-kernel*) ;;
yann@2273
   329
        *)  if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" ]; then
yann@2273
   330
                # We can't rely on the kernel version from the configuration,
yann@2273
   331
                # because it might not be available if the user uses pre-installed
yann@2273
   332
                # headers. On the other hand, both method will have the kernel
yann@2279
   333
                # version installed in "usr/include/linux/version.h" in the sysroot.
yann@2273
   334
                # Parse that instead of having two code-paths.
yann@2273
   335
                version_code_file="${CT_SYSROOT_DIR}/usr/include/linux/version.h"
yann@2273
   336
                if [ ! -f "${version_code_file}" -o ! -r "${version_code_file}" ]; then
yann@2273
   337
                    CT_Abort "Linux version is unavailable in installed headers files"
yann@2273
   338
                fi
yann@2273
   339
                version_code="$( grep -E LINUX_VERSION_CODE "${version_code_file}"  \
yann@2273
   340
                                 |cut -d ' ' -f 3                                   \
yann@2273
   341
                               )"
yann@2273
   342
                version=$(((version_code>>16)&0xFF))
yann@2273
   343
                patchlevel=$(((version_code>>8)&0xFF))
yann@2273
   344
                sublevel=$((version_code&0xFF))
yann@2273
   345
                min_kernel_config="${version}.${patchlevel}.${sublevel}"
yann@2273
   346
            elif [ "${CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN}" = "y" ]; then
yann@2273
   347
                # Trim the fourth part of the linux version, keeping only the first three numbers
yann@2276
   348
                min_kernel_config="$( echo "${CT_LIBC_GLIBC_MIN_KERNEL_VERSION}"            \
yann@2276
   349
                                      |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;' \
yann@2273
   350
                                    )"
yann@2273
   351
            fi
yann@2273
   352
            echo "--enable-kernel=${min_kernel_config}"
yann@2273
   353
            ;;
yann@2273
   354
    esac
yann@2273
   355
}