scripts/build/libc/uClibc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Jan 13 20:46:01 2010 +0100 (2010-01-13)
changeset 1732 6b2ae7804c6f
parent 1675 2ad2cbc1f709
child 1748 54bbdbf316f3
permissions -rw-r--r--
debug/gdb: staticaly link to ncurses for the native gdb

Staticaly link the native gdb (the one that runs on the target,
not the cross one that runs on the host) to ncurses.
yann@850
     1
# This file declares functions to install the uClibc C library
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@850
     5
# Download uClibc
yann@850
     6
do_libc_get() {
yann@850
     7
    libc_src="http://www.uclibc.org/downloads
yann@850
     8
              http://www.uclibc.org/downloads/snapshots
yann@850
     9
              http://www.uclibc.org/downloads/old-releases"
yann@850
    10
    # For uClibc, we have almost every thing: releases, and snapshots
yann@850
    11
    # for the last month or so. We'll have to deal with svn revisions
yann@850
    12
    # later...
yann@1123
    13
    CT_GetFile "uClibc-${CT_LIBC_VERSION}" ${libc_src}
yann@850
    14
    # uClibc locales
yann@1126
    15
    if [ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ]; then
yann@1126
    16
        CT_GetFile "uClibc-locale-030818" ${libc_src}
yann@1126
    17
    fi
yann@850
    18
yann@850
    19
    return 0
yann@850
    20
}
yann@850
    21
yann@850
    22
# Extract uClibc
yann@850
    23
do_libc_extract() {
yann@1126
    24
    CT_Extract "uClibc-${CT_LIBC_VERSION}"
yann@1126
    25
    CT_Patch "uClibc-${CT_LIBC_VERSION}"
yann@1126
    26
yann@850
    27
    # uClibc locales
yann@1123
    28
    if [ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ]; then
yann@1126
    29
        CT_Pushd "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}/extra/locale"
yann@1126
    30
        CT_Extract "uClibc-locale-030818" nochdir
yann@1126
    31
        CT_Patch "uClibc-locale-030818" nochdir
yann@1123
    32
        CT_Popd
yann@1123
    33
    fi
yann@850
    34
yann@850
    35
    return 0
yann@850
    36
}
yann@850
    37
yann@850
    38
# Check that uClibc has been previously configured
yann@850
    39
do_libc_check_config() {
yann@850
    40
    CT_DoStep INFO "Checking C library configuration"
yann@850
    41
yann@850
    42
    CT_TestOrAbort "You did not provide a uClibc config file!" -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" -a -f "${CT_LIBC_UCLIBC_CONFIG_FILE}"
yann@850
    43
yann@1247
    44
    if grep -E '^KERNEL_SOURCE=' "${CT_LIBC_UCLIBC_CONFIG_FILE}" >/dev/null 2>&1; then
yann@850
    45
        CT_DoLog WARN "Your uClibc version refers to the kernel _sources_, which is bad."
yann@850
    46
        CT_DoLog WARN "I can't guarantee that our little hack will work. Please try to upgrade."
yann@850
    47
    fi
yann@850
    48
yann@850
    49
    CT_DoLog EXTRA "Munging uClibc configuration"
yann@1272
    50
    mungeuClibcConfig "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${CT_CONFIG_DIR}/uClibc.config"
yann@850
    51
yann@850
    52
    CT_EndStep
yann@850
    53
}
yann@850
    54
yann@850
    55
# This functions installs uClibc's headers
yann@850
    56
do_libc_headers() {
yann@1326
    57
    local install_rule
yann@1326
    58
yann@850
    59
    CT_DoStep INFO "Installing C library headers"
yann@850
    60
yann@1678
    61
    # Simply copy files until uClibc has the ability to build out-of-tree
yann@1678
    62
    CT_DoLog EXTRA "Copying sources to build dir"
yann@1678
    63
    CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}"   \
yann@1678
    64
                            "${CT_BUILD_DIR}/build-libc-headers"
yann@850
    65
    cd "${CT_BUILD_DIR}/build-libc-headers"
yann@850
    66
yann@850
    67
    # Retrieve the config file
