scripts/build/libc/uClibc.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Fri Jan 03 17:10:09 2014 +0100 (2014-01-03)
changeset 3270 dff359adf15c
parent 3100 bd4af15b7c75
child 3272 16028ca35721
permissions -rw-r--r--
libc/eglibc: fix downloading of localedef addon

For the versions of eglibc where the ports addon is not external (ie,
all versions after, and including 2.17), we would fail to download the
localedef addon, since the test did not care about the addon we were
about to download, only whether the ports addon was external or not.

Fix that by skipping the ports addon only if that's the addon we're
trying to download.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
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@2037
     5
# This is a constant because it does not change very often.
yann@2037
     6
# We're in 2010, and are still using data from 7 years ago.
yann@2037
     7
uclibc_locales_version=030818
yann@2081
     8
uclibc_local_tarball="uClibc-locale-${uclibc_locales_version}"
yann@2037
     9
yann@850
    10
# Download uClibc
yann@850
    11
do_libc_get() {
yann@850
    12
    libc_src="http://www.uclibc.org/downloads
yann@850
    13
              http://www.uclibc.org/downloads/old-releases"
david@3099
    14
    if [ "${CT_LIBC_UCLIBC_CUSTOM}" = "y" ]; then
david@3099
    15
        CT_GetCustom "uClibc" "${CT_LIBC_VERSION}" \
david@3099
    16
                     "${CT_LIBC_UCLIBC_CUSTOM_LOCATION}"
david@3099
    17
    else
david@3099
    18
        CT_GetFile "uClibc-${CT_LIBC_VERSION}" ${libc_src}
david@3099
    19
    fi
yann@850
    20
    # uClibc locales
yann@2036
    21
    if [ "${CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA}" = "y" ]; then
yann@2037
    22
        CT_GetFile "${uclibc_local_tarball}" ${libc_src}
yann@1126
    23
    fi
yann@850
    24
yann@850
    25
    return 0
yann@850
    26
}
yann@850
    27
yann@850
    28
# Extract uClibc
yann@850
    29
do_libc_extract() {
yann@3100
    30
    # If not using custom directory location, extract and patch
yann@3100
    31
    # Note: we do the inverse test we do in other components,
yann@3100
    32
    # because here we still need to extract the locales, even for
yann@3100
    33
    # custom location directory. Just use negate the whole test,
yann@3100
    34
    # to keep it the same as for other components.
yann@3100
    35
    if ! [ "${CT_LIBC_UCLIBC_CUSTOM}" = "y" \
david@3099
    36
         -a -d "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}" ]; then
yann@3100
    37
        CT_Extract "uClibc-${CT_LIBC_VERSION}"
yann@2008
    38
        CT_Patch "uClibc" "${CT_LIBC_VERSION}"
yann@2008
    39
    fi
yann@1126
    40
yann@850
    41
    # uClibc locales
yann@2036
    42
    # Extracting pregen locales ourselves is kinda
yann@2036
    43
    # broken, so just link it in place...
yann@2036
    44
    if [    "${CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA}" = "y"           \
yann@2037
    45
         -a ! -f "${CT_SRC_DIR}/.${uclibc_local_tarball}.extracted" ]; then
yann@2578
    46
        CT_Pushd "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}/extra/locale"
yann@2037
    47
        CT_DoExecLog ALL ln -s "${CT_TARBALLS_DIR}/${uclibc_local_tarball}.tgz" .
yann@1123
    48
        CT_Popd
yann@2037
    49
        touch "${CT_SRC_DIR}/.${uclibc_local_tarball}.extracted"
yann@1123
    50
    fi
yann@850
    51
yann@850
    52
    return 0
yann@850
    53
}
yann@850
    54
yann@850
    55
# Check that uClibc has been previously configured
yann@850
    56
do_libc_check_config() {
yann@850
    57
    CT_DoStep INFO "Checking C library configuration"
yann@850
    58
yann@850
    59
    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
    60
yann@1247
    61
    if grep -E '^KERNEL_SOURCE=' "${CT_LIBC_UCLIBC_CONFIG_FILE}" >/dev/null 2>&1; then
yann@850
    62
        CT_DoLog WARN "Your uClibc version refers to the kernel _sources_, which is bad."
yann@850
    63
        CT_DoLog WARN "I can't guarantee that our little hack will work. Please try to upgrade."
yann@850
    64
    fi
yann@850
    65
yann@850
    66
    CT_DoLog EXTRA "Munging uClibc configuration"
yann@1272
    67
    mungeuClibcConfig "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${CT_CONFIG_DIR}/uClibc.config"
yann@850
    68
yann@850
    69
    CT_EndStep
yann@850
    70
}
yann@850
    71
