scripts/build/libc/glibc-eglibc.sh-common
author "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
Fri Jul 29 15:30:53 2011 +0200 (2011-07-29)
changeset 2587 7727970d04e9
parent 2573 424fa2092ace
child 2588 99532252143d
permissions -rw-r--r--
libc/glibc: add partial support for locales

This patch adds partial support for glibc locales.

For now, it only generates the appropriate locales when the host and the target
have the same endianness and uint32_t alignment.

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