yann@1678
    68
    CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config
yann@850
    69
yann@850
    70
    # uClibc uses the CROSS environment variable as a prefix to the
yann@850
    71
    # compiler tools to use.  Setting it to the empty string forces
yann@850
    72
    # use of the native build host tools, which we need at this
yann@850
    73
    # stage, as we don't have target tools yet.
yann@850
    74
    CT_DoLog EXTRA "Applying configuration"
yann@850
    75
    CT_DoYes "" |CT_DoExecLog ALL make CROSS= PREFIX="${CT_SYSROOT_DIR}/" oldconfig
yann@850
    76
yann@850
    77
    CT_DoLog EXTRA "Building headers"
yann@850
    78
    CT_DoExecLog ALL make ${CT_LIBC_UCLIBC_VERBOSITY} CROSS= PREFIX="${CT_SYSROOT_DIR}/" headers
yann@850
    79
yann@1326
    80
    if [ "${CT_LIBC_UCLIBC_0_9_30_or_later}" = "y" ]; then
yann@1326
    81
        install_rule=install_headers
yann@1326
    82
    else
yann@1326
    83
        install_rule=install_dev
yann@1326
    84
    fi
yann@1326
    85
yann@850
    86
    CT_DoLog EXTRA "Installing headers"
yann@1331
    87
    CT_DoExecLog ALL make ${CT_LIBC_UCLIBC_VERBOSITY} CROSS= PREFIX="${CT_SYSROOT_DIR}/" "${install_rule}"
yann@850
    88
yann@850
    89
    CT_EndStep
yann@850
    90
}
yann@850
    91
yann@850
    92
# Build and install start files
yann@850
    93
do_libc_start_files() {
yann@850
    94
    :
yann@850
    95
}
yann@850
    96
yann@850
    97
# This function build and install the full uClibc
yann@850
    98
do_libc() {
yann@850
    99
    CT_DoStep INFO "Installing C library"
yann@850
   100
yann@1678
   101
    # Simply copy files until uClibc has the ability to build out-of-tree
yann@1678
   102
    CT_DoLog EXTRA "Copying sources to build dir"
yann@1678
   103
    CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}"   \
yann@1678
   104
                            "${CT_BUILD_DIR}/build-libc"
yann@850
   105
    cd "${CT_BUILD_DIR}/build-libc"
yann@850
   106
yann@850
   107
    # Retrieve the config file
yann@1678
   108
    CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config
yann@850
   109
yann@850
   110
    # uClibc uses the CROSS environment variable as a prefix to the compiler
yann@850
   111
    # tools to use.  The newly built tools should be in our path, so we need
yann@850
   112
    # only give the correct name for them.
yann@850
   113
    # Note about CFLAGS: In uClibc, CFLAGS are generated by Rules.mak,
yann@850
   114
    # depending  on the configuration of the library. That is, they are tailored
yann@850
   115
    # to best fit the target. So it is useless and seems to be a bad thing to
yann@850
   116
    # use LIBC_EXTRA_CFLAGS here.
yann@850
   117
    CT_DoLog EXTRA "Applying configuration"
yann@850
   118
    CT_DoYes "" |CT_DoExecLog ALL               \
yann@850
   119
                 make CROSS=${CT_TARGET}-       \
yann@850
   120
                 PREFIX="${CT_SYSROOT_DIR}/"    \
yann@850
   121
                 oldconfig
yann@850
   122
yann@850
   123
    # We do _not_ want to strip anything for now, in case we specifically
yann@850
   124
    # asked for a debug toolchain, thus the STRIPTOOL= assignment
yann@1029
   125
    # /Old/ versions can not build in //
yann@850
   126
    CT_DoLog EXTRA "Building C library"
yann@1029
   127
    CT_DoExecLog ALL                                    \
yann@1029
   128
    make ${CT_LIBC_UCLIBC_PARALLEL:+${PARALLELMFLAGS}}  \
yann@1029
   129
         CROSS=${CT_TARGET}-                            \
yann@1029
   130
         PREFIX="${CT_SYSROOT_DIR}/"                    \
yann@1029
   131
         STRIPTOOL=true                                 \
yann@1029
   132
         ${CT_LIBC_UCLIBC_VERBOSITY}                    \
yann@850
   133
         all
yann@850
   134
yann@1326
   135
    # YEM-FIXME:
yann@1326
   136
    # - we want to install 'runtime' files, eg. lib*.{a,so*}, crti.o and
yann@1326
   137
    #   such files, except the headers as they already are installed
yann@1326
   138
    # - "make install_dev" installs the headers, the crti.o... and the
yann@1326
   139
    #   static libs, but not the dynamic libs
yann@1326
   140
    # - "make install_runtime" installs the dynamic libs only
yann@1326
   141
    # - "make install" calls install_runtime and install_dev
yann@1326
   142
    # - so we're left with re-installing the headers... Sigh...
yann@1326
   143
    #
yann@850
   144
    # We do _not_ want to strip anything for now, in case we specifically
yann@1027
   145
    # asked for a debug toolchain, hence the STRIPTOOL= assignment
yann@1326
   146
    #
yann@1326
   147
    # Note: PARALLELMFLAGS is not usefull for installation.
yann@1326
   148
    #
yann@850
   149
    CT_DoLog EXTRA "Installing C library"
yann@850
   150
    CT_DoExecLog ALL                    \
yann@850
   151
    make CROSS=${CT_TARGET}-            \
yann@850
   152
         PREFIX="${CT_SYSROOT_DIR}/"    \
yann@850
   153
         STRIPTOOL=true                 \
yann@850
   154
         ${CT_LIBC_UCLIBC_VERBOSITY}    \
yann@850
   155
         install
yann@850
   156
yann@1209
   157
    if [ "${CT_LIBC_UCLIBC_BUILD_CROSS_LDD}" = "y" ]; then
yann@1209
   158
        CT_DoLog EXTRA "Building C library cross-ldd"
yann@1209
   159
        CT_DoExecLog ALL                    \
yann@1209
   160
        make PREFIX="${CT_SYSROOT_DIR}/"    \
yann@1209
   161
             ${CT_LIBC_UCLIBC_VERBOSITY}    \
yann@1209
   162
             -C utils hostutils
yann@1209
   163
yann@1209
   164
        CT_DoLog EXTRA "Installing C library cross-ldd"
yann@1209
   165
        CT_DoExecLog ALL install -m 0755 utils/ldd.host "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ldd"
yann@1209
   166
    fi
yann@1209
   167
yann@850
   168
    CT_EndStep
yann@850
   169
}
yann@850
   170
yann@850
   171
# This function is used to install those components needing the final C compiler
yann@850
   172
do_libc_finish() {
yann@1209
   173
    :
yann@850
   174
}
yann@850
   175
yann@850
   176
# Initialises the .config file to sensible values
yann@850
   177
# $1: original file
yann@850
   178
# $2: munged file
yann@850
   179
mungeuClibcConfig() {
yann@850
   180
    src_config_file="$1"
yann@850
   181
    dst_config_file="$2"
yann@850
   182
    munge_file="${CT_BUILD_DIR}/munge-uClibc-config.sed"
yann@850
   183
yann@850
   184
    # Start with a fresh file
yann@850
   185
    rm -f "${munge_file}"
yann@850
   186
    touch "${munge_file}"
yann@850
   187
yann@1674
   188
    # Do it all in a sub-shell, it's easier to redirect output
yann@1674
   189
    (
yann@1674
   190
yann@850
   191
    # Hack our target in the config file.
yann@850
   192
    # Also remove stripping: its the responsibility of the
yann@850
   193
    # firmware builder to strip or not.
yann@1674
   194
    cat <<-ENDSED
yann@1674
   195
		s/^(TARGET_.*)=y$/# \\1 is not set/
yann@1674
   196
		s/^# TARGET_${CT_KERNEL_ARCH} is not set/TARGET_${CT_KERNEL_ARCH}=y/
yann@1674
   197
		s/^TARGET_ARCH=".*"/TARGET_ARCH="${CT_KERNEL_ARCH}"/
yann@1674
   198
		s/.*(DOSTRIP).*/# \\1 is not set/
yann@1674
   199
		ENDSED
yann@850
   200
yann@850
   201
    # Ah. We may one day need architecture-specific handler here...
yann@1675
   202
    if [ "${CT_ARCH}" = "arm" ]; then
yann@1675
   203
        # Hack the ARM {E,O}ABI into the config file
yann@1675
   204
        if [ "${CT_ARCH_ARM_EABI}" = "y" ]; then
yann@1675
   205
            cat <<-ENDSED
yann@1675
   206
				s/.*(CONFIG_ARM_OABI).*/# \\1 is not set/
yann@1675
   207
				s/.*(CONFIG_ARM_EABI).*/\\1=y/
yann@1675
   208
				ENDSED
yann@1675
   209
        else
yann@1675
   210
            cat <<-ENDSED
yann@1675
   211
				s/.*(CONFIG_ARM_OABI).*/\\1=y/
yann@1675
   212
				s/.*(CONFIG_ARM_EABI).*/# \\1 is not set/
yann@1675
   213
				ENDSED
yann@1675
   214
        fi
yann@850
   215
    fi
yann@850
   216
yann@850
   217
    # Accomodate for old and new uClibc versions, where the
yann@850
   218
    # way to select between big/little endian has changed
yann@850
   219
    case "${CT_ARCH_BE},${CT_ARCH_LE}" in
yann@1674
   220
        y,) cat <<-ENDSED
yann@1674
   221
				s/.*(ARCH_LITTLE_ENDIAN).*/# \\1 is not set/
yann@1674
   222
				s/.*(ARCH_BIG_ENDIAN).*/\\1=y/
yann@1674
   223
				s/.*(ARCH_WANTS_LITTLE_ENDIAN).*/# \\1 is not set/
yann@1674
   224
				s/.*(ARCH_WANTS_BIG_ENDIAN).*/\\1=y/
yann@1674
   225
				ENDSED
yann@850
   226
        ;;
yann@1674
   227
        ,y) cat <<-ENDSED
yann@1674
   228
				s/.*(ARCH_LITTLE_ENDIAN).*/\\1=y/
yann@1674
   229
				s/.*(ARCH_BIG_ENDIAN).*/# \\1 is not set/
yann@1674
   230
				s/.*(ARCH_WANTS_LITTLE_ENDIAN).*/\\1=y/
yann@1674
   231
				s/.*(ARCH_WANTS_BIG_ENDIAN).*/# \\1 is not set/
yann@1674
   232
				ENDSED
yann@850
   233
        ;;
yann@850
   234
    esac
yann@850
   235
yann@850
   236
    # Accomodate for old and new uClibc version, where the
yann@850
   237
    # way to select between hard/soft float has changed
yann@850
   238
    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
yann@1674
   239
        y,) cat <<-ENDSED
yann@1674
   240
				s/^[^_]*(HAS_FPU).*/\\1=y/
yann@1674
   241
				s/.*(UCLIBC_HAS_FPU).*/\\1=y/
yann@1674
   242
				ENDSED
yann@850
   243
            ;;
yann@1674
   244
        ,y) cat <<-ENDSED
yann@1674
   245
				s/^[^_]*(HAS_FPU).*/\\# \\1 is not set/
yann@1674
   246
				s/.*(UCLIBC_HAS_FPU).*/# \\1 is not set/
yann@1674
   247
				ENDSED
yann@850
   248
            ;;
yann@850
   249
    esac
yann@850
   250
yann@850
   251
    # Change paths to work with crosstool-NG
yann@850
   252
    # From http://www.uclibc.org/cgi-bin/viewcvs.cgi?rev=16846&view=rev
yann@850
   253
    #  " we just want the kernel headers, not the whole kernel source ...
yann@850
   254
    #  " so people may need to update their paths slightly
yann@850
   255
    quoted_kernel_source=$(echo "${CT_HEADERS_DIR}" | sed -r -e 's,/include/?$,,; s,/,\\/,g;')
yann@850
   256
    quoted_headers_dir=$(echo "${CT_HEADERS_DIR}" | sed -r -e 's,/,\\/,g;')
yann@850
   257
    # CROSS_COMPILER_PREFIX is left as is, as the CROSS parameter is forced on the command line
yann@850
   258
    # DEVEL_PREFIX is left as '/usr/' because it is post-pended to $PREFIX, wich is the correct value of ${PREFIX}/${TARGET}
yann@850
   259
    # Some (old) versions of uClibc use KERNEL_SOURCE (which is _wrong_), and
yann@1674
   260
    # newer versions use KERNEL_HEADERS (which is right).
yann@1674
   261
    cat <<-ENDSED
yann@1674
   262
		s/^DEVEL_PREFIX=".*"/DEVEL_PREFIX="\\/usr\\/"/
yann@1674
   263
		s/^RUNTIME_PREFIX=".*"/RUNTIME_PREFIX="\\/"/
yann@1674
   264
		s/^SHARED_LIB_LOADER_PREFIX=.*/SHARED_LIB_LOADER_PREFIX="\\/lib\\/"/
yann@1674
   265
		s/^KERNEL_SOURCE=".*"/KERNEL_SOURCE="${quoted_kernel_source}"/
yann@1674
   266
		s/^KERNEL_HEADERS=".*"/KERNEL_HEADERS="${quoted_headers_dir}"/
yann@1674
   267
		s/^UCLIBC_DOWNLOAD_PREGENERATED_LOCALE=y/\\# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE is not set/
yann@1674
   268
		ENDSED
yann@850
   269
yann@850
   270
    if [ "${CT_USE_PIPES}" = "y" ]; then
yann@850
   271
        if grep UCLIBC_EXTRA_CFLAGS extra/Configs/Config.in >/dev/null 2>&1; then
yann@850
   272
            # Good, there is special provision for such things as -pipe!
yann@1674
   273
            cat <<-ENDSED
yann@1674
   274
				s/^(UCLIBC_EXTRA_CFLAGS=".*)"$/\\1 -pipe"/
yann@1674
   275
				ENDSED
yann@850
   276
        else
yann@850
   277
            # Hack our -pipe into WARNINGS, which will be internally incorporated to
yann@850
   278
            # CFLAGS. This a dirty hack, but yet needed
yann@1674
   279
            cat <<-ENDSED
yann@1674
   280
				s/^(WARNINGS=".*)"$/\\1 -pipe"/
yann@1674
   281
				ENDSED
yann@850
   282
        fi
yann@850
   283
    fi
yann@850
   284
yann@1028
   285
    # Locales support
yann@850
   286
    # Note that the two PREGEN_LOCALE and the XLOCALE lines may be missing
yann@850
   287
    # entirely if LOCALE is not set.  If LOCALE was already set, we'll
yann@850
   288
    # assume the user has already made all the appropriate generation
yann@850
   289
    # arrangements.  Note that having the uClibc Makefile download the
yann@850
   290
    # pregenerated locales is not compatible with crosstool; besides,
yann@850
   291
    # crosstool downloads them as part of getandpatch.sh.
yann@1028
   292
    if [ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ] ; then
yann@1674
   293
        cat <<-ENDSED
yann@1674
   294
			s/^# UCLIBC_HAS_LOCALE is not set/UCLIBC_HAS_LOCALE=y\\
yann@1674
   295
			UCLIBC_PREGENERATED_LOCALE_DATA=y\\
yann@1674
   296
			# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set\\
yann@1674
   297
			# UCLIBC_HAS_XLOCALE is not set/
yann@1674
   298
			ENDSED
yann@1028
   299
    fi
yann@1028
   300
fpasch@1639
   301
    # WCHAR support
fpasch@1639
   302
    if [ "${CT_LIBC_UCLIBC_WCHAR}" = "y" ] ; then
yann@1674
   303
        cat <<-ENDSED
yann@1674
   304
			s/^.*UCLIBC_HAS_WCHAR.*/UCLIBC_HAS_WCHAR=y/
yann@1674
   305
			ENDSED
fpasch@1639
   306
    else
yann@1674
   307
        cat <<-ENDSED
yann@1674
   308
			s/^.*UCLIBC_HAS_WCHAR.*/UCLIBC_HAS_WCHAR=n/
yann@1674
   309
			ENDSED
fpasch@1639
   310
    fi
fpasch@1639
   311
yann@1028
   312
    # Force on options needed for C++ if we'll be making a C++ compiler.
yann@1028
   313
    # I'm not sure locales are a requirement for doing C++... Are they?
yann@850
   314
    if [ "${CT_CC_LANG_CXX}" = "y" ]; then
yann@1674
   315
        cat <<-ENDSED
yann@1674
   316
			s/^# DO_C99_MATH is not set/DO_C99_MATH=y/
yann@1674
   317
			s/^# UCLIBC_CTOR_DTOR is not set/UCLIBC_CTOR_DTOR=y/
yann@1674
   318
			s/^# UCLIBC_HAS_GNU_GETOPT is not set/UCLIBC_HAS_GNU_GETOPT=y/
yann@1674
   319
			ENDSED
yann@850
   320
    fi
yann@850
   321
yann@850
   322
    # Always build the libpthread_db
yann@1674
   323
    cat <<-ENDSED
yann@1674
   324
		s/^# PTHREADS_DEBUG_SUPPORT is not set.*/PTHREADS_DEBUG_SUPPORT=y/
yann@1674
   325
		ENDSED
yann@850
   326
yann@850
   327
    # Force on debug options if asked for
yann@850
   328
    case "${CT_LIBC_UCLIBC_DEBUG_LEVEL}" in
yann@850
   329
      0)
yann@1674
   330
        cat <<-ENDSED
yann@1674
   331
			s/^DODEBUG=y/# DODEBUG is not set/
yann@1674
   332
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
yann@1674
   333
			s/^DOASSERTS=y/# DOASSERTS is not set/
yann@1674
   334
			s/^SUPPORT_LD_DEBUG=y/# SUPPORT_LD_DEBUG is not set/
yann@1674
   335
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
yann@1674
   336
			s/^UCLIBC_MALLOC_DEBUGGING=y/# UCLIBC_MALLOC_DEBUGGING is not set/
yann@1674
   337
			ENDSED
yann@850
   338
        ;;
yann@850
   339
      1)
yann@1674
   340
        cat <<-ENDSED
yann@1674
   341
			s/^# DODEBUG is not set.*/DODEBUG=y/
yann@1674
   342
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
yann@1674
   343
			s/^DOASSERTS=y/# DOASSERTS is not set/
yann@1674
   344
			s/^SUPPORT_LD_DEBUG=y/# SUPPORT_LD_DEBUG is not set/
yann@1674
   345
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
yann@1674
   346
			s/^UCLIBC_MALLOC_DEBUGGING=y/# UCLIBC_MALLOC_DEBUGGING is not set/
yann@1674
   347
			ENDSED
yann@850
   348
        ;;
yann@850
   349
      2)
yann@1674
   350
        cat <<-ENDSED
yann@1674
   351
			s/^# DODEBUG is not set.*/DODEBUG=y/
yann@1674
   352
			s/^# DODEBUG_PT is not set.*/DODEBUG_PT=y/
yann@1674
   353
			s/^# DOASSERTS is not set.*/DOASSERTS=y/
yann@1674
   354
			s/^# SUPPORT_LD_DEBUG is not set.*/SUPPORT_LD_DEBUG=y/
yann@1674
   355
			s/^# SUPPORT_LD_DEBUG_EARLY is not set.*/SUPPORT_LD_DEBUG_EARLY=y/
yann@1674
   356
			s/^# UCLIBC_MALLOC_DEBUGGING is not set/UCLIBC_MALLOC_DEBUGGING=y/
yann@1674
   357
			ENDSED
yann@850
   358
        ;;
yann@850
   359
    esac
yann@1674
   360
yann@1674
   361
    # And now, this is the end
yann@1674
   362
    ) >>"${munge_file}"
yann@1674
   363
yann@850
   364
    sed -r -f "${munge_file}" "${src_config_file}" >"${dst_config_file}"
yann@850
   365
}