yann@2268
    72
# Build and install headers and start files
yann@2268
    73
do_libc_start_files() {
yann@1326
    74
    local install_rule
yann@2009
    75
    local cross
yann@1326
    76
yann@850
    77
    CT_DoStep INFO "Installing C library headers"
yann@850
    78
yann@1678
    79
    # Simply copy files until uClibc has the ability to build out-of-tree
yann@1678
    80
    CT_DoLog EXTRA "Copying sources to build dir"
yann@2578
    81
    CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}"   \
yann@1678
    82
                            "${CT_BUILD_DIR}/build-libc-headers"
yann@850
    83
    cd "${CT_BUILD_DIR}/build-libc-headers"
yann@850
    84
yann@850
    85
    # Retrieve the config file
yann@1678
    86
    CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config
yann@850
    87
yann@850
    88
    # uClibc uses the CROSS environment variable as a prefix to the
yann@850
    89
    # compiler tools to use.  Setting it to the empty string forces
yann@850
    90
    # use of the native build host tools, which we need at this
yann@850
    91
    # stage, as we don't have target tools yet.
yann@2009
    92
    # BUT! With NPTL, we need a cross-compiler (and we have it)
yann@2009
    93
    if [ "${CT_THREADS}" = "nptl" ]; then
yann@2009
    94
        cross="${CT_TARGET}-"
yann@2009
    95
    fi
yann@2009
    96
yann@2037
    97
    # Force the date of the pregen locale data, as the
yann@2037
    98
    # newer ones that are referenced are not available
yann@850
    99
    CT_DoLog EXTRA "Applying configuration"
yann@2038
   100
    CT_DoYes "" |CT_DoExecLog ALL                                   \
yann@2038
   101
                 make CROSS="${cross}"                              \
yann@2038
   102
                 PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   103
                 LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   104
                 oldconfig
yann@850
   105
yann@850
   106
    CT_DoLog EXTRA "Building headers"
yann@2038
   107
    CT_DoExecLog ALL                                        \
yann@2038
   108
    make ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2038
   109
         CROSS="${cross}"                                   \
yann@2038
   110
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   111
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   112
         headers
yann@850
   113
yann@1326
   114
    if [ "${CT_LIBC_UCLIBC_0_9_30_or_later}" = "y" ]; then
yann@1326
   115
        install_rule=install_headers
yann@1326
   116
    else
yann@1326
   117
        install_rule=install_dev
yann@1326
   118
    fi
yann@1326
   119
yann@850
   120
    CT_DoLog EXTRA "Installing headers"
yann@2038
   121
    CT_DoExecLog ALL                                        \
yann@2038
   122
    make ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2038
   123
         CROSS="${cross}"                                   \
yann@2038
   124
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   125
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   126
         ${install_rule}
yann@2009
   127
yann@2009
   128
    if [ "${CT_THREADS}" = "nptl" ]; then
yann@2009
   129
        CT_DoLog EXTRA "Building start files"
yann@2038
   130
        CT_DoExecLog ALL                                        \
yann@2275
   131
        make ${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}}           \
yann@2038
   132
             CROSS="${cross}"                                   \
yann@2038
   133
             PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   134
             STRIPTOOL=true                                     \
yann@2038
   135
             ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   136
             LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   137
             lib/crt1.o lib/crti.o lib/crtn.o
yann@2009
   138
yann@2009
   139
        # From:  http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=ad5668a7ac7e0436db92e55caaf3fdf782b6ba3b
yann@2009
   140
        # libm.so is needed for ppc, as libgcc is linked against libm.so
yann@2009
   141
        # No problem to create it for other archs.
yann@2009
   142
        CT_DoLog EXTRA "Building dummy shared libs"
yann@2009
   143
        CT_DoExecLog ALL "${cross}gcc" -nostdlib        \
yann@2009
   144
                                       -nostartfiles    \
yann@2009
   145
                                       -shared          \
yann@2009
   146
                                       -x c /dev/null   \
