scripts/build/libc/eglibc.sh
author "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
Tue May 31 20:12:35 2011 +0200 (2011-05-31)
changeset 2487 481cd34691f0
parent 2482 af25723a794f
child 2495 98b02f85db29
permissions -rw-r--r--
gcc: promote PKGVERSION and BUGURL options to toolchain level

This patch promotes the PKGVERSION and BUGURL options to toolchain level so that
all toolchain components supporting them can benefit from them.

These options are passed to configure through --with-pkgversion and
--with-bugurl.

They are supported by binutils 2.18+, gcc 4.3+, eglibc 2.9+ and gdb 7.0+.

Signed-off-by: "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
yann@850
     1
# eglibc build functions (initially by Thomas JOURDAN).
yann@850
     2
yann@2270
     3
# Add the definitions common to glibc and eglibc
yann@2483
     4
#   do_libc_extract
yann@2270
     5
#   do_libc_start_files
yann@2270
     6
#   do_libc
yann@2270
     7
#   do_libc_finish
yann@2270
     8
#   do_libc_add_ons_list
yann@2483
     9
#   do_libc_min_kernel_config
yann@2270
    10
. "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common"
yann@2270
    11
yann@850
    12
# Download eglibc repository
yann@850
    13
do_eglibc_get() {
yann@850
    14
    CT_HasOrAbort svn
yann@850
    15
yann@850
    16
    case "${CT_LIBC_VERSION}" in
yann@850
    17
        trunk)  svn_url="svn://svn.eglibc.org/trunk";;
yann@850
    18
        *)      svn_url="svn://svn.eglibc.org/branches/eglibc-${CT_LIBC_VERSION}";;
yann@850
    19
    esac
yann@850
    20
yann@850
    21
    case "${CT_EGLIBC_CHECKOUT}" in
yann@850
    22
        y)  svn_action="checkout";;
yann@850
    23
        *)  svn_action="export --force";;
yann@850
    24
    esac
yann@850
    25
bob@2178
    26
    CT_DoExecLog ALL svn ${svn_action} -r "${CT_EGLIBC_REVISION:-HEAD}" "${svn_url}" "$(pwd)"
yann@850
    27
yann@850
    28
    # Compress eglibc
yann@1123
    29
    CT_DoExecLog ALL mv libc "eglibc-${CT_LIBC_VERSION}"
yann@1123
    30
    CT_DoExecLog ALL tar cjf "eglibc-${CT_LIBC_VERSION}.tar.bz2" "eglibc-${CT_LIBC_VERSION}"
yann@850
    31
yann@850
    32
    # Compress linuxthreads, localedef and ports
yann@850
    33
    # Assign them the name the way ct-ng like it
yann@850
    34
    for addon in linuxthreads localedef ports; do
yann@1123
    35
        CT_DoExecLog ALL mv "${addon}" "eglibc-${addon}-${CT_LIBC_VERSION}"
yann@1123
    36
        CT_DoExecLog ALL tar cjf "eglibc-${addon}-${CT_LIBC_VERSION}.tar.bz2" "eglibc-${addon}-${CT_LIBC_VERSION}"
yann@850
    37
    done
yann@850
    38
}
yann@850
    39
yann@850
    40
# Download glibc
yann@850
    41
do_libc_get() {
yann@850
    42
    # eglibc is only available through subversion, there are no
yann@850
    43
    # snapshots available. Moreover, addons will be downloaded
yann@850
    44
    # simultaneously.
yann@850
    45
yann@850
    46
    # build filename
yann@1123
    47
    eglibc="eglibc-${CT_LIBC_VERSION}.tar.bz2"
yann@850
    48
    eglibc_linuxthreads="${CT_LIBC}-linuxthreads-${CT_LIBC_VERSION}.tar.bz2"
yann@850
    49
    eglibc_localedef="${CT_LIBC}-localedef-${CT_LIBC_VERSION}.tar.bz2"
yann@850
    50
    eglibc_ports="${CT_LIBC}-ports-${CT_LIBC_VERSION}.tar.bz2"
yann@850
    51
yann@850
    52
    # Check if every tarballs are already present
yann@1476
    53
    if [    -f "${CT_TARBALLS_DIR}/${eglibc}"                   \
yann@1476
    54
         -a -f "${CT_TARBALLS_DIR}/${eglibc_linuxthreads}"      \
yann@1476
    55
         -a -f "${CT_TARBALLS_DIR}/${eglibc_localedef}"         \
yann@1476
    56
         -a -f "${CT_TARBALLS_DIR}/${eglibc_ports}"             \
yann@1476
    57
       ]; then
yann@850
    58
        CT_DoLog DEBUG "Already have 'eglibc-${CT_LIBC_VERSION}'"
yann@850
    59
        return 0
yann@850
    60
    fi
yann@850
    61
yann@1476
    62
    if [    -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc}"                 \
yann@1476
    63
         -a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_linuxthreads}"    \
yann@1476
    64
         -a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_localedef}"       \
yann@1476
    65
         -a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_ports}"           \
yann@1528
    66
         -a "${CT_FORCE_DOWNLOAD}" != "y"                           \
