scripts/build/libc_glibc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:08:06 2008 +0000 (2008-02-17)
changeset 431 8bde4c6ea47a
parent 391 11172b754564
child 481 d832c6a64f48
permissions -rw-r--r--
Robert P. J. DAY says:

apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3. so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories. seems like a
cheap way to add a couple new versions.
     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://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://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} -ge 2 -a ${glibc_version_minor} -ge 6 ]; then
   223         # Don't use -pipe: configure chokes on it for glibc >= 2.6.
   224         CT_Test 'Removing "-pipe" for use with glibc>=2.6' "${CT_USE_PIPES}" = "y"
   225         extra_cc_args="${CT_CFLAGS_FOR_HOST/-pipe}"
   226     else
   227         extra_cc_args="${CT_CFLAGS_FOR_HOST}"
   228     fi
   229     extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
   230 
   231     cross_cc=`CT_Which "${CT_TARGET}-gcc"`
   232     CT_DoLog DEBUG "Using gcc for target    : \"${cross_cc}\""
   233     CT_DoLog DEBUG "Configuring with addons : \"`do_libc_add_ons_list ,`\""
   234     CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
   235     CT_DoLog DEBUG "Extra CC args passed    : \"${extra_cc_args}\""
   236 
   237     # Super-H really needs to set configparms as of gcc-3.4/glibc-2.3.2
   238     # note: this is awkward, doesn't work well if you need more than one
   239     # line in configparms
   240     echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
   241 
   242     echo "libc_cv_forced_unwind=yes" > config.cache
   243     echo "libc_cv_c_cleanup=yes" >> config.cache
   244 
   245     # Please see the comment for the configure step in do_libc().
   246 
   247     BUILD_CC=${CT_CC_NATIVE}                                        \
   248     CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O "  \
   249     CC="${cross_cc} ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}"      \
   250     AR=${CT_TARGET}-ar                                              \
   251     RANLIB=${CT_TARGET}-ranlib                                      \
   252     "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"                       \
   253         --prefix=/usr                                               \
   254         --build="${CT_UNIQ_BUILD}"                                  \
   255         --host=${CT_TARGET}                                         \
   256         --without-cvs                                               \
   257         --disable-profile                                           \
   258         --disable-debug                                             \
   259         --without-gd                                                \
   260         --with-headers="${CT_HEADERS_DIR}"                          \
   261         --cache-file=config.cache                                   \
   262         ${extra_config}                                             \
   263         ${CT_LIBC_GLIBC_EXTRA_CONFIG}                               2>&1 |CT_DoLog ALL
   264 
   265 
   266     #TODO: should check whether slibdir has been set in configparms to */lib64
   267     #      and copy the startfiles into the appropriate libdir.
   268     CT_DoLog EXTRA "Building C library start files"
   269     make csu/subdir_lib 2>&1 |CT_DoLog ALL
   270 
   271     CT_DoLog EXTRA "Installing C library start files"
   272     if [ "${CT_USE_SYSROOT}" = "y" ]; then
   273         cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/usr/lib/"
   274     else
   275         cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/lib/"
   276     fi
   277 
   278     CT_EndStep
   279 }
   280 
   281 # This function builds and install the full glibc
   282 do_libc() {
   283     CT_DoStep INFO "Installing C library"
   284 
   285     mkdir -p "${CT_BUILD_DIR}/build-libc"
   286     cd "${CT_BUILD_DIR}/build-libc"
   287 
   288     CT_DoLog EXTRA "Configuring C library"
   289 
   290     # Add some default glibc config options if not given by user.
   291     # We don't need to be conditional on wether the user did set different
   292     # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
   293 
   294     extra_config="--enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
   295 
   296     case "${CT_THREADS}" in
   297         nptl)           extra_config="${extra_config} --with-__thread --with-tls";;
   298         linuxthreads)   extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
   299         none)           extra_config="${extra_config} --without-__thread --without-nptl"
   300                         case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
   301                             *-tls*) ;;
   302                             *) extra_config="${extra_config} --without-tls";;
   303                         esac
   304                         ;;
   305     esac
   306 
   307     case "${CT_SHARED_LIBS}" in
   308         y) extra_config="${extra_config} --enable-shared";;
   309         *) extra_config="${extra_config} --disable-shared";;
   310     esac
   311 
   312     case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
   313         y,) extra_config="${extra_config} --with-fp";;
   314         ,y) extra_config="${extra_config} --without-fp";;
   315     esac
   316 
   317     case "`do_libc_add_ons_list ,`" in
   318         "") ;;
   319         *)  extra_config="${extra_config} --enable-add-ons=`do_libc_add_ons_list ,`";;
   320     esac
   321 
   322 
   323     # Add some default CC args
   324     glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
   325     glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
   326     if [ ${glibc_version_major} -ge 2 -a ${glibc_version_minor} -ge 6 ]; then
   327         # Don't use -pipe: configure chokes on it for glibc >= 2.6.
   328         CT_Test 'Removing "-pipe" for use with glibc>=2.6' "${CT_USE_PIPES}" = "y"
   329         extra_cc_args="${CT_CFLAGS_FOR_HOST/-pipe}"
   330     else
   331         extra_cc_args="${CT_CFLAGS_FOR_HOST}"
   332     fi
   333     extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
   334 
   335     cross_cc=`CT_Which "${CT_TARGET}-gcc"`
   336     CT_DoLog DEBUG "Using gcc for target    : \"${cross_cc}\""
   337     CT_DoLog DEBUG "Configuring with addons : \"`do_libc_add_ons_list ,`\""
   338     CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
   339     CT_DoLog DEBUG "Extra CC args passed    : \"${extra_cc_args}\""
   340 
   341     # sh3 and sh4 really need to set configparms as of gcc-3.4/glibc-2.3.2
   342     # note: this is awkward, doesn't work well if you need more than one line in configparms
   343     echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
   344 
   345     # For glibc 2.3.4 and later we need to set some autoconf cache
   346     # variables, because nptl/sysdeps/pthread/configure.in does not
   347     # work when cross-compiling.
   348     if [ "${CT_THREADS}" = "nptl" ]; then
   349         echo libc_cv_forced_unwind=yes
   350         echo libc_cv_c_cleanup=yes
   351     fi >config.cache
   352 
   353     # Configure with --prefix the way we want it on the target...
   354     # There are a whole lot of settings here.  You'll probably want
   355     # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG
   356     # Compare these options with the ones used when installing the glibc headers above - they're different.
   357     # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" 
   358     # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. 
   359     # Set BUILD_CC, or you won't be able to build datafiles
   360     # Set --build, else glibc-2.3.2 will think you're not cross-compiling, and try to run the test programs
   361 
   362     # OK. I'm fed up with those folks telling me what I should do.
   363     # I don't configure nptl? Well, maybe that's purposedly because
   364     # I don't want nptl! --disable-sanity-checks will shut up those
   365     # silly messages. GNU folks again, he?
   366 
   367     BUILD_CC=${CT_CC_NATIVE}                                        \
   368     CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O"   \
   369     CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
   370     AR=${CT_TARGET}-ar                                              \
   371     RANLIB=${CT_TARGET}-ranlib                                      \
   372     "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"                       \
   373         --prefix=/usr                                               \
   374         --build=${CT_UNIQ_BUILD}                                    \
   375         --host=${CT_TARGET}                                         \
   376         --without-cvs                                               \
   377         --disable-profile                                           \
   378         --disable-debug                                             \
   379         --without-gd                                                \
   380         --disable-sanity-checks                                     \
   381         --cache-file=config.cache                                   \
   382         --with-headers="${CT_HEADERS_DIR}"                          \
   383         ${extra_config}                                             \
   384         ${CT_LIBC_GLIBC_EXTRA_CONFIG}                               2>&1 |CT_DoLog ALL
   385 
   386     if grep -l '^install-lib-all:' "${CT_SRC_DIR}/${CT_LIBC_FILE}/Makerules" > /dev/null; then
   387         # nptl-era glibc.
   388         # If the install-lib-all target (which is added by our make-install-lib-all.patch)
   389         # is present, it means we're building glibc-2.3.3 or later, and we can't
   390         # build programs yet, as they require libeh, which won't be installed
   391         # until full build of gcc
   392         GLIBC_INITIAL_BUILD_RULE=lib
   393         GLIBC_INITIAL_INSTALL_RULE="install-lib-all install-headers"
   394         GLIBC_INSTALL_APPS_LATER=yes
   395     else
   396         # classic glibc.  
   397         # We can build and install everything with the bootstrap compiler.
   398         GLIBC_INITIAL_BUILD_RULE=all
   399         GLIBC_INITIAL_INSTALL_RULE=install
   400         GLIBC_INSTALL_APPS_LATER=no
   401     fi
   402 
   403     # If this fails with an error like this:
   404     # ...  linux/autoconf.h: No such file or directory 
   405     # then you need to set the KERNELCONFIG variable to point to a .config file for this arch.
   406     # The following architectures are known to need kernel .config: alpha, arm, ia64, s390, sh, sparc
   407     # Note: LD and RANLIB needed by glibc-2.1.3's c_stub directory, at least on macosx
   408     # No need for PARALLELMFLAGS here, Makefile already reads this environment variable
   409     CT_DoLog EXTRA "Building C library"
   410     make LD=${CT_TARGET}-ld             \
   411          RANLIB=${CT_TARGET}-ranlib     \
   412          ${GLIBC_INITIAL_BUILD_RULE}    2>&1 |CT_DoLog ALL
   413 
   414     CT_DoLog EXTRA "Installing C library"
   415     make install_root="${CT_SYSROOT_DIR}"   \
   416          ${LIBC_SYSROOT_ARG}                \
   417          ${GLIBC_INITIAL_INSTALL_RULE}      2>&1 |CT_DoLog ALL
   418 
   419     # This doesn't seem to work when building a crosscompiler,
   420     # as it tries to execute localedef using the just-built ld.so!?
   421     #CT_DoLog EXTRA "Installing locales"
   422     #make localedata/install-locales install_root=${SYSROOT} 2>&1 |CT_DoLog ALL
   423 
   424     # Fix problems in linker scripts.
   425     #
   426     # 1. Remove absolute paths
   427     # Any file in a list of known suspects that isn't a symlink is assumed to be a linker script.
   428     # FIXME: test -h is not portable
   429     # FIXME: probably need to check more files than just these three...
   430     # Need to use sed instead of just assuming we know what's in libc.so because otherwise alpha breaks
   431     #
   432     # 2. Remove lines containing BUG per http://sources.redhat.com/ml/bug-glibc/2003-05/msg00055.html,
   433     # needed to fix gcc-3.2.3/glibc-2.3.2 targeting arm
   434     #
   435     # To make "strip *.so.*" not fail (ptxdist does this), rename to .so_orig rather than .so.orig
   436     CT_DoLog EXTRA "Fixing C library linker scripts"
   437     for file in libc.so libpthread.so libgcc_s.so; do
   438         for dir in lib lib64 usr/lib usr/lib64; do
   439             if [ -f "${CT_SYSROOT_DIR}/${dir}/${file}" -a ! -L ${CT_SYSROOT_DIR}/$lib/$file ]; then
   440                 cp "${CT_SYSROOT_DIR}/${dir}/${file}" "${CT_SYSROOT_DIR}/${dir}/${file}_orig"
   441                 CT_DoLog DEBUG "Fixing \"${CT_SYS_ROOT_DIR}/${dir}/${file}\""
   442                 sed -i -r -e 's,/usr/lib/,,g;
   443                               s,/usr/lib64/,,g;
   444                               s,/lib/,,g;
   445                               s,/lib64/,,g;
   446                               /BUG in libc.scripts.output-format.sed/d' "${CT_SYSROOT_DIR}/${dir}/${file}"
   447             fi
   448         done
   449     done
   450 
   451     CT_EndStep
   452 }
   453 
   454 # This function finishes the glibc install
   455 do_libc_finish() {
   456     # Finally, build and install glibc programs, now that libeh (if any) is installed
   457     # Don't do this unless needed, 'cause it causes glibc-2.{1.3,2.2} to fail here with
   458     # .../gcc-3.4.1-glibc-2.1.3/build-glibc/libc.so.6: undefined reference to `__deregister_frame_info'
   459     # .../gcc-3.4.1-glibc-2.1.3/build-glibc/libc.so.6: undefined reference to `__register_frame_info'
   460     [ "${GLIBC_INSTALL_APPS_LATER}" = "yes" ] || return 0
   461 
   462     CT_DoStep INFO "Finishing C library"
   463 
   464     cd "${CT_BUILD_DIR}/build-libc"
   465 
   466     CT_DoLog EXTRA "Re-building C library"
   467     make LD=${CT_TARGET}-ld RANLIB=${CT_TARGET}-ranlib 2>&1 |CT_DoLog ALL
   468 
   469     CT_DoLog EXTRA "Installing missing C library components"
   470     # note: should do full install and then fix linker scripts, but this is faster
   471     for t in bin rootsbin sbin data others; do
   472         make install_root="${CT_SYSROOT_DIR}"   \
   473              ${LIBC_SYSROOT_ARG}                \
   474              install-${t}                       2>&1 |CT_DoLog ALL
   475     done
   476 
   477     CT_EndStep
   478 }
   479 
   480 # Build up the addons list, separated with $1
   481 do_libc_add_ons_list() {
   482     local sep="$1"
   483     local addons_list=`echo "${CT_LIBC_ADDONS_LIST//,/${sep}}" |tr -s ,`
   484     case "${CT_THREADS}" in
   485         none)   ;;
   486         *)      addons_list="${addons_list}${sep}${CT_THREADS}";;
   487     esac
   488     [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
   489     addons_list="${addons_list%%${sep}}"
   490     echo "${addons_list##${sep}}"
   491 }
   492