Correctly handle the minimum supported kernel version in glibc.
Should be propagated to eglibc as well...
/trunk/scripts/build/libc/glibc.sh | 78 39 39 0 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 39 insertions(+), 39 deletions(-)
1.1 --- a/scripts/build/libc/glibc.sh Mon Oct 20 09:50:45 2008 +0000
1.2 +++ b/scripts/build/libc/glibc.sh Mon Oct 20 17:46:43 2008 +0000
1.3 @@ -88,23 +88,14 @@
1.4 # Override libc_cv_ppc_machine so glibc-cvs doesn't complain
1.5 # 'a version of binutils that supports .machine "altivec" is needed'.
1.6
1.7 - addons_config="--enable-add-ons=$(do_libc_add_ons_list ,)"
1.8 + addons_list="$(do_libc_add_ons_list ,)"
1.9 # We need to remove any threading addon when installing headers
1.10 - addons_config="${addons_config//nptl/}"
1.11 - addons_config="${addons_config//linuxthreads/}"
1.12 - addons_config=$(echo "${addons_config}" |sed -r -e 's/^,+//; s/,+$//; s/,+/,/g;')
1.13 + addons_list="${addons_list//nptl/}"
1.14 + addons_list="${addons_list//linuxthreads/}"
1.15 + # Remove duplicate, leading and trailing separators
1.16 + addons_config="--enable-add-ons=$(echo "${addons_list}" |sed -r -e 's/,+/,/; s/^,//; s/,$//g;')"
1.17
1.18 - extra_config="${addons_config}"
1.19 - min_kernel_config=
1.20 - case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
1.21 - *enable-kernel*) ;;
1.22 - *) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
1.23 - -o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y" ]; then
1.24 - min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
1.25 - fi
1.26 - ;;
1.27 - esac
1.28 - extra_config="${extra_config} ${min_kernel_config}"
1.29 + extra_config="${addons_config} $(do_libc_min_kernel_config)"
1.30
1.31 cross_cc=$(CT_Which "${CT_TARGET}-gcc")
1.32 CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
1.33 @@ -226,16 +217,6 @@
1.34
1.35 # Add some default glibc config options if not given by user.
1.36 extra_config=
1.37 - min_kernel_config=
1.38 - case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
1.39 - *enable-kernel*) ;;
1.40 - *) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
1.41 - -o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y" ]; then
1.42 - min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
1.43 - fi
1.44 - ;;
1.45 - esac
1.46 - extra_config="${extra_config} ${min_kernel_config}"
1.47 case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
1.48 *-tls*) ;;
1.49 *) extra_config="${extra_config} --with-tls"
1.50 @@ -254,6 +235,8 @@
1.51 addons_config="--enable-add-ons=$(do_libc_add_ons_list ,)"
1.52 extra_config="${extra_config} ${addons_config}"
1.53
1.54 + extra_config="${extra_config} $(do_libc_min_kernel_config)"
1.55 +
1.56 # Add some default CC args
1.57 glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
1.58 glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
1.59 @@ -338,17 +321,6 @@
1.60 # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
1.61
1.62 extra_config=
1.63 - min_kernel_config=""
1.64 - case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
1.65 - *enable-kernel*) ;;
1.66 - *) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
1.67 - -o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y" ]; then
1.68 - min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
1.69 - fi
1.70 - ;;
1.71 - esac
1.72 - extra_config="${extra_config} ${min_kernel_config}"
1.73 -
1.74 case "${CT_THREADS}" in
1.75 nptl) extra_config="${extra_config} --with-__thread --with-tls";;
1.76 linuxthreads) extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
1.77 @@ -375,6 +347,8 @@
1.78 *) extra_config="${extra_config} --enable-add-ons=$(do_libc_add_ons_list ,)";;
1.79 esac
1.80
1.81 + extra_config="${extra_config} $(do_libc_min_kernel_config)"
1.82 +
1.83 # Add some default CC args
1.84 glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
1.85 glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
1.86 @@ -542,13 +516,39 @@
1.87 # Build up the addons list, separated with $1
1.88 do_libc_add_ons_list() {
1.89 local sep="$1"
1.90 - local addons_list=$(echo "${CT_LIBC_ADDONS_LIST//,/${sep}}" |tr -s ,)
1.91 + local addons_list=$(echo "${CT_LIBC_ADDONS_LIST}" |sed -r -e "s/[ ,]/${sep}/g;")
1.92 case "${CT_THREADS}" in
1.93 none) ;;
1.94 *) addons_list="${addons_list}${sep}${CT_THREADS}";;
1.95 esac
1.96 [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
1.97 - addons_list="${addons_list%%${sep}}"
1.98 - echo "${addons_list##${sep}}"
1.99 + # Remove duplicate, leading and trailing separators
1.100 + echo "${addons_list}" |sed -r -e "s/${sep}+/${sep}/g; s/^${sep}//; s/${sep}\$//;"
1.101 }
1.102
1.103 +# Builds up the minimum supported Linux kernel version
1.104 +do_libc_min_kernel_config() {
1.105 + local min_kernel_config=
1.106 + case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
1.107 + *enable-kernel*) ;;
1.108 + *) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" ]; then
1.109 + # We can't rely on the kernel version from the configuration,
1.110 + # because it might not be available if the user uses pre-installed
1.111 + # headers. On the other hand, both method will have the kernel
1.112 + # version installed in "usr/include/linux/version.h" in the sys-root.
1.113 + # Parse that instead of having two code-paths.
1.114 + version_code_file="${CT_SYSROOT_DIR}/usr/include/linux/version.h"
1.115 + CT_TestOrAbort "Linux version is unavailable in installed headers files" -f "${version_code_file}" -a -r "${version_code_file}"
1.116 + version_code=$(grep -E LINUX_VERSION_CODE "${version_code_file}" |cut -d ' ' -f 3)
1.117 + version=$(((version_code>>16)&0xFF))
1.118 + patchlevel=$(((version_code>>8)&0xFF))
1.119 + sublevel=$((version_code&0xFF))
1.120 + min_kernel_config="--enable-kernel=${version}.${patchlevel}.${sublevel}"
1.121 + elif [ "${CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN}" = "y" ]; then
1.122 + # Trim the fourth part of the linux version, keeping only the first three numbers
1.123 + min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
1.124 + fi
1.125 + ;;
1.126 + esac
1.127 + echo "${min_kernel_config}"
1.128 +}