Merge the bash_array branch.

For every components where it makes sense, use bash arrays (instead
of a string with space-separated values) to store the options pased
to ./configure.
This commit is contained in:
Yann E. MORIN" 2009-08-19 19:52:04 +02:00
commit 4de6139e7e
8 changed files with 199 additions and 146 deletions

View File

@ -219,6 +219,17 @@ config CC_SJLJ_EXCEPTIONS_DONT_USE
endchoice
config CC_ENABLE_CXX_FLAGS
string
prompt "Flags to pass to --enable-cxx-flags"
default ""
help
Enter here the value of the gcc's ./configure option --enable-cxx-flags.
Leave empty if you don't know better.
Note: just pass in the option _value_, that is only the part that goes
after the '=' sign.
config CC_CORE_EXTRA_CONFIG
string
prompt "Core gcc extra config"

4
configure vendored
View File

@ -318,8 +318,8 @@ add_to_var_list sed
# The regular list of tools we can now easily check for
has_or_abort prog=bash \
var=bash \
ver='^GNU bash, version [34]\.' \
err="'bash' 3.x or above was not found"
ver='^GNU bash, version (3\.[1-9]|4)' \
err="'bash' 3.1 or above was not found"
has_or_abort prog=cut
has_or_abort prog=install var=install
has_or_abort prog=make \

View File