yann@2009
   147
                                       -o libdummy.so
yann@2009
   148
yann@2009
   149
        CT_DoLog EXTRA "Installing start files"
yann@2009
   150
        CT_DoExecLog ALL install -m 0644 lib/crt1.o lib/crti.o lib/crtn.o   \
yann@2009
   151
                                         "${CT_SYSROOT_DIR}/usr/lib"
yann@2009
   152
yann@2009
   153
        CT_DoLog EXTRA "Installing dummy shared libs"
yann@2009
   154
        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libc.so"
yann@2009
   155
        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libm.so"
yann@2009
   156
    fi # CT_THREADS == nptl
yann@850
   157
yann@850
   158
    CT_EndStep
yann@850
   159
}
yann@850
   160
yann@850
   161
# This function build and install the full uClibc
yann@850
   162
do_libc() {
yann@850
   163
    CT_DoStep INFO "Installing C library"
yann@850
   164
yann@1678
   165
    # Simply copy files until uClibc has the ability to build out-of-tree
yann@1678
   166
    CT_DoLog EXTRA "Copying sources to build dir"
yann@2578
   167
    CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}"   \
yann@1678
   168
                            "${CT_BUILD_DIR}/build-libc"
yann@850
   169
    cd "${CT_BUILD_DIR}/build-libc"
yann@850
   170
yann@850
   171
    # Retrieve the config file
yann@1678
   172
    CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config
yann@850
   173
yann@850
   174
    # uClibc uses the CROSS environment variable as a prefix to the compiler
yann@850
   175
    # tools to use.  The newly built tools should be in our path, so we need
yann@850
   176
    # only give the correct name for them.
yann@850
   177
    # Note about CFLAGS: In uClibc, CFLAGS are generated by Rules.mak,
yann@850
   178
    # depending  on the configuration of the library. That is, they are tailored
yann@850
   179
    # to best fit the target. So it is useless and seems to be a bad thing to
yann@850
   180
    # use LIBC_EXTRA_CFLAGS here.
yann@850
   181
    CT_DoLog EXTRA "Applying configuration"
anthony@2154
   182
    CT_DoYes "" |CT_DoExecLog CFG                                   \
yann@2038
   183
                 make CROSS=${CT_TARGET}-                           \
yann@2038
   184
                 PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   185
                 LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@850
   186
                 oldconfig
yann@850
   187
yann@850
   188
    # We do _not_ want to strip anything for now, in case we specifically
yann@850
   189
    # asked for a debug toolchain, thus the STRIPTOOL= assignment
yann@1029
   190
    # /Old/ versions can not build in //
yann@850
   191
    CT_DoLog EXTRA "Building C library"
yann@2038
   192
    CT_DoExecLog ALL                                        \
yann@2038
   193
    make -j1                                                \
yann@2038
   194
         CROSS=${CT_TARGET}-                                \
yann@2038
   195
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   196
         STRIPTOOL=true                                     \
yann@2038
   197
         ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   198
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   199
         pregen
yann@2038
   200
    CT_DoExecLog ALL                                        \
yann@2275
   201
    make ${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}}           \
yann@2038
   202
         CROSS=${CT_TARGET}-                                \
yann@2038
   203
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   204
         STRIPTOOL=true                                     \
yann@2038
   205
         ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   206
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@850
   207
         all
yann@850
   208
yann@1326
   209
    # YEM-FIXME:
yann@1326
   210
    # - we want to install 'runtime' files, eg. lib*.{a,so*}, crti.o and
yann@1326
   211
    #   such files, except the headers as they already are installed
yann@1326
   212
    # - "make install_dev" installs the headers, the crti.o... and the
yann@1326
   213
    #   static libs, but not the dynamic libs
yann@1326
   214
    # - "make install_runtime" installs the dynamic libs only
yann@1326
   215
    # - "make install" calls install_runtime and install_dev
yann@1326
   216
    # - so we're left with re-installing the headers... Sigh...
yann@1326
   217
    #
yann@850
   218
    # We do _not_ want to strip anything for now, in case we specifically
yann@1027
   219
    # asked for a debug toolchain, hence the STRIPTOOL= assignment
yann@1326
   220
    #
yann@2275
   221
    # Note: JOBSFLAGS is not usefull for installation.
yann@1326
   222
    #
yann@850
   223
    CT_DoLog EXTRA "Installing C library"