yann@1476
    67
       ]; then
yann@850
    68
        CT_DoLog DEBUG "Got 'eglibc-${CT_LIBC_VERSION}' from local storage"
yann@850
    69
        for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do
yann@850
    70
            CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${file}" "${CT_TARBALLS_DIR}/${file}"
yann@850
    71
        done
yann@850
    72
        return 0
yann@850
    73
    fi
yann@850
    74
yann@850
    75
    # Not found locally, try from the network
yann@850
    76
    CT_DoLog EXTRA "Retrieving 'eglibc-${CT_LIBC_VERSION}'"
yann@867
    77
yann@867
    78
    CT_MktempDir tmp_dir
yann@867
    79
    CT_Pushd "${tmp_dir}"
yann@867
    80
yann@850
    81
    do_eglibc_get
yann@867
    82
    CT_DoLog DEBUG "Moving 'eglibc-${CT_LIBC_VERSION}' to tarball directory"
yann@867
    83
    for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do
yann@867
    84
        CT_DoExecLog ALL mv -f "${file}" "${CT_TARBALLS_DIR}"
yann@867
    85
    done
yann@867
    86
yann@867
    87
    CT_Popd
yann@867
    88
yann@867
    89
    # Remove source files
yann@867
    90
    CT_DoExecLog ALL rm -rf "${tmp_dir}"
yann@850
    91
yann@850
    92
    if [ "${CT_SAVE_TARBALLS}" = "y" ]; then
yann@850
    93
        CT_DoLog EXTRA "Saving 'eglibc-${CT_LIBC_VERSION}' to local storage"
yann@850
    94
        for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do
yann@850
    95
            CT_DoExecLog ALL mv -f "${CT_TARBALLS_DIR}/${file}" "${CT_LOCAL_TARBALLS_DIR}"
yann@850
    96
            CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${file}" "${CT_TARBALLS_DIR}/${file}"
yann@850
    97
        done
yann@850
    98
    fi
yann@850
    99
yann@850
   100
    return 0
yann@850
   101
}
yann@850
   102
avrac@1569
   103
# Copy user provided eglibc configuration file if provided
yann@850
   104
do_libc_check_config() {
avrac@1569
   105
    if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then
avrac@1569
   106
        return 0
avrac@1569
   107
    fi
avrac@1569
   108
avrac@1569
   109
    CT_DoStep INFO "Checking C library configuration"
avrac@1569
   110
avrac@1569
   111
    CT_TestOrAbort "You did not provide an eglibc config file!" \
avrac@1569
   112
        -n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \
avrac@1569
   113
        -f "${CT_EGLIBC_OPTION_GROUPS_FILE}"
avrac@1569
   114
avrac@1569
   115
    CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config"
avrac@1569
   116
avrac@1569
   117
    # NSS configuration
avrac@1569
   118
    if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then
avrac@1569
   119
        CT_DoLog DEBUG "Using fixed-configuration nsswitch facility"
avrac@1569
   120
avrac@1569
   121
        if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then
avrac@1569
   122
            nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf"
avrac@1569
   123
        else
avrac@1569
   124
            nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}"
avrac@1569
   125
        fi
avrac@1569
   126
        CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}"
avrac@1569
   127
avrac@1569
   128
        CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config"
avrac@1569
   129
        echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \
avrac@1569
   130
            >> "${CT_CONFIG_DIR}/eglibc.config"
avrac@1569
   131
avrac@1569
   132
        if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then
avrac@1569
   133
            nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions"
avrac@1569
   134
        else
avrac@1569
   135
            nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}"
avrac@1569
   136
        fi
avrac@1569
   137
        CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}"
avrac@1569
   138
avrac@1569
   139
        CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions"
avrac@1569
   140
        echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \
avrac@1569
   141
            >> "${CT_CONFIG_DIR}/eglibc.config"
avrac@1569
   142
    else
avrac@1569
   143
        CT_DoLog DEBUG "Using full-blown nsswitch facility"
avrac@1569
   144
    fi
avrac@1569
   145
avrac@1569
   146
    CT_EndStep
yann@850
   147
}