scripts/build/libc_glibc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat May 03 17:51:16 2008 +0000 (2008-05-03)
changeset 486 92f6149c4275
parent 482 88abdac040ef
child 496 f31cc6a00472
permissions -rw-r--r--
Some people are reposrting that ftp does not work on their network, probably due to proxies, while http does work.
Some (most) of the sites we use toretrieve tarballs have http equivallent for the ftp service. Use http as a failover.
There's no solution for those sites that do not have such an http equivalent.

/trunk/scripts/build/binutils.sh | 5 2 3 0 ++---
/trunk/scripts/build/libc_glibc.sh | 4 2 2 0 ++--
/trunk/scripts/build/libc_uClibc.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/400-ltrace.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/300-gdb.sh | 8 3 5 0 +++-----
/trunk/scripts/build/kernel_linux.sh | 7 2 5 0 ++-----
/trunk/scripts/build/cc_gcc.sh | 6 2 4 0 ++----
/trunk/scripts/build/gmp.sh | 4 1 3 0 +---
8 files changed, 14 insertions(+), 24 deletions(-)
     1 # This file adds functions to build glibc
     2 # Copyright 2007 Yann E. MORIN
     3 # Licensed under the GPL v2. See COPYING in the root of this package
     4 
     5 do_print_filename() {
     6     [ "${CT_LIBC}" = "glibc" ] || return 0
     7     echo "glibc-${CT_LIBC_VERSION}"
     8     for addon in `do_libc_add_ons_list " "`; do
     9         # NPTL addon is not to be downloaded, in any case
    10         [ "${addon}" = "nptl" ] && continue || true
    11         echo "glibc-${addon}-${CT_LIBC_VERSION}"
    12     done
    13 }
    14 
    15 # Download glibc
    16 do_libc_get() {
    17     # Ah! Not all GNU folks seem stupid. All glibc releases are in the same
    18     # directory. Good. Alas, there is no snapshot there. I'll deal with them
    19     # later on... :-/
    20     CT_GetFile "${CT_LIBC_FILE}" {ftp,http}://ftp.gnu.org/gnu/glibc
    21 
    22     # C library addons
    23     for addon in `do_libc_add_ons_list " "`; do
    24         # NPTL addon is not to be downloaded, in any case
    25         [ "${addon}" = "nptl" ] && continue || true
    26         CT_GetFile "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" {ftp,http}://ftp.gnu.org/gnu/glibc
    27     done
    28 
    29     return 0
    30 }
    31 
    32 # Extract glibc
    33 do_libc_extract() {
    34     CT_ExtractAndPatch "${CT_LIBC_FILE}"
    35 
    36     # C library addons
    37     for addon in `do_libc_add_ons_list " "`; do
    38         # NPTL addon is not to be extracted, in any case
    39         [ "${addon}" = "nptl" ] && continue || true
    40         CT_ExtractAndPatch "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
    41     done
    42 
    43     return 0
    44 }
    45 
    46 # There is nothing to do for glibc check config
    47 do_libc_check_config() {
    48     :
    49 }
    50 
    51 # This function installs the glibc headers needed to build the core compiler
    52 do_libc_headers() {
    53     # Only need to install bootstrap glibc headers for gcc-3.0 and above?  Or maybe just gcc-3.3 and above?
    54     # See also http://gcc.gnu.org/PR8180, which complains about the need for this step.
    55     grep -q 'gcc-[34]' "${CT_SRC_DIR}/${CT_CC_FILE}/ChangeLog" 2>/dev/null || return 0
    56 
    57     CT_DoStep INFO "Installing C library headers"
    58 
    59     mkdir -p "${CT_BUILD_DIR}/build-libc-headers"
    60     cd "${CT_BUILD_DIR}/build-libc-headers"
    61 
    62     CT_DoLog EXTRA "Configuring C library"
    63 
    64     # The following three things have to be done to build glibc-2.3.x, but they don't hurt older versions.
    65     # 1. override CC to keep glibc's configure from using $TARGET-gcc. 
    66     # 2. disable linuxthreads, which needs a real cross-compiler to generate tcb-offsets.h properly
    67     # 3. build with gcc 3.2 or later
    68     # Compare these options with the ones used when building glibc for real below - they're different.
    69     # As of glibc-2.3.2, to get this step to work for hppa-linux, you need --enable-hacker-mode
    70     # so when configure checks to make sure gcc has access to the assembler you just built...
    71     # Alternately, we could put ${PREFIX}/${TARGET}/bin on the path.
    72     # Set --build so maybe we don't have to specify "cross-compiling=yes" below (haven't tried yet)
    73     # Note: the warning
    74     # "*** WARNING: Are you sure you do not want to use the `linuxthreads'"
    75     # *** add-on?"
    76     # is ok here, since all we want are the basic headers at this point.
    77     # Override libc_cv_ppc_machine so glibc-cvs doesn't complain
    78     # 'a version of binutils that supports .machine "altivec" is needed'.
    79 
    80     addons_config="--enable-add-ons=`do_libc_add_ons_list ,`"
    81     # We need to remove any threading addon when installing headers
    82     addons_config="${addons_config//nptl/}"
    83     addons_config="${addons_config//linuxthreads/}"
    84     addons_config=`echo "${addons_config}" |sed -r -e 's/^,+//; s/,+$//; s/,+/,/g;'`
    85 
    86     cross_cc=`CT_Which "${CT_TARGET}-gcc"`
    87     CT_DoLog DEBUG "Using gcc for target: \"${cross_cc}\""
    88     CT_DoLog DEBUG "Extra config passed : \"${addons_config}\""
    89 
    90     libc_cv_ppc_machine=yes                     \
    91     CC=${cross_cc}                              \
    92     "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"   \
    93         --build="${CT_UNIQ_BUILD}"              \
    94         --host="${CT_TARGET}"                   \
    95         --prefix=/usr                           \
    96         --with-headers="${CT_HEADERS_DIR}"      \
    97         --without-cvs                           \
    98         --disable-sanity-checks                 \
    99         --enable-hacker-mode                    \
   100         ${addons_config}                        \
   101         --without-nptl                          2>&1 |CT_DoLog ALL
   102 
   103     CT_DoLog EXTRA "Installing C library headers"
   104 
   105     if grep -q GLIBC_2.3 "${CT_SRC_DIR}/${CT_LIBC_FILE}/ChangeLog"; then
   106         # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c,
   107         # which fails without a real cross-compiler.
   108         # Fortunately, we don't need errlist-compat.c, since we just need .h
   109         # files, so work around this by creating a fake errlist-compat.c and
   110         # satisfying its dependencies.
   111         # Another workaround might be to tell configure to not use any cross
   112         # options to $(CC).
   113         # The real fix would be to get install-headers to not generate
   114         # errlist-compat.c.
   115         # Note: BOOTSTRAP_GCC is used by:
   116         # patches/glibc-2.3.5/glibc-mips-bootstrap-gcc-header-install.patch
   117 
   118         libc_cv_ppc_machine=yes                                 \
   119         make CFLAGS="-O -DBOOTSTRAP_GCC" sysdeps/gnu/errlist.c  2>&1 |CT_DoLog ALL
   120         mkdir -p stdio-common
   121 
   122         # sleep for 2 seconds for benefit of filesystems with lousy time
   123         # resolution, like FAT, so make knows for sure errlist-compat.c doesn't
   124         # need generating
   125         sleep 2
   126         touch stdio-common/errlist-compat.c
   127     fi
   128     # Note: BOOTSTRAP_GCC (see above)
   129     libc_cv_ppc_machine=yes                                 \
   130     make cross-compiling=yes install_root=${CT_SYSROOT_DIR} \
   131          CFLAGS="-O -DBOOTSTRAP_GCC" ${LIBC_SYSROOT_ARG}    \
   132          install-headers                                    2>&1 |CT_DoLog ALL
   133 
   134     # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
   135     # so do them by hand.  We can tolerate an empty stubs.h for the moment.
   136     # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
   137     mkdir -p "${CT_HEADERS_DIR}/gnu"
   138     touch "${CT_HEADERS_DIR}/gnu/stubs.h"
   139     cp "${CT_SRC_DIR}/${CT_LIBC_FILE}/include/features.h" "${CT_HEADERS_DIR}/features.h"
   140 
   141     # Building the bootstrap gcc requires either setting inhibit_libc, or
   142     # having a copy of stdio_lim.h... see
   143     # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
   144     cp bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h"
   145 
   146     # Following error building gcc-4.0.0's gcj:
   147     #  error: bits/syscall.h: No such file or directory
   148     # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html
   149     # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
   150     [ "${CT_ARCH}" != "arm" ] && cp misc/syscall-list.h "${CT_HEADERS_DIR}/bits/syscall.h" || true
   151 
   152     # Those headers are to be manually copied so gcc can build properly
   153     pthread_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_THREADS}/sysdeps/pthread/pthread.h"
   154     pthreadtypes_h=
   155     case "${CT_THREADS}" in
   156         nptl)
   157             # NOTE: for some archs, the pathes are different, but they are not
   158             # supported by crosstool-NG right now. See original crosstool when they are.
   159             pthread_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_THREADS}/sysdeps/pthread/pthread.h"
   160             pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/nptl/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/bits/pthreadtypes.h"
   161             if [ ! -f "${pthreadtypes_h}" ]; then
   162                 pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_LIBC}-ports-${CT_LIBC_VERSION}/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/nptl/bits/pthreadtypes.h"
   163             fi
   164             ;;
   165         linuxthreads)
   166             pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h"
   167             ;;
   168         *)
   169             pthread_h=
   170             pthreadtypes_h=
   171             ;;
   172     esac
   173     if [ -n "${pthread_h}" ]; then
   174         cp -v "${pthread_h}" "${CT_HEADERS_DIR}/pthread.h" 2>&1 |CT_DoLog ALL
   175     fi
   176     if [ -n "${pthreadtypes_h}" ]; then
   177         cp -v "${pthreadtypes_h}" "${CT_HEADERS_DIR}/bits/pthreadtypes.h" 2>&1 |CT_DoLog ALL
   178     fi
   179 
   180     CT_EndStep
   181 }
   182 
   183 # Build and install start files
   184 do_libc_start_files() {
   185     # Needed only in the NPTL case. Otherwise, return.
   186     [ "${CT_THREADS}" = "nptl" ] || return 0
   187 
   188     CT_DoStep INFO "Installing C library start files"
   189 
   190     mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
   191     cd "${CT_BUILD_DIR}/build-libc-startfiles"
   192 
   193     CT_DoLog EXTRA "Configuring C library"
   194 
   195     # Add some default glibc config options if not given by user.
   196     extra_config=""
   197     case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
   198         *enable-kernel*) ;;
   199         *) extra_config="${extra_config} --enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
   200     esac
   201     case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
   202         *-tls*) ;;
   203         *) extra_config="${extra_config} --with-tls"
   204     esac
   205     case "${CT_SHARED_LIBS}" in
   206         y) extra_config="${extra_config} --enable-shared";;
   207         *) extra_config="${extra_config} --disable-shared";;
   208     esac
   209     case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
   210         y,) extra_config="${extra_config} --with-fp";;
   211         ,y) extra_config="${extra_config} --without-fp";;
   212     esac
   213     # Obviously, we want threads, as we come here only for NPTL
   214     extra_config="${extra_config} --with-__thread"
   215 
   216     addons_config="--enable-add-ons=`do_libc_add_ons_list ,`"
   217     extra_config="${extra_config} ${addons_config}"
   218 
   219     # Add some default CC args
   220     glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
   221     glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
   222     if [    ${glibc_version_major} -eq 2 -a ${glibc_version_minor} -ge 6    \
   223          -o ${glibc_version_major} -gt 2                                    ]; then
   224         # Don't use -pipe: configure chokes on it for glibc >= 2.6.
   225         CT_Test 'Removing "-pipe" for use with glibc>=2.6' "${CT_USE_PIPES}" = "y"
   226         extra_cc_args="${CT_CFLAGS_FOR_HOST/-pipe}"
   227     else
   228         extra_cc_args="${CT_CFLAGS_FOR_HOST}"
   229     fi
   230     extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
   231 
   232     cross_cc=`CT_Which "${CT_TARGET}-gcc"`
   233     CT_DoLog DEBUG "Using gcc for target    : \"${cross_cc}\""
   234     CT_DoLog DEBUG "Configuring with addons : \"`do_libc_add_ons_list ,`\""
   235     CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
   236     CT_DoLog DEBUG "Extra CC args passed    : \"${extra_cc_args}\""
   237 
   238     # Super-H really needs to set configparms as of gcc-3.4/glibc-2.3.2
   239     # note: this is awkward, doesn't work well if you need more than one
   240     # line in configparms
   241     echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
   242 
   243     echo "libc_cv_forced_unwind=yes" > config.cache
   244     echo "libc_cv_c_cleanup=yes" >> config.cache
   245 
   246     # Please see the comment for the configure step in do_libc().
   247 
   248     BUILD_CC=${CT_CC_NATIVE}                                        \
   249     CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O "  \
   250     CC="${cross_cc} ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}"      \
   251     AR=${CT_TARGET}-ar                                              \
   252     RANLIB=${CT_TARGET}-ranlib                                      \
   253     "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"                       \
   254         --prefix=/usr                                               \
   255         --build="${CT_UNIQ_BUILD}"                                  \
   256         --host=${CT_TARGET}                                         \
   257         --without-cvs                                               \
   258         --disable-profile                                           \
   259         --disable-debug                                             \
   260         --without-gd                                                \
   261         --with-headers="${CT_HEADERS_DIR}"                          \
   262         --cache-file=config.cache                                   \
   263         ${extra_config}                                             \
   264         ${CT_LIBC_GLIBC_EXTRA_CONFIG}                               2>&1 |CT_DoLog ALL
   265 
   266 
   267     #TODO: should check whether slibdir has been set in configparms to */lib64
   268     #      and copy the startfiles into the appropriate libdir.
   269     CT_DoLog EXTRA "Building C library start files"
   270     make csu/subdir_lib 2>&1 |CT_DoLog ALL
   271 
   272     CT_DoLog EXTRA "Installing C library start files"
   273     if [ "${CT_USE_SYSROOT}" = "y" ]; then
   274         cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/usr/lib/"
   275     else
   276         cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/lib/"
   277     fi
   278 
   279     CT_EndStep
   280 }
   281 
   282 # This function builds and install the full glibc
   283 do_libc() {
   284     CT_DoStep INFO "Installing C library"
   285 
   286     mkdir -p "${CT_BUILD_DIR}/build-libc"
   287     cd "${CT_BUILD_DIR}/build-libc"
   288 
   289     CT_DoLog EXTRA "Configuring C library"
   290 
   291     # Add some default glibc config options if not given by user.
   292     # We don't need to be conditional on wether the user did set different
   293     # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
   294 
   295     extra_config="--enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
   296 
   297     case "${CT_THREADS}" in
   298         nptl)           extra_config="${extra_config} --with-__thread --with-tls";;
   299         linuxthreads)   extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
   300         none)           extra_config="${extra_config} --without-__thread --without-nptl"
   301                         case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
   302                             *-tls*) ;;
   303                             *) extra_config="${extra_config} --without-tls";;
   304                         esac
   305                         ;;
   306     esac
   307 
   308     case "${CT_SHARED_LIBS}" in
   309         y) extra_config="${extra_config} --enable-shared";;
   310         *) extra_config="${extra_config} --disable-shared";;
   311     esac
   312 
   313     case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
   314         y,) extra_config="${extra_config} --with-fp";;
   315         ,y) extra_config="${extra_config} --without-fp";;
   316     esac
   317 
   318     case "`do_libc_add_ons_list ,`" in
   319         "") ;;
   320         *)  extra_config="${extra_config} --enable-add-ons=`do_libc_add_ons_list ,`";;
   321     esac
   322 
   323 
   324     # Add some default CC args
   325     glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
   326     glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
   327     if [    ${glibc_version_major} -eq 2 -a ${glibc_version_minor} -ge 6    \
   328          -o ${glibc_version_major} -gt 2                                    ]; then
   329         # Don't use -pipe: configure chokes on it for glibc >= 2.6.
   330         CT_Test 'Removing "-pipe" for use with glibc>=2.6' "${CT_USE_PIPES}" = "y"
   331         extra_cc_args="${CT_CFLAGS_FOR_HOST/-pipe}"
   332     else
   333         extra_cc_args="${CT_CFLAGS_FOR_HOST}"
   334     fi
   335     extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
   336 
   337     cross_cc=`CT_Which "${CT_TARGET}-gcc"`
   338     CT_DoLog DEBUG "Using gcc for target    : \"${cross_cc}\""
   339     CT_DoLog DEBUG "Configuring with addons : \"`do_libc_add_ons_list ,`\""
   340     CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
   341     CT_DoLog DEBUG "Extra CC args passed    : \"${extra_cc_args}\""
   342 
   343     # sh3 and sh4 really need to set configparms as of gcc-3.4/glibc-2.3.2
   344     # note: this is awkward, doesn't work well if you need more than one line in configparms
   345     echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
   346 
   347     # For glibc 2.3.4 and later we need to set some autoconf cache
   348     # variables, because nptl/sysdeps/pthread/configure.in does not
   349     # work when cross-compiling.
   350     if [ "${CT_THREADS}" = "nptl" ]; then
   351         echo libc_cv_forced_unwind=yes
   352         echo libc_cv_c_cleanup=yes
   353     fi >config.cache
   354 
   355     # Configure with --prefix the way we want it on the target...
   356     # There are a whole lot of settings here.  You'll probably want
   357     # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG
   358     # Compare these options with the ones used when installing the glibc headers above - they're different.
   359     # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" 
   360     # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. 
   361     # Set BUILD_CC, or you won't be able to build datafiles
   362     # Set --build, else glibc-2.3.2 will think you're not cross-compiling, and try to run the test programs
   363 
   364     # OK. I'm fed up with those folks telling me what I should do.
   365     # I don't configure nptl? Well, maybe that's purposedly because
   366     # I don't want nptl! --disable-sanity-checks will shut up those
   367     # silly messages. GNU folks again, he?
   368 
   369     BUILD_CC=${CT_CC_NATIVE}                                        \
   370     CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O"   \
   371     CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
   372     AR=${CT_TARGET}-ar                                              \
   373     RANLIB=${CT_TARGET}-ranlib                                      \
   374     "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"                       \
   375         --prefix=/usr                                               \
   376         --build=${CT_UNIQ_BUILD}                                    \
   377         --host=${CT_TARGET}                                         \
   378         --without-cvs                                               \
   379         --disable-profile                                           \
   380         --disable-debug                                             \
   381         --without-gd                                                \
   382         --disable-sanity-checks                                     \
   383         --cache-file=config.cache                                   \
   384         --with-headers="${CT_HEADERS_DIR}"                          \
   385         ${extra_config}                                             \
   386         ${CT_LIBC_GLIBC_EXTRA_CONFIG}                               2>&1 |CT_DoLog ALL
   387 
   388     if grep -l '^install-lib-all:' "${CT_SRC_DIR}/${CT_LIBC_FILE}/Makerules" > /dev/null; then
   389         # nptl-era glibc.
   390         # If the install-lib-all target (which is added by our make-install-lib-all.patch)
   391         # is present, it means we're building glibc-2.3.3 or later, and we can't
   392         # build programs yet, as they require libeh, which won't be installed
   393         # until full build of gcc
   394         # YEM-FIXME: This comment is misleading: latest glibc-s do not have the
   395         #            make-install-lib-all.patch applied, so do not pass through this
   396         #            part of the if statement; nonetheless, they do build, and
   397         #            the result is useable (maybe the dual-pass core gcc is
   398         #            responsible for this).
   399         GLIBC_INITIAL_BUILD_RULE=lib
   400         GLIBC_INITIAL_INSTALL_RULE="install-lib-all install-headers"
   401         GLIBC_INSTALL_APPS_LATER=yes
   402     else
   403         # classic glibc.  
   404         # We can build and install everything with the bootstrap compiler.
   405         GLIBC_INITIAL_BUILD_RULE=all
   406         GLIBC_INITIAL_INSTALL_RULE=install
   407         GLIBC_INSTALL_APPS_LATER=no
   408     fi
   409 
   410     # If this fails with an error like this:
   411     # ...  linux/autoconf.h: No such file or directory 
   412     # then you need to set the KERNELCONFIG variable to point to a .config file for this arch.
   413     # The following architectures are known to need kernel .config: alpha, arm, ia64, s390, sh, sparc
   414     # Note: LD and RANLIB needed by glibc-2.1.3's c_stub directory, at least on macosx
   415     # No need for PARALLELMFLAGS here, Makefile already reads this environment variable
   416     CT_DoLog EXTRA "Building C library"
   417     make LD=${CT_TARGET}-ld             \
   418          RANLIB=${CT_TARGET}-ranlib     \
   419          ${GLIBC_INITIAL_BUILD_RULE}    2>&1 |CT_DoLog ALL
   420 
   421     CT_DoLog EXTRA "Installing C library"
   422     make install_root="${CT_SYSROOT_DIR}"   \
   423          ${LIBC_SYSROOT_ARG}                \
   424          ${GLIBC_INITIAL_INSTALL_RULE}      2>&1 |CT_DoLog ALL
   425 
   426     # This doesn't seem to work when building a crosscompiler,
   427     # as it tries to execute localedef using the just-built ld.so!?
   428     #CT_DoLog EXTRA "Installing locales"
   429     #make localedata/install-locales install_root=${SYSROOT} 2>&1 |CT_DoLog ALL
   430 
   431     # Fix problems in linker scripts.
   432     #
   433     # 1. Remove absolute paths
   434     # Any file in a list of known suspects that isn't a symlink is assumed to be a linker script.
   435     # FIXME: test -h is not portable
   436     # FIXME: probably need to check more files than just these three...
   437     # Need to use sed instead of just assuming we know what's in libc.so because otherwise alpha breaks
   438     #
   439     # 2. Remove lines containing BUG per http://sources.redhat.com/ml/bug-glibc/2003-05/msg00055.html,
   440     # needed to fix gcc-3.2.3/glibc-2.3.2 targeting arm
   441     #
   442     # To make "strip *.so.*" not fail (ptxdist does this), rename to .so_orig rather than .so.orig
   443     CT_DoLog EXTRA "Fixing C library linker scripts"
   444     for file in libc.so libpthread.so libgcc_s.so; do
   445         for dir in lib lib64 usr/lib usr/lib64; do
   446             if [ -f "${CT_SYSROOT_DIR}/${dir}/${file}" -a ! -L ${CT_SYSROOT_DIR}/$lib/$file ]; then
   447                 cp "${CT_SYSROOT_DIR}/${dir}/${file}" "${CT_SYSROOT_DIR}/${dir}/${file}_orig"
   448                 CT_DoLog DEBUG "Fixing \"${CT_SYS_ROOT_DIR}/${dir}/${file}\""
   449                 sed -i -r -e 's,/usr/lib/,,g;
   450                               s,/usr/lib64/,,g;
   451                               s,/lib/,,g;
   452                               s,/lib64/,,g;
   453                               /BUG in libc.scripts.output-format.sed/d' "${CT_SYSROOT_DIR}/${dir}/${file}"
   454             fi
   455         done
   456     done
   457 
   458     CT_EndStep
   459 }
   460 
   461 # This function finishes the glibc install
   462 do_libc_finish() {
   463     # Finally, build and install glibc programs, now that libeh (if any) is installed
   464     # Don't do this unless needed, 'cause it causes glibc-2.{1.3,2.2} to fail here with
   465     # .../gcc-3.4.1-glibc-2.1.3/build-glibc/libc.so.6: undefined reference to `__deregister_frame_info'
   466     # .../gcc-3.4.1-glibc-2.1.3/build-glibc/libc.so.6: undefined reference to `__register_frame_info'
   467     [ "${GLIBC_INSTALL_APPS_LATER}" = "yes" ] || return 0
   468 
   469     CT_DoStep INFO "Finishing C library"
   470 
   471     cd "${CT_BUILD_DIR}/build-libc"
   472 
   473     CT_DoLog EXTRA "Re-building C library"
   474     make LD=${CT_TARGET}-ld RANLIB=${CT_TARGET}-ranlib 2>&1 |CT_DoLog ALL
   475 
   476     CT_DoLog EXTRA "Installing missing C library components"
   477     # note: should do full install and then fix linker scripts, but this is faster
   478     for t in bin rootsbin sbin data others; do
   479         make install_root="${CT_SYSROOT_DIR}"   \
   480              ${LIBC_SYSROOT_ARG}                \
   481              install-${t}                       2>&1 |CT_DoLog ALL
   482     done
   483 
   484     CT_EndStep
   485 }
   486 
   487 # Build up the addons list, separated with $1
   488 do_libc_add_ons_list() {
   489     local sep="$1"
   490     local addons_list=`echo "${CT_LIBC_ADDONS_LIST//,/${sep}}" |tr -s ,`
   491     case "${CT_THREADS}" in
   492         none)   ;;
   493         *)      addons_list="${addons_list}${sep}${CT_THREADS}";;
   494     esac
   495     [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
   496     addons_list="${addons_list%%${sep}}"
   497     echo "${addons_list##${sep}}"
   498 }
   499