yann@2038
   224
    CT_DoExecLog ALL                                        \
yann@2038
   225
    make CROSS=${CT_TARGET}-                                \
yann@2038
   226
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   227
         STRIPTOOL=true                                     \
yann@2038
   228
         ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   229
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@850
   230
         install
yann@850
   231
yann@850
   232
    CT_EndStep
yann@850
   233
}
yann@850
   234
yann@850
   235
# Initialises the .config file to sensible values
yann@850
   236
# $1: original file
yann@850
   237
# $2: munged file
yann@850
   238
mungeuClibcConfig() {
yann@850
   239
    src_config_file="$1"
yann@850
   240
    dst_config_file="$2"
yann@850
   241
    munge_file="${CT_BUILD_DIR}/munge-uClibc-config.sed"
yann@850
   242
yann@850
   243
    # Start with a fresh file
yann@850
   244
    rm -f "${munge_file}"
yann@850
   245
    touch "${munge_file}"
yann@850
   246
yann@1674
   247
    # Do it all in a sub-shell, it's easier to redirect output
yann@1674
   248
    (
yann@1674
   249
yann@850
   250
    # Hack our target in the config file.
yann@1750
   251
    case "${CT_ARCH}:${CT_ARCH_BITNESS}" in
thomas@1910
   252
        x86:32)      arch=i386;;
thomas@1910
   253
        x86:64)      arch=x86_64;;
thomas@1910
   254
        sh:32)       arch="sh";;
thomas@1910
   255
        sh:64)       arch="sh64";;
thomas@1910
   256
        blackfin:32) arch="bfin";;
thomas@1910
   257
        *)           arch="${CT_ARCH}";;
yann@1750
   258
    esac
yann@850
   259
    # Also remove stripping: its the responsibility of the
yann@850
   260
    # firmware builder to strip or not.
yann@1674
   261
    cat <<-ENDSED
yann@1674
   262
		s/^(TARGET_.*)=y$/# \\1 is not set/
yann@1750
   263
		s/^# TARGET_${arch} is not set/TARGET_${arch}=y/
yann@1750
   264
		s/^TARGET_ARCH=".*"/TARGET_ARCH="${arch}"/
yann@1674
   265
		s/.*(DOSTRIP).*/# \\1 is not set/
yann@1674
   266
		ENDSED
yann@850
   267
yann@850
   268
    # Ah. We may one day need architecture-specific handler here...
yann@2115
   269
    case "${CT_ARCH}" in
yann@2115
   270
        arm)
yann@2115
   271
            # Hack the ARM {E,O}ABI into the config file
yann@2115
   272
            if [ "${CT_ARCH_ARM_EABI}" = "y" ]; then
yann@2115
   273
                cat <<-ENDSED
yann@2115
   274
					s/.*(CONFIG_ARM_OABI).*/# \\1 is not set/
yann@2115
   275
					s/.*(CONFIG_ARM_EABI).*/\\1=y/
yann@2115
   276
					ENDSED
yann@2115
   277
            else
yann@2115
   278
                cat <<-ENDSED
yann@2115
   279
					s/.*(CONFIG_ARM_OABI).*/\\1=y/
yann@2115
   280
					s/.*(CONFIG_ARM_EABI).*/# \\1 is not set/
yann@2115
   281
					ENDSED
yann@2115
   282
            fi
yann@2115
   283
            ;;
yann@2119
   284
        mips)
yann@2119
   285
            case "${CT_ARCH_mips_ABI}" in
yann@2119
   286
                32)
yann@2119
   287
                    cat <<-ENDSED
yann@2119
   288
						s/.*(CONFIG_MIPS_O32_ABI).*/\\1=y/
yann@2119
   289
						s/.*(CONFIG_MIPS_N32_ABI).*/# \\1 is not set/
yann@2119
   290
						s/.*(CONFIG_MIPS_N64_ABI).*/# \\1 is not set/
yann@2119
   291
						ENDSED
yann@2119
   292
                    ;;
yann@2119
   293
                # For n32 and n64, also force the ISA
yann@2119
   294
                # Not so sure this is pertinent, so it's
yann@2119
   295
                # commented out for now. It would take a
yann@2119
   296
                # (MIPS+uClibc) expert to either remove
yann@2119
   297
                # or re-enable the overrides.
yann@2119
   298
                n32)
yann@2119
   299
                    cat <<-ENDSED
yann@2119
   300
						s/.*(CONFIG_MIPS_O32_ABI).*/# \\1 is not set/
yann@2119
   301
						s/.*(CONFIG_MIPS_N32_ABI).*/\\1=y/
yann@2119
   302
						s/.*(CONFIG_MIPS_N64_ABI).*/# \\1 is not set/
yann@2119
   303
						s/.*(CONFIG_MIPS_ISA_.*).*/# \\1 is not set/
yann@2119
   304
						s/.*(CONFIG_MIPS_ISA_3).*/\\1=y/
yann@2119
   305
						ENDSED
yann@2119
   306
                    ;;
yann@2119
   307
                64)
yann@2119
   308
                    cat <<-ENDSED
yann@2119
   309
						s/.*(CONFIG_MIPS_O32_ABI).*/# \\1 is not set/
yann@2119
   310
						s/.*(CONFIG_MIPS_N32_ABI).*/# \\1 is not set/
yann@2119
   311
						s/.*(CONFIG_MIPS_N64_ABI).*/\\1=y/
yann@2119
   312
						s/.*(CONFIG_MIPS_ISA_.*).*/# \\1 is not set/
yann@2119
   313
						s/.*(CONFIG_MIPS_ISA_MIPS64).*/\\1=y/
yann@2119
   314
						ENDSED
yann@2119
   315
                    ;;
yann@2119
   316
            esac
yann@2119
   317
            ;;
yann@2115
   318
    esac
yann@850
   319
yann@850
   320
    # Accomodate for old and new uClibc versions, where the
yann@850
   321
    # way to select between big/little endian has changed
yann@2777
   322
    case "${CT_ARCH_ENDIAN}" in
yann@2777
   323
        big)
yann@2777
   324
            cat <<-ENDSED
yann@1674
   325
				s/.*(ARCH_LITTLE_ENDIAN).*/# \\1 is not set/
yann@1674
   326
				s/.*(ARCH_BIG_ENDIAN).*/\\1=y/
yann@1674
   327
				s/.*(ARCH_WANTS_LITTLE_ENDIAN).*/# \\1 is not set/
yann@1674
   328
				s/.*(ARCH_WANTS_BIG_ENDIAN).*/\\1=y/
yann@1674
   329
				ENDSED
yann@850
   330
        ;;
yann@2777
   331
        little)
yann@2777
   332
            cat <<-ENDSED
yann@1674
   333
				s/.*(ARCH_LITTLE_ENDIAN).*/\\1=y/
yann@1674
   334
				s/.*(ARCH_BIG_ENDIAN).*/# \\1 is not set/
yann@1674
   335
				s/.*(ARCH_WANTS_LITTLE_ENDIAN).*/\\1=y/
yann@1674
   336
				s/.*(ARCH_WANTS_BIG_ENDIAN).*/# \\1 is not set/
yann@1674
   337
				ENDSED
yann@850
   338
        ;;
yann@850
   339
    esac
yann@850
   340
yann@2410
   341
    # Accomodate for old and new uClibc versions, where the
yann@2410
   342
    # MMU settings has different config knobs
yann@2410
   343
    if [ "${CT_ARCH_USE_MMU}" = "y" ]; then
yann@2410
   344
        cat <<-ENDSED
yann@2410
   345
			s/.*(ARCH_HAS_MMU).*/\\1=y\nARCH_USE_MMU=y/
yann@2410
   346
			ENDSED
yann@2410
   347
    else
yann@2410
   348
        cat <<-ENDSED
yann@2410
   349
			s/.*(ARCH_HAS_MMU).*/# \\1 is not set/
yann@2410
   350
			/.*(ARCH_USE_MMU).*/d
yann@2410
   351
			ENDSED
yann@2410
   352
    fi
yann@2410
   353
yann@850
   354
    # Accomodate for old and new uClibc version, where the
yann@850
   355
    # way to select between hard/soft float has changed
yann@2761
   356
    case "${CT_ARCH_FLOAT}" in
yann@2761
   357
        hard|softfp)
yann@2761
   358
            cat <<-ENDSED
yann@1674
   359
				s/^[^_]*(HAS_FPU).*/\\1=y/
yann@1674
   360
				s/.*(UCLIBC_HAS_FPU).*/\\1=y/
yann@1674
   361
				ENDSED
yann@850
   362
            ;;
yann@2761
   363
        soft)
yann@2761
   364
            cat <<-ENDSED
yann@1674
   365
				s/^[^_]*(HAS_FPU).*/\\# \\1 is not set/
yann@1674
   366
				s/.*(UCLIBC_HAS_FPU).*/# \\1 is not set/
yann@1674
   367
				ENDSED
yann@850
   368
            ;;
yann@850
   369
    esac
yann@850
   370
yann@2600
   371
    # We always want ctor/dtor
yann@2600
   372
    cat <<-ENDSED
yann@2600
   373
		s/^# (UCLIBC_CTOR_DTOR) is not set/\\1=y/
yann@2600
   374
		ENDSED
yann@2600
   375
yann@850
   376
    # Change paths to work with crosstool-NG
yann@850
   377
    # From http://www.uclibc.org/cgi-bin/viewcvs.cgi?rev=16846&view=rev
yann@850
   378
    #  " we just want the kernel headers, not the whole kernel source ...
yann@850
   379
    #  " so people may need to update their paths slightly
yann@850
   380
    quoted_kernel_source=$(echo "${CT_HEADERS_DIR}" | sed -r -e 's,/include/?$,,; s,/,\\/,g;')
yann@850
   381
    quoted_headers_dir=$(echo "${CT_HEADERS_DIR}" | sed -r -e 's,/,\\/,g;')
yann@850
   382
    # CROSS_COMPILER_PREFIX is left as is, as the CROSS parameter is forced on the command line
yann@850
   383
    # DEVEL_PREFIX is left as '/usr/' because it is post-pended to $PREFIX, wich is the correct value of ${PREFIX}/${TARGET}
yann@850
   384
    # Some (old) versions of uClibc use KERNEL_SOURCE (which is _wrong_), and
yann@1674
   385
    # newer versions use KERNEL_HEADERS (which is right).
yann@1674
   386
    cat <<-ENDSED
yann@1674
   387
		s/^DEVEL_PREFIX=".*"/DEVEL_PREFIX="\\/usr\\/"/
yann@1674
   388
		s/^RUNTIME_PREFIX=".*"/RUNTIME_PREFIX="\\/"/
yann@1674
   389
		s/^SHARED_LIB_LOADER_PREFIX=.*/SHARED_LIB_LOADER_PREFIX="\\/lib\\/"/
yann@1674
   390
		s/^KERNEL_SOURCE=".*"/KERNEL_SOURCE="${quoted_kernel_source}"/
yann@1674
   391
		s/^KERNEL_HEADERS=".*"/KERNEL_HEADERS="${quoted_headers_dir}"/
yann@1674
   392
		s/^UCLIBC_DOWNLOAD_PREGENERATED_LOCALE=y/\\# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE is not set/
yann@1674
   393
		ENDSED
yann@850
   394
yann@850
   395
    if [ "${CT_USE_PIPES}" = "y" ]; then
yann@850
   396
        if grep UCLIBC_EXTRA_CFLAGS extra/Configs/Config.in >/dev/null 2>&1; then
yann@850
   397
            # Good, there is special provision for such things as -pipe!
yann@1674
   398
            cat <<-ENDSED
yann@1674
   399
				s/^(UCLIBC_EXTRA_CFLAGS=".*)"$/\\1 -pipe"/
yann@1674
   400
				ENDSED
yann@850
   401
        else
yann@850
   402
            # Hack our -pipe into WARNINGS, which will be internally incorporated to
yann@850
   403
            # CFLAGS. This a dirty hack, but yet needed
yann@1674
   404
            cat <<-ENDSED
yann@1674
   405
				s/^(WARNINGS=".*)"$/\\1 -pipe"/
yann@1674
   406
				ENDSED
yann@850
   407
        fi
yann@850
   408
    fi
yann@850
   409
yann@1028
   410
    # Locales support
yann@850
   411
    # Note that the two PREGEN_LOCALE and the XLOCALE lines may be missing
yann@850
   412
    # entirely if LOCALE is not set.  If LOCALE was already set, we'll
yann@850
   413
    # assume the user has already made all the appropriate generation
yann@850
   414
    # arrangements.  Note that having the uClibc Makefile download the
yann@850
   415
    # pregenerated locales is not compatible with crosstool; besides,
yann@850
   416
    # crosstool downloads them as part of getandpatch.sh.
yann@2036
   417
    case "${CT_LIBC_UCLIBC_LOCALES}:${CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA}" in
yann@2036
   418
        :*)
yann@2036
   419
            ;;
yann@2036
   420
        y:)
yann@2036
   421
            cat <<-ENDSED
yann@2036
   422
				s/^# UCLIBC_HAS_LOCALE is not set/UCLIBC_HAS_LOCALE=y\\
yann@2036
   423
				# UCLIBC_PREGENERATED_LOCALE_DATA is not set\\
yann@2036
   424
				# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set\\
yann@2036
   425
				# UCLIBC_HAS_XLOCALE is not set/
yann@2036
   426
				ENDSED
yann@2036
   427
            ;;
yann@2036
   428
        y:y)
yann@2036
   429
            cat <<-ENDSED
yann@2036
   430
				s/^# UCLIBC_HAS_LOCALE is not set/UCLIBC_HAS_LOCALE=y\\
yann@2036
   431
				UCLIBC_PREGENERATED_LOCALE_DATA=y\\
yann@2036
   432
				# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set\\
yann@2036
   433
				# UCLIBC_HAS_XLOCALE is not set/
yann@2036
   434
				ENDSED
yann@2036
   435
            ;;
yann@2036
   436
    esac
yann@1028
   437
fpasch@1639
   438
    # WCHAR support
fpasch@1639
   439
    if [ "${CT_LIBC_UCLIBC_WCHAR}" = "y" ] ; then
yann@1674
   440
        cat <<-ENDSED
yann@1674
   441
			s/^.*UCLIBC_HAS_WCHAR.*/UCLIBC_HAS_WCHAR=y/
yann@1674
   442
			ENDSED
fpasch@1639
   443
    else
yann@1674
   444
        cat <<-ENDSED
yann@1674
   445
			s/^.*UCLIBC_HAS_WCHAR.*/UCLIBC_HAS_WCHAR=n/
yann@1674
   446
			ENDSED
fpasch@1639
   447
    fi
fpasch@1639
   448
yann@1028
   449
    # Force on options needed for C++ if we'll be making a C++ compiler.
yann@1028
   450
    # I'm not sure locales are a requirement for doing C++... Are they?
yann@850
   451
    if [ "${CT_CC_LANG_CXX}" = "y" ]; then
yann@1674
   452
        cat <<-ENDSED
yann@1674
   453
			s/^# DO_C99_MATH is not set/DO_C99_MATH=y/
yann@1674
   454
			s/^# UCLIBC_HAS_GNU_GETOPT is not set/UCLIBC_HAS_GNU_GETOPT=y/
yann@1674
   455
			ENDSED
yann@850
   456
    fi
yann@850
   457
yann@1977
   458
    # Push the threading model
yann@1977
   459
    case "${CT_THREADS}:${CT_LIBC_UCLIBC_LNXTHRD}" in
yann@2009
   460
        none:)
yann@1977
   461
            cat <<-ENDSED
yann@1977
   462
				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
yann@1977
   463
				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
yann@1977
   464
				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
yann@2009
   465
				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
yann@1977
   466
				ENDSED
yann@1977
   467
            ;;
yann@2007
   468
        linuxthreads:old)
yann@1977
   469
            cat <<-ENDSED
yann@1977
   470
				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
yann@2007
   471
				s/^# LINUXTHREADS_OLD is not set/LINUXTHREADS_OLD=y/
yann@1977
   472
				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
yann@2009
   473
				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
yann@1977
   474
				ENDSED
yann@1977
   475
            ;;
yann@2007
   476
        linuxthreads:new)
yann@1977
   477
            cat <<-ENDSED
yann@1977
   478
				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
yann@1977
   479
				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
yann@2007
   480
				s/^# LINUXTHREADS_NEW is not set/LINUXTHREADS_NEW=y/
yann@2009
   481
				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
yann@1977
   482
				ENDSED
yann@1977
   483
            ;;
yann@2009
   484
        nptl:)
yann@2009
   485
            cat <<-ENDSED
yann@2009
   486
				s/^HAS_NO_THREADS=y/# HAS_NO_THREADS is not set/
yann@2009
   487
				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
yann@2009
   488
				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
yann@2009
   489
				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
yann@2009
   490
				s/^# UCLIBC_HAS_THREADS_NATIVE is not set/UCLIBC_HAS_THREADS_NATIVE=y/
yann@2009
   491
				ENDSED
yann@2009
   492
            ;;
yann@2009
   493
        *)
yann@2009
   494
            CT_Abort "Incorrect thread settings: CT_THREADS='${CT_THREAD}' CT_LIBC_UCLIBC_LNXTHRD='${CT_LIBC_UCLIBC_LNXTHRD}'"
yann@2009
   495
            ;;
yann@1977
   496
    esac
yann@1977
   497
yann@850
   498
    # Always build the libpthread_db
yann@1674
   499
    cat <<-ENDSED
yann@1674
   500
		s/^# PTHREADS_DEBUG_SUPPORT is not set.*/PTHREADS_DEBUG_SUPPORT=y/
yann@1674
   501
		ENDSED
yann@850
   502
yann@850
   503
    # Force on debug options if asked for
yann@850
   504
    case "${CT_LIBC_UCLIBC_DEBUG_LEVEL}" in
yann@850
   505
      0)
yann@1674
   506
        cat <<-ENDSED
yann@1674
   507
			s/^DODEBUG=y/# DODEBUG is not set/
yann@1674
   508
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
yann@1674
   509
			s/^DOASSERTS=y/# DOASSERTS is not set/
yann@1674
   510
			s/^SUPPORT_LD_DEBUG=y/# SUPPORT_LD_DEBUG is not set/
yann@1674
   511
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
yann@1674
   512
			s/^UCLIBC_MALLOC_DEBUGGING=y/# UCLIBC_MALLOC_DEBUGGING is not set/
yann@1674
   513
			ENDSED
yann@850
   514
        ;;
yann@850
   515
      1)
yann@1674
   516
        cat <<-ENDSED
yann@1674
   517
			s/^# DODEBUG is not set.*/DODEBUG=y/
yann@1674
   518
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
yann@1674
   519
			s/^DOASSERTS=y/# DOASSERTS is not set/
yann@1674
   520
			s/^SUPPORT_LD_DEBUG=y/# SUPPORT_LD_DEBUG is not set/
yann@1674
   521
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
yann@1674
   522
			s/^UCLIBC_MALLOC_DEBUGGING=y/# UCLIBC_MALLOC_DEBUGGING is not set/
yann@1674
   523
			ENDSED
yann@850
   524
        ;;
yann@850
   525
      2)
yann@1674
   526
        cat <<-ENDSED
yann@1674
   527
			s/^# DODEBUG is not set.*/DODEBUG=y/
js@2951
   528
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
js@2951
   529
			s/^# DOASSERTS is not set.*/DOASSERTS=y/
js@2951
   530
			s/^# SUPPORT_LD_DEBUG is not set.*/SUPPORT_LD_DEBUG=y/
js@2951
   531
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
js@2951
   532
			s/^# UCLIBC_MALLOC_DEBUGGING is not set/UCLIBC_MALLOC_DEBUGGING=y/
js@2951
   533
			ENDSED
js@2951
   534
        ;;
js@2951
   535
      3)
js@2951
   536
        cat <<-ENDSED
js@2951
   537
			s/^# DODEBUG is not set.*/DODEBUG=y/
yann@1674
   538
			s/^# DODEBUG_PT is not set.*/DODEBUG_PT=y/
yann@1674
   539
			s/^# DOASSERTS is not set.*/DOASSERTS=y/
yann@1674
   540
			s/^# SUPPORT_LD_DEBUG is not set.*/SUPPORT_LD_DEBUG=y/
yann@1674
   541
			s/^# SUPPORT_LD_DEBUG_EARLY is not set.*/SUPPORT_LD_DEBUG_EARLY=y/
yann@1674
   542
			s/^# UCLIBC_MALLOC_DEBUGGING is not set/UCLIBC_MALLOC_DEBUGGING=y/
yann@1674
   543
			ENDSED
yann@850
   544
        ;;
yann@850
   545
    esac
yann@1674
   546
yann@1674
   547
    # And now, this is the end
yann@1674
   548
    ) >>"${munge_file}"
yann@1674
   549
yann@850
   550
    sed -r -f "${munge_file}" "${src_config_file}" >"${dst_config_file}"
yann@850
   551
}