@ -17,16 +17,18 @@ do_binutils_extract() {
# Build binutils
do_binutils() {
local -a extra_config
mkdir -p "${CT_BUILD_DIR}/build-binutils"
cd "${CT_BUILD_DIR}/build-binutils"
CT_DoStep INFO "Installing binutils"
binutils_opts=
# If GMP and MPFR were configured, then use that,
# otherwise let binutils find the system-wide libraries, if they exist.
if [ "${CT_GMP_MPFR}" = "y" ]; then
binutils_opts="--with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
extra_config+=("--with-gmp=${CT_PREFIX_DIR}")
extra_config+=("--with-mpfr=${CT_PREFIX_DIR}")
fi
CT_DoLog EXTRA "Configuring binutils"
@ -40,7 +42,7 @@ do_binutils() {
--disable-nls \
--disable-multilib \
--disable-werror \
${binutils_opts} \
"${extra_config[@]}" \
${CT_ARCH_WITH_FLOAT} \
${CT_BINUTILS_EXTRA_CONFIG} \
${BINUTILS_SYSROOT_ARG}
@ -70,18 +72,27 @@ do_binutils() {
# Now on for the target libraries
do_binutils_target() {
targets=
[ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets="${targets} libiberty"
[ "${CT_BINUTILS_FOR_TARGET_BFD}" = "y" ] && targets="${targets} bfd"
targets="${targets# }"
local -a extra_config
local -a targets
local -a build_targets
local -a install_targets
local t
[ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
[ "${CT_BINUTILS_FOR_TARGET_BFD}" = "y" ] && targets+=("bfd")
for t in "${targets[@]}"; do
build_targets+=("all-${t}")
install_targets+=("install-${t}")
done
binutils_opts=
# If GMP and MPFR were configured, then use that
if [ "${CT_GMP_MPFR_TARGET}" = "y" ]; then
binutils_opts="--with-gmp=${CT_SYSROOT_DIR}/usr --with-mpfr=${CT_SYSROOT_DIR}/usr"
extra_config+=("--with-gmp=${CT_SYSROOT_DIR}/usr")
extra_config+=("--with-mpfr=${CT_SYSROOT_DIR}/usr")
fi
if [ -n "${targets}" ]; then
if [ "${#targets[@]}" -ne 0 ]; then
CT_DoStep INFO "Installing binutils for target"
mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
@ -98,17 +109,14 @@ do_binutils_target() {
--enable-static \
--disable-nls \
--disable-multilib \
${binutils_opts} \
"${extra_config[@]}" \
${CT_ARCH_WITH_FLOAT} \
${CT_BINUTILS_EXTRA_CONFIG}
build_targets=$(echo "${targets}" |sed -r -e 's/(^| +)/\1all-/g;')
install_targets=$(echo "${targets}" |sed -r -e 's/(^| +)/\1install-/g;')
CT_DoLog EXTRA "Building binutils' libraries (${targets}) for target"
CT_DoExecLog ALL make ${PARALLELMFLAGS} ${build_targets}
CT_DoLog EXTRA "Installing binutils' libraries (${targets}) for target"
CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" ${install_targets}
CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
CT_DoExecLog ALL make ${PARALLELMFLAGS} "${build_targets[@]}"
CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
CT_Popd
CT_EndStep

View File

@ -92,8 +92,9 @@ do_cc_core() {
local mode
local build_libgcc
local core_prefix_dir
local extra_config
local lang_opt
local tmp
local -a extra_config
eval $1
eval $2
@ -110,17 +111,21 @@ do_cc_core() {
case "${mode}" in
static)
core_prefix_dir="${CT_CC_CORE_STATIC_PREFIX_DIR}"
extra_config="${extra_config} --with-newlib --enable-threads=no --disable-shared"
extra_config+=("--with-newlib")
extra_config+=("--enable-threads=no")
extra_config+=("--disable-shared")
copy_headers=y
;;
shared)
core_prefix_dir="${CT_CC_CORE_SHARED_PREFIX_DIR}"
extra_config="${extra_config} --enable-shared"
extra_config+=("--enable-shared")
copy_headers=y
;;
baremetal)
core_prefix_dir="${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-newlib --enable-threads=no --disable-shared"
extra_config+=("--with-newlib")
extra_config+=("--enable-threads=no")
extra_config+=("--disable-shared")
[ "${CT_CC_LANG_CXX}" = "y" ] && lang_opt="${lang_opt},c++"
copy_headers=n
;;
@ -134,28 +139,28 @@ do_cc_core() {
CT_DoLog EXTRA "Configuring ${mode} core C compiler"
extra_config="${extra_config} ${CT_ARCH_WITH_ARCH}"
extra_config="${extra_config} ${CT_ARCH_WITH_ABI}"
extra_config="${extra_config} ${CT_ARCH_WITH_CPU}"
extra_config="${extra_config} ${CT_ARCH_WITH_TUNE}"
extra_config="${extra_config} ${CT_ARCH_WITH_FPU}"
extra_config="${extra_config} ${CT_ARCH_WITH_FLOAT}"
for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
eval tmp="\${CT_ARCH_WITH_${tmp}}"
if [ -n "${tmp}" ]; then
extra_config+=("${tmp}")
fi
done
if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
extra_config="${extra_config} --enable-__cxa_atexit"
extra_config+=("--enable-__cxa_atexit")
else
extra_config="${extra_config} --disable-__cxa_atexit"
extra_config+=("--disable-__cxa_atexit")
fi
if [ "${CT_GMP_MPFR}" = "y" ]; then
extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-mpfr=${CT_PREFIX_DIR}"
extra_config+=("--with-gmp=${CT_PREFIX_DIR}")
extra_config+=("--with-mpfr=${CT_PREFIX_DIR}")
fi
if [ "${CT_PPL_CLOOG_MPC}" = "y" ]; then
extra_config="${extra_config} --with-ppl=${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-cloog=${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-mpc=${CT_PREFIX_DIR}"
extra_config+=("--with-ppl=${CT_PREFIX_DIR}")
extra_config+=("--with-cloog=${CT_PREFIX_DIR}")
extra_config+=("--with-mpc=${CT_PREFIX_DIR}")
fi
CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
# Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
CC_FOR_BUILD="${CT_BUILD}-gcc" \
@ -169,7 +174,7 @@ do_cc_core() {
--with-local-prefix="${CT_SYSROOT_DIR}" \
--disable-multilib \
${CC_CORE_SYSROOT_ARG} \
${extra_config} \
"${extra_config[@]}" \
--disable-nls \
--enable-symvers=gnu \
--enable-languages="${lang_opt}" \
@ -249,6 +254,9 @@ do_cc_core() {
#------------------------------------------------------------------------------
# Build final gcc
do_cc() {
local -a extra_config
local tmp
# If building for bare metal, nothing to be done here, the static core conpiler is enough!
[ "${CT_BARE_METAL}" = "y" ] && return 0
@ -273,35 +281,39 @@ do_cc() {
CT_Test "Building ${CT_CC_LANG_OTHERS//,/ } language(s) is not yet supported. Will try..." -n "${CT_CC_LANG_OTHERS}"
lang_opt=$(echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;')
extra_config="--enable-languages=${lang_opt}"
extra_config="${extra_config} --disable-multilib"
extra_config="${extra_config} ${CT_ARCH_WITH_ARCH}"
extra_config="${extra_config} ${CT_ARCH_WITH_ABI}"
extra_config="${extra_config} ${CT_ARCH_WITH_CPU}"
extra_config="${extra_config} ${CT_ARCH_WITH_TUNE}"
extra_config="${extra_config} ${CT_ARCH_WITH_FPU}"
extra_config="${extra_config} ${CT_ARCH_WITH_FLOAT}"
[ "${CT_SHARED_LIBS}" = "y" ] || extra_config="${extra_config} --disable-shared"
[ -n "${CT_CC_PKGVERSION}" ] && extra_config="${extra_config} --with-pkgversion=${CT_CC_PKGVERSION}"
[ -n "${CT_CC_BUGURL}" ] && extra_config="${extra_config} --with-bugurl=${CT_CC_BUGURL}"
[ "${CT_CC_SJLJ_EXCEPTIONS_USE}" = "y" ] && extra_config="${extra_config} --enable-sjlj-exceptions"
[ "${CT_CC_SJLJ_EXCEPTIONS_DONT_USE}" = "y" ] && extra_config="${extra_config} --disable-sjlj-exceptions"
extra_config+=("--enable-languages=${lang_opt}")
extra_config+=("--disable-multilib")
for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
eval tmp="\${CT_ARCH_WITH_${tmp}}"
if [ -n "${tmp}" ]; then
extra_config+=("${tmp}")
fi
done
[ "${CT_SHARED_LIBS}" = "y" ] || extra_config+=("--disable-shared")
[ -n "${CT_CC_PKGVERSION}" ] && extra_config+=("--with-pkgversion=${CT_CC_PKGVERSION}")
[ -n "${CT_CC_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_CC_BUGURL}")
[ "${CT_CC_SJLJ_EXCEPTIONS_USE}" = "y" ] && extra_config+=("--enable-sjlj-exceptions")
[ "${CT_CC_SJLJ_EXCEPTIONS_DONT_USE}" = "y" ] && extra_config+=("--disable-sjlj-exceptions")
if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
extra_config="${extra_config} --enable-__cxa_atexit"
extra_config+=("--enable-__cxa_atexit")
else
extra_config="${extra_config} --disable-__cxa_atexit"
extra_config+=("--disable-__cxa_atexit")
fi
if [ "${CT_GMP_MPFR}" = "y" ]; then
extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-mpfr=${CT_PREFIX_DIR}"
extra_config+=("--with-gmp=${CT_PREFIX_DIR}")
extra_config+=("--with-mpfr=${CT_PREFIX_DIR}")
fi
if [ "${CT_PPL_CLOOG_MPC}" = "y" ]; then
extra_config="${extra_config} --with-ppl=${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-cloog=${CT_PREFIX_DIR}"
extra_config="${extra_config} --with-mpc=${CT_PREFIX_DIR}"
extra_config+=("--with-ppl=${CT_PREFIX_DIR}")
extra_config+=("--with-cloog=${CT_PREFIX_DIR}")
extra_config+=("--with-mpc=${CT_PREFIX_DIR}")
fi
if [ -n "${CC_ENABLE_CXX_FLAGS}" ]; then
extra_config+=("--enable-cxx-flags=${CC_ENABLE_CXX_FLAGS}")
fi
CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
# --enable-symvers=gnu really only needed for sh4 to work around a
# detection problem only matters for gcc-3.2.x and later, I think.
@ -319,7 +331,7 @@ do_cc() {
--target=${CT_TARGET} \
--prefix="${CT_PREFIX_DIR}" \
${CC_SYSROOT_ARG} \
${extra_config} \
"${extra_config[@]}" \
--with-local-prefix="${CT_SYSROOT_DIR}" \
--disable-nls \
--enable-threads=posix \

View File

@ -10,27 +10,28 @@ do_debug_dmalloc_extract() {
}
do_debug_dmalloc_build() {
local -a extra_config
CT_DoStep INFO "Installing dmalloc"
CT_DoLog EXTRA "Configuring dmalloc"
mkdir -p "${CT_BUILD_DIR}/build-dmalloc"
cd "${CT_BUILD_DIR}/build-dmalloc"
extra_config=
case "${CT_CC_LANG_CXX}" in
y) extra_config="${extra_config} --enable-cxx";;
*) extra_config="${extra_config} --disable-cxx";;
y) extra_config+=("--enable-cxx");;
*) extra_config+=("--disable-cxx");;
esac
case "${CT_THREADS_NONE}" in
y) extra_config="${extra_config} --disable-threads";;
*) extra_config="${extra_config} --enable-threads";;
y) extra_config+=("--disable-threads");;
*) extra_config+=("--enable-threads");;
esac
case "${CT_SHARED_LIBS}" in
y) extra_config="${extra_config} --enable-shlib";;
*) extra_config="${extra_config} --disable-shlib";;
y) extra_config+=("--enable-shlib");;
*) extra_config+=("--disable-shlib");;
esac
CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
LD="${CT_TARGET}-ld" \
AR="${CT_TARGET}-ar" \
@ -40,7 +41,7 @@ do_debug_dmalloc_build() {
--prefix=/usr \
--build="${CT_BUILD}" \
--host="${CT_TARGET}" \
${extra_config}
"${extra_config[@]}"
CT_DoLog EXTRA "Building dmalloc"
CT_DoExecLog ALL make

View File

@ -73,29 +73,32 @@ do_debug_gdb_extract() {
}
do_debug_gdb_build() {
local -a extra_config
gdb_src_dir="${CT_SRC_DIR}/gdb$(do_debug_gdb_suffix)"
insight_src_dir="${CT_SRC_DIR}/insight-${CT_GDB_VERSION}"
extra_config=
# Version 6.3 and below behave badly with gdbmi
case "${CT_GDB_VERSION}" in
6.2*|6.3) extra_config="${extra_config} --disable-gdbmi";;
6.2*|6.3) extra_config+=("--disable-gdbmi");;
esac
if [ "${CT_GDB_CROSS}" = "y" ]; then
local -a cross_extra_config
CT_DoStep INFO "Installing cross-gdb"
CT_DoLog EXTRA "Configuring cross-gdb"
mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
cd "${CT_BUILD_DIR}/build-gdb-cross"
cross_extra_config="${extra_config}"
cross_extra_config=("${extra_config[@]}")
if [ "${CT_GMP_MPFR}" = "y" ]; then
cross_extra_config="${cross_extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
cross_extra_config+=("--with-gmp=${CT_PREFIX_DIR}" "--with-mpfr=${CT_PREFIX_DIR}")
fi
case "${CT_THREADS}" in
none) cross_extra_config="${cross_extra_config} --disable-threads";;
*) cross_extra_config="${cross_extra_config} --enable-threads";;
none) cross_extra_config+=("--disable-threads");;
*) cross_extra_config+=("--enable-threads");;
esac
CC_for_gdb=
@ -108,7 +111,7 @@ do_debug_gdb_build() {
gdb_cross_configure="${gdb_src_dir}/configure"
[ "${CT_GDB_CROSS_INSIGHT}" = "y" ] && gdb_cross_configure="${insight_src_dir}/configure"
CT_DoLog DEBUG "Extra config passed: '${cross_extra_config# }'"
CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
CC="${CC_for_gdb}" \
LD="${LD_for_gdb}" \
@ -120,7 +123,7 @@ do_debug_gdb_build() {
--prefix="${CT_PREFIX_DIR}" \
--with-build-sysroot="${CT_SYSROOT_DIR}" \
--disable-werror \
${cross_extra_config}
"${cross_extra_config[@]}"
CT_DoLog EXTRA "Building cross-gdb"
CT_DoExecLog ALL make ${PARALLELMFLAGS}
@ -132,13 +135,15 @@ do_debug_gdb_build() {
fi
if [ "${CT_GDB_NATIVE}" = "y" ]; then
local -a native_extra_config
local -a ncurses_opt
CT_DoStep INFO "Installing native gdb"
CT_DoStep INFO "Installing ncurses library"
ncurses_opts=
[ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts="${ncurses_opts} --without-cxx --without-cxx-binding"
[ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts="${ncurses_opts} --without-ada"
[ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
[ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
CT_DoStep INFO "Installing native ncurses tic"
CT_DoLog EXTRA "Configuring ncurses tic"
@ -158,7 +163,7 @@ do_debug_gdb_build() {
--with-build-cc=${CT_REAL_BUILD}-gcc \
--with-build-cpp=${CT_REAL_BUILD}-gcc \
--with-build-cflags="${CT_CFLAGS_FOR_HOST}" \
${ncurses_opts}
"${ncurses_opts[@]}"
# Under some operating systems (eg. Winblows), there is an
# extension appended to executables. Find that.
@ -190,7 +195,7 @@ do_debug_gdb_build() {
--without-sysmouse \
--without-progs \
--enable-termcap \
${ncurses_opts}
"${ncurses_opts[@]}"
CT_DoLog EXTRA "Building ncurses"
CT_DoExecLog ALL make ${PARALLELMFLAGS}
@ -209,13 +214,13 @@ do_debug_gdb_build() {
mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
cd "${CT_BUILD_DIR}/build-gdb-native"
native_extra_config="${extra_config}"
native_extra_config=("${extra_config[@]}")
case "${CT_THREADS}" in
none) native_extra_config="${native_extra_config} --disable-threads";;
*) native_extra_config="${native_extra_config} --enable-threads";;
none) native_extra_config+=("--disable-threads");;
*) native_extra_config+=("--enable-threads");;
esac
if [ "${CT_GDB_NATIVE_USE_GMP_MPFR}" = "y" ]; then
native_extra_config="${native_extra_config} --with-gmp=${CT_SYSROOT_DIR}/usr --with-mpfr=${CT_SYSROOT_DIR}/usr"
native_extra_config+=("--with-gmp=${CT_SYSROOT_DIR}/usr" "--with-mpfr=${CT_SYSROOT_DIR}/usr")
fi
if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
@ -228,7 +233,7 @@ do_debug_gdb_build() {
export ac_cv_func_strncmp_works=yes
CT_DoLog DEBUG "Extra config passed: '${native_extra_config# }'"
CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
CC="${CC_for_gdb}" \
LD="${LD_for_gdb}" \
@ -247,7 +252,7 @@ do_debug_gdb_build() {
--disable-werror \
--without-included-gettext \
--without-develop \
${native_extra_config}
"${native_extra_config[@]}"
CT_DoLog EXTRA "Building native gdb"
CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC}
@ -264,6 +269,8 @@ do_debug_gdb_build() {
fi
if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
local -a gdbserver_extra_config
CT_DoStep INFO "Installing gdbserver"
CT_DoLog EXTRA "Configuring gdbserver"
@ -280,7 +287,7 @@ do_debug_gdb_build() {
gdbserver_LDFLAGS=-static
fi
gdbserver_extra_config="${extra_config}"
gdbserver_extra_config=("${extra_config[@]}")
LDFLAGS="${gdbserver_LDFLAGS}" \
CT_DoExecLog ALL \
@ -301,7 +308,7 @@ do_debug_gdb_build() {
--without-included-gettext \
--without-develop \
--disable-werror \
${gdbserver_extra_config}
"${gdbserver_extra_config[@]}"
CT_DoLog EXTRA "Building gdbserver"
CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC}

View File

@ -41,19 +41,21 @@ do_libc_get() {
eglibc_ports="${CT_LIBC}-ports-${CT_LIBC_VERSION}.tar.bz2"
# Check if every tarballs are already present
if [ -a "${CT_TARBALLS_DIR}/${eglibc}" ] && \
[ -a "${CT_TARBALLS_DIR}/${eglibc_linuxthreads}" ] && \
[ -a "${CT_TARBALLS_DIR}/${eglibc_localedef}" ] && \
[ -a "${CT_TARBALLS_DIR}/${eglibc_ports}" ]; then
if [ -f "${CT_TARBALLS_DIR}/${eglibc}" \
-a -f "${CT_TARBALLS_DIR}/${eglibc_linuxthreads}" \
-a -f "${CT_TARBALLS_DIR}/${eglibc_localedef}" \
-a -f "${CT_TARBALLS_DIR}/${eglibc_ports}" \
]; then
CT_DoLog DEBUG "Already have 'eglibc-${CT_LIBC_VERSION}'"
return 0
fi
if [ -a "${CT_LOCAL_TARBALLS_DIR}/${eglibc}" ] && \
[ -a "${CT_LOCAL_TARBALLS_DIR}/${eglibc_linuxthreads}" ] && \
[ -a "${CT_LOCAL_TARBALLS_DIR}/${eglibc_localedef}" ] && \
[ -a "${CT_LOCAL_TARBALLS_DIR}/${eglibc_ports}" ] && \
[ "${CT_FORCE_DOWNLOAD}" != "y" ]; then
if [ -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc}" \
-a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_linuxthreads}" \
-a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_localedef}" \
-a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_ports}" \
"${CT_FORCE_DOWNLOAD}" != "y" \
]; then
CT_DoLog DEBUG "Got 'eglibc-${CT_LIBC_VERSION}' from local storage"
for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do
CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${file}" "${CT_TARBALLS_DIR}/${file}"
@ -199,6 +201,8 @@ do_libc_start_files() {
# This function builds and install the full glibc
do_libc() {
local -a extra_config
CT_DoStep INFO "Installing C library"
mkdir -p "${CT_BUILD_DIR}/build-libc"
@ -210,32 +214,32 @@ do_libc() {
# We don't need to be conditional on wether the user did set different
# values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
extra_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
extra_config+=("--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')")
case "${CT_THREADS}" in
nptl) extra_config="${extra_config} --with-__thread --with-tls";;
linuxthreads) extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
none) extra_config="${extra_config} --without-__thread --without-nptl"
nptl) extra_config+=("--with-__thread" "--with-tls");;
linuxthreads) extra_config+=("--with-__thread" "--without-tls" "--without-nptl");;
none) extra_config+=("--without-__thread" "--without-nptl")
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --without-tls";;
*) extra_config+=("--without-tls");;
esac
;;
esac
case "${CT_SHARED_LIBS}" in
y) extra_config="${extra_config} --enable-shared";;
*) extra_config="${extra_config} --disable-shared";;
y) extra_config+=("--enable-shared");;
*) extra_config+=("--disable-shared");;
esac
case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
y,) extra_config="${extra_config} --with-fp";;
,y) extra_config="${extra_config} --without-fp";;
y,) extra_config+=("--with-fp");;
,y) extra_config+=("--without-fp");;
esac
case "$(do_libc_add_ons_list ,)" in
"") ;;
*) extra_config="${extra_config} --enable-add-ons=$(do_libc_add_ons_list ,)";;
*) extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");;
esac
extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
@ -244,7 +248,7 @@ do_libc() {
CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'"
CT_DoLog DEBUG "Extra config args passed: '${extra_config}'"
CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
CT_DoLog DEBUG "Extra CC args passed : '${extra_cc_args}'"
BUILD_CC="${CT_BUILD}-gcc" \
@ -261,7 +265,7 @@ do_libc() {
--disable-profile \
--without-gd \
--without-cvs \
${extra_config} \
"${extra_config[@]}" \
${CT_LIBC_GLIBC_EXTRA_CONFIG}
CT_DoLog EXTRA "Building C library"

View File

@ -6,6 +6,9 @@
do_libc_get() {
local date
local version
local -a addons_list
addons_list=($(do_libc_add_ons_list " "))
if [ "${CT_LIBC_GLIBC_TARBALL}" = "y" ]; then
# Use release tarballs
@ -15,7 +18,7 @@ do_libc_get() {
ftp://gcc.gnu.org/pub/glibc/snapshots
# C library addons
for addon in $(do_libc_add_ons_list " "); do
for addon in "${addons_list[@]}"; do
# NPTL addon is not to be downloaded, in any case
[ "${addon}" = "nptl" ] && continue || true
CT_GetFile "glibc-${addon}-${CT_LIBC_VERSION}" \
@ -35,7 +38,7 @@ do_libc_get() {
"glibc-cvs-${CT_LIBC_VERSION}"
# C library addons
for addon in $(do_libc_add_ons_list " "); do
for addon in "${addons_list[@]}"; do
# NPTL addon is not to be downloaded, in any case
[ "${addon}" = "nptl" ] && continue || true
CT_GetCVS "glibc-${addon}-cvs-${CT_LIBC_VERSION}" \
@ -54,6 +57,9 @@ do_libc_get() {
# Extract glibc
do_libc_extract() {
local cvs
local -a addons_list
addons_list=($(do_libc_add_ons_list " "))
[ "${CT_LIBC_GLIBC_CVS}" = "y" ] && cvs="cvs-"
@ -63,7 +69,7 @@ do_libc_extract() {
CT_Patch "glibc-${CT_LIBC_VERSION}" nochdir
# C library addons
for addon in $(do_libc_add_ons_list " "); do
for addon in "${addons_list[@]}"; do
# NPTL addon is not to be extracted, in any case
[ "${addon}" = "nptl" ] && continue || true
CT_Extract "glibc-${addon}-${cvs}${CT_LIBC_VERSION}" nochdir
@ -82,6 +88,7 @@ do_libc_extract() {
# The configure files may be older than the configure.in files
# if using a snapshot (or even some tarballs). Fake them being
# up to date.
sleep 2
find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL
CT_Popd
@ -97,6 +104,7 @@ do_libc_check_config() {
# This function installs the glibc headers needed to build the core compiler
do_libc_headers() {
local cvs
local -a extra_config
CT_DoStep INFO "Installing C library headers"
@ -123,21 +131,23 @@ do_libc_headers() {
# Override libc_cv_ppc_machine so glibc-cvs doesn't complain
# 'a version of binutils that supports .machine "altivec" is needed'.
addons_list="$(do_libc_add_ons_list ,)"
# We need to remove any threading addon when installing headers
addons_list="${addons_list//nptl/}"
addons_list="${addons_list//linuxthreads/}"
# Remove duplicate, leading and trailing separators
addons_config="--enable-add-ons=$(echo "${addons_list}" |sed -r -e 's/,+/,/; s/^,//; s/,$//g;')"
addons_list="$(do_libc_add_ons_list " " \
|sed -r -e 's/\<(nptl|linuxthreads)\>/ /g;' \
-e 's/ +/,/g; s/^,+//; s/,+$//;' \
)"
extra_config="${addons_config} $(do_libc_min_kernel_config)"
extra_config+=("--enable-add-ons=${addons_list}")
extra_config+=("${addons_config}")
extra_config+=("$(do_libc_min_kernel_config)")
# Pre-seed the configparms file with values from the config option
echo "${CT_LIBC_GLIBC_CONFIGPARMS}" > configparms
cross_cc=$(CT_Which "${CT_TARGET}-gcc")
CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
CT_DoLog DEBUG "Extra config passed : '${extra_config}'"
CT_DoLog DEBUG "Extra config passed : '${extra_config[*]}'"
libc_cv_ppc_machine=yes \
CC=${cross_cc} \
@ -150,7 +160,7 @@ do_libc_headers() {
--without-cvs \
--disable-sanity-checks \
--enable-hacker-mode \
${extra_config} \
"${extra_config[@]}" \
--without-nptl
CT_DoLog EXTRA "Installing C library headers"
@ -246,6 +256,7 @@ do_libc_headers() {
# Build and install start files
do_libc_start_files() {
local cvs
local -a extra_config
# Needed only in the NPTL case. Otherwise, return.
[ "${CT_THREADS}" = "nptl" ] || return 0
@ -260,26 +271,25 @@ do_libc_start_files() {
CT_DoLog EXTRA "Configuring C library"
# Add some default glibc config options if not given by user.
extra_config=
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --with-tls"
*) extra_config+=("--with-tls")
esac
case "${CT_SHARED_LIBS}" in
y) extra_config="${extra_config} --enable-shared";;
*) extra_config="${extra_config} --disable-shared";;
y) extra_config+=("--enable-shared");;
*) extra_config+=("--disable-shared");;
esac
case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
y,) extra_config="${extra_config} --with-fp";;
,y) extra_config="${extra_config} --without-fp";;
y,) extra_config+=("--with-fp");;
,y) extra_config+=("--without-fp");;
esac
# Obviously, we want threads, as we come here only for NPTL
extra_config="${extra_config} --with-__thread"
extra_config+=("--with-__thread")
addons_config="--enable-add-ons=$(do_libc_add_ons_list ,)"
extra_config="${extra_config} ${addons_config}"
extra_config+=("${addons_config}")
extra_config="${extra_config} $(do_libc_min_kernel_config)"
extra_config+=("$(do_libc_min_kernel_config)")
# Add some default CC args
glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([[:digit:]]+).*/\1/')
@ -303,7 +313,7 @@ do_libc_start_files() {
cross_cc=$(CT_Which "${CT_TARGET}-gcc")
CT_DoLog DEBUG "Using gcc for target : '${cross_cc}'"
CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'"
CT_DoLog DEBUG "Extra config args passed: '${extra_config}'"
CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
CT_DoLog DEBUG "Extra CC args passed : '${extra_cc_args}'"
# Pre-seed the configparms file with values from the config option
@ -330,7 +340,7 @@ do_libc_start_files() {
--without-gd \
--with-headers="${CT_HEADERS_DIR}" \
--cache-file=config.cache \
${extra_config} \
"${extra_config[@]}" \
${CT_LIBC_GLIBC_EXTRA_CONFIG}
#TODO: should check whether slibdir has been set in configparms to */lib64
@ -353,6 +363,7 @@ do_libc_start_files() {
# This function builds and install the full glibc
do_libc() {
local cvs
local -a extra_config
CT_DoStep INFO "Installing C library"
@ -367,34 +378,33 @@ do_libc() {
# We don't need to be conditional on wether the user did set different
# values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
extra_config=
case "${CT_THREADS}" in
nptl) extra_config="${extra_config} --with-__thread --with-tls";;
linuxthreads) extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
none) extra_config="${extra_config} --without-__thread --without-nptl"
nptl) extra_config+=("--with-__thread" "--with-tls");;
linuxthreads) extra_config+=("--with-__thread" "--without-tls" "--without-nptl");;
none) extra_config+=("--without-__thread" "--without-nptl")
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --without-tls";;
*) extra_config+=("--without-tls");;
esac
;;
esac
case "${CT_SHARED_LIBS}" in
y) extra_config="${extra_config} --enable-shared";;
*) extra_config="${extra_config} --disable-shared";;
y) extra_config+=("--enable-shared");;
*) extra_config+=("--disable-shared");;
esac
case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
y,) extra_config="${extra_config} --with-fp";;
,y) extra_config="${extra_config} --without-fp";;
y,) extra_config+=("--with-fp";;
,y) extra_config+=("--without-fp";;
esac
case "$(do_libc_add_ons_list ,)" in
"") ;;
*) extra_config="${extra_config} --enable-add-ons=$(do_libc_add_ons_list ,)";;
*) extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");;
esac
extra_config="${extra_config} $(do_libc_min_kernel_config)"
extra_config+=("$(do_libc_min_kernel_config)")
# Add some default CC args
glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([[:digit:]]+).*/\1/')
@ -463,7 +473,7 @@ do_libc() {
--disable-sanity-checks \
--cache-file=config.cache \
--with-headers="${CT_HEADERS_DIR}" \
${extra_config} \
"${extra_config[@]}" \
${CT_LIBC_GLIBC_EXTRA_CONFIG}
if grep -l '^install-lib-all:' "${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/Makerules" > /dev/null; then