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
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}"
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
20 CT_GetFile "${CT_LIBC_FILE}" {ftp,http}://ftp.gnu.org/gnu/glibc
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
34 CT_ExtractAndPatch "${CT_LIBC_FILE}"
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}"
46 # There is nothing to do for glibc check config
47 do_libc_check_config() {
51 # This function installs the glibc headers needed to build the core compiler
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
57 CT_DoStep INFO "Installing C library headers"
59 mkdir -p "${CT_BUILD_DIR}/build-libc-headers"
60 cd "${CT_BUILD_DIR}/build-libc-headers"
62 CT_DoLog EXTRA "Configuring C library"
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)
74 # "*** WARNING: Are you sure you do not want to use the `linuxthreads'"
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'.
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;'`
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}\""
90 libc_cv_ppc_machine=yes \
92 "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure" \
93 --build="${CT_UNIQ_BUILD}" \
94 --host="${CT_TARGET}" \
96 --with-headers="${CT_HEADERS_DIR}" \
98 --disable-sanity-checks \
99 --enable-hacker-mode \
101 --without-nptl 2>&1 |CT_DoLog ALL
103 CT_DoLog EXTRA "Installing C library headers"
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
113 # The real fix would be to get install-headers to not generate
115 # Note: BOOTSTRAP_GCC is used by:
116 # patches/glibc-2.3.5/glibc-mips-bootstrap-gcc-header-install.patch
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
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
126 touch stdio-common/errlist-compat.c
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
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"
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"
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
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"
155 case "${CT_THREADS}" in
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"
166 pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h"
173 if [ -n "${pthread_h}" ]; then
174 cp -v "${pthread_h}" "${CT_HEADERS_DIR}/pthread.h" 2>&1 |CT_DoLog ALL
176 if [ -n "${pthreadtypes_h}" ]; then
177 cp -v "${pthreadtypes_h}" "${CT_HEADERS_DIR}/bits/pthreadtypes.h" 2>&1 |CT_DoLog ALL
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
188 CT_DoStep INFO "Installing C library start files"
190 mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
191 cd "${CT_BUILD_DIR}/build-libc-startfiles"
193 CT_DoLog EXTRA "Configuring C library"
195 # Add some default glibc config options if not given by user.
197 case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
199 *) extra_config="${extra_config} --enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
201 case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
203 *) extra_config="${extra_config} --with-tls"
205 case "${CT_SHARED_LIBS}" in
206 y) extra_config="${extra_config} --enable-shared";;
207 *) extra_config="${extra_config} --disable-shared";;
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";;
213 # Obviously, we want threads, as we come here only for NPTL
214 extra_config="${extra_config} --with-__thread"
216 addons_config="--enable-add-ons=`do_libc_add_ons_list ,`"
217 extra_config="${extra_config} ${addons_config}"
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}"
228 extra_cc_args="${CT_CFLAGS_FOR_HOST}"
230 extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
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}\""
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
243 echo "libc_cv_forced_unwind=yes" > config.cache
244 echo "libc_cv_c_cleanup=yes" >> config.cache
246 # Please see the comment for the configure step in do_libc().
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}" \
252 RANLIB=${CT_TARGET}-ranlib \
253 "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure" \
255 --build="${CT_UNIQ_BUILD}" \
256 --host=${CT_TARGET} \
261 --with-headers="${CT_HEADERS_DIR}" \
262 --cache-file=config.cache \
264 ${CT_LIBC_GLIBC_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
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
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/"
276 cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/lib/"
282 # This function builds and install the full glibc
284 CT_DoStep INFO "Installing C library"
286 mkdir -p "${CT_BUILD_DIR}/build-libc"
287 cd "${CT_BUILD_DIR}/build-libc"
289 CT_DoLog EXTRA "Configuring C library"
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
295 extra_config="--enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
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
303 *) extra_config="${extra_config} --without-tls";;
308 case "${CT_SHARED_LIBS}" in
309 y) extra_config="${extra_config} --enable-shared";;
310 *) extra_config="${extra_config} --disable-shared";;
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";;
318 case "`do_libc_add_ons_list ,`" in
320 *) extra_config="${extra_config} --enable-add-ons=`do_libc_add_ons_list ,`";;
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}"
333 extra_cc_args="${CT_CFLAGS_FOR_HOST}"
335 extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
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}\""
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
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
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
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?
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}" \
373 RANLIB=${CT_TARGET}-ranlib \
374 "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure" \
376 --build=${CT_UNIQ_BUILD} \
377 --host=${CT_TARGET} \
382 --disable-sanity-checks \
383 --cache-file=config.cache \
384 --with-headers="${CT_HEADERS_DIR}" \
386 ${CT_LIBC_GLIBC_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
388 if grep -l '^install-lib-all:' "${CT_SRC_DIR}/${CT_LIBC_FILE}/Makerules" > /dev/null; then
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
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
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
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
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
431 # Fix problems in linker scripts.
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
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
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;
453 /BUG in libc.scripts.output-format.sed/d' "${CT_SYSROOT_DIR}/${dir}/${file}"
461 # This function finishes the glibc install
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
469 CT_DoStep INFO "Finishing C library"
471 cd "${CT_BUILD_DIR}/build-libc"
473 CT_DoLog EXTRA "Re-building C library"
474 make LD=${CT_TARGET}-ld RANLIB=${CT_TARGET}-ranlib 2>&1 |CT_DoLog ALL
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
487 # Build up the addons list, separated with $1
488 do_libc_add_ons_list() {
490 local addons_list=`echo "${CT_LIBC_ADDONS_LIST//,/${sep}}" |tr -s ,`
491 case "${CT_THREADS}" in
493 *) addons_list="${addons_list}${sep}${CT_THREADS}";;
495 [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
496 addons_list="${addons_list%%${sep}}"
497 echo "${addons_list##${sep}}"