scripts/build/libc/glibc.sh
author "Nicolás Reynolds" <fauno@kiwwwi.com.ar>
Fri May 27 22:02:30 2011 -0300 (2011-05-27)
changeset 2482 af25723a794f
parent 2278 e86826b8621a
child 2483 fa3a18f9abcf
permissions -rw-r--r--
libc/glibc: fix {e,}glibc add-ons with short or long names

Fixes the issue with {e,}glibc addons having short and long names (such as
eglibc-ports-2_13 and ports), which caused configure scripts to run
through them twice and thus configuring incorrectly.

For instance, the mips64el-n32-linux-gnu toolchain would be recognized
correctly first, but then the second pass would change it to mips32,
building a mixed MIPS-III N32 and MIPS-I libc.

Signed-off-by: Nicolás Reynolds <fauno@kiwwwi.com.ar>
[yann.morin.1992@anciens.enib.fr: remove spurious trailing spaces]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@850
     1
# This file adds functions to build glibc
yann@850
     2
# Copyright 2007 Yann E. MORIN
yann@850
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@850
     4
yann@2272
     5
# Add the definitions common to glibc and eglibc
yann@2272
     6
#   do_libc_start_files
yann@2277
     7
#   do_libc
yann@2277
     8
#   do_libc_finish
yann@2277
     9
#   do_libc_add_ons_list
yann@2277
    10
#   do_libc_min_kernel_config
yann@2272
    11
. "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common"
yann@2272
    12
yann@850
    13
# Download glibc
yann@850
    14
do_libc_get() {
yann@1260
    15
    local date
yann@1260
    16
    local version
yann@1482
    17
    local -a addons_list
yann@1482
    18
yann@1482
    19
    addons_list=($(do_libc_add_ons_list " "))
yann@1114
    20
yann@1759
    21
    # Main source
yann@1759
    22
    CT_GetFile "glibc-${CT_LIBC_VERSION}"               \
yann@1759
    23
               {ftp,http}://ftp.gnu.org/gnu/glibc       \
yann@1759
    24
               ftp://gcc.gnu.org/pub/glibc/releases     \
yann@1759
    25
               ftp://gcc.gnu.org/pub/glibc/snapshots
yann@1759
    26
yann@1759
    27
    # C library addons
yann@1759
    28
    for addon in "${addons_list[@]}"; do
yann@1759
    29
        # NPTL addon is not to be downloaded, in any case
yann@1759
    30
        [ "${addon}" = "nptl" ] && continue || true
yann@1759
    31
        CT_GetFile "glibc-${addon}-${CT_LIBC_VERSION}"      \
yann@850
    32
                   {ftp,http}://ftp.gnu.org/gnu/glibc       \
yann@850
    33
                   ftp://gcc.gnu.org/pub/glibc/releases     \
yann@850
    34
                   ftp://gcc.gnu.org/pub/glibc/snapshots
yann@1759
    35
    done
yann@850
    36
yann@850
    37
    return 0
yann@850
    38
}
yann@850
    39
yann@850
    40
# Extract glibc
yann@850
    41
do_libc_extract() {
yann@1482
    42
    local -a addons_list
yann@1482
    43
yann@1482
    44
    addons_list=($(do_libc_add_ons_list " "))
yann@1260
    45
yann@1759
    46
    CT_Extract "glibc-${CT_LIBC_VERSION}"
yann@1260
    47
yann@1759
    48
    CT_Pushd "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}"
yann@1901
    49
    CT_Patch nochdir "glibc" "${CT_LIBC_VERSION}"
yann@850
    50
yann@850
    51
    # C library addons
yann@1482
    52
    for addon in "${addons_list[@]}"; do
yann@850
    53
        # NPTL addon is not to be extracted, in any case
yann@850
    54
        [ "${addon}" = "nptl" ] && continue || true
yann@1761
    55
        CT_Extract nochdir "glibc-${addon}-${CT_LIBC_VERSION}"
yann@1260
    56
fauno@2482
    57
        CT_TestAndAbort "Error in add-on '${addon}': both short and long names in tarball" \
fauno@2482
    58
            -d "${addon}" -a -d "glibc-${addon}-${CT_LIBC_VERSION}"
fauno@2482
    59
yann@1126
    60
        # Some addons have the 'long' name, while others have the
yann@1126
    61
        # 'short' name, but patches are non-uniformly built with
yann@1126
    62
        # either the 'long' or 'short' name, whatever the addons name
fauno@2482
    63
        # but we prefer the 'short' name and avoid duplicates.
fauno@2482
    64
        if [ -d "glibc-${addon}-${CT_LIBC_VERSION}" ]; then
fauno@2482
    65
            mv "glibc-${addon}-${CT_LIBC_VERSION}" "${addon}"
fauno@2482
    66
        fi
fauno@2482
    67
fauno@2482
    68
        ln -s "${addon}" "glibc-${addon}-${CT_LIBC_VERSION}"
fauno@2482
    69
yann@1901
    70
        CT_Patch nochdir "glibc" "${addon}-${CT_LIBC_VERSION}"
fauno@2482
    71
fauno@2482
    72
        # Remove the long name since it can confuse configure scripts to run
fauno@2482
    73
        # the same source twice.
fauno@2482
    74
        rm "glibc-${addon}-${CT_LIBC_VERSION}"
yann@850
    75
    done
yann@850
    76
yann@884
    77
    # The configure files may be older than the configure.in files
yann@884
    78
    # if using a snapshot (or even some tarballs). Fake them being
yann@884
    79
    # up to date.
yann@1482
    80
    sleep 2
yann@1260
    81
    find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL
yann@1260
    82
yann@1260
    83
    CT_Popd
yann@884
    84
yann@850
    85
    return 0
yann@850
    86
}
yann@850
    87
yann@850
    88
# There is nothing to do for glibc check config
yann@850
    89
do_libc_check_config() {
yann@850
    90
    :
yann@850
    91
}