From 93b0db91b486d9a290487f9c60ef10f9c5a5d731 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Mon, 30 May 2011 23:05:28 +0200 Subject: glibc: properly handle internal addons Some addons are bundled with glibc/eglibc, so we should not try to download and extract them. This is done as thus: - at download time: - if the add-on download fails, keep going; - at extract time: - if the addon is present in the source tree, ignore it; - if the addon is missing in the source tree: - if the archive is present, extract it; - if the archive is missing, bail out. Signed-off-by: "Yann E. MORIN" diff --git a/scripts/build/libc/eglibc.sh b/scripts/build/libc/eglibc.sh index a551bc6..101a2a3 100644 --- a/scripts/build/libc/eglibc.sh +++ b/scripts/build/libc/eglibc.sh @@ -26,9 +26,17 @@ do_libc_get() { "${CT_EGLIBC_REVISION:-HEAD}" for addon in $(do_libc_add_ons_list " "); do - CT_GetSVN "eglibc-${addon}-${CT_LIBC_VERSION}" \ - "${svn_base}/${addon}" \ - "${CT_EGLIBC_REVISION:-HEAD}" + # NPTL addon is not to be downloaded, in any case + [ "${addon}" = "nptl" ] && continue || true + if ! CT_GetSVN "eglibc-${addon}-${CT_LIBC_VERSION}" \ + "${svn_base}/${addon}" \ + "${CT_EGLIBC_REVISION:-HEAD}" + then + # Some add-ons are bundled with the main sources + # so failure to download them is expected + CT_DoLog DEBUG "Addon '${addon}' could not be downloaded." + CT_DoLog DEBUG "We'll see later if we can find it in the source tree" + fi done } diff --git a/scripts/build/libc/glibc-eglibc.sh-common b/scripts/build/libc/glibc-eglibc.sh-common index a321b7a..ae7c379 100644 --- a/scripts/build/libc/glibc-eglibc.sh-common +++ b/scripts/build/libc/glibc-eglibc.sh-common @@ -11,8 +11,13 @@ do_libc_extract() { # Extract the add-opns for addon in $(do_libc_add_ons_list " "); do - # NPTL addon is not to be extracted, in any case - [ "${addon}" = "nptl" ] && continue || true + # If the addon was bundled with the main archive, we do not + # need to extract it. Worse, if we were to try to extract + # it, we'd get an error. + if [ -d "${addon}" ]; then + CT_DoLog DEBUG "Add-on already present, spkipping extraction" + continue + fi CT_Extract nochdir "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" diff --git a/scripts/build/libc/glibc.sh b/scripts/build/libc/glibc.sh index 4473138..c50aa89 100644 --- a/scripts/build/libc/glibc.sh +++ b/scripts/build/libc/glibc.sh @@ -27,12 +27,19 @@ do_libc_get() { # C library addons 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}" \ - {ftp,http}://ftp.gnu.org/gnu/glibc \ - ftp://gcc.gnu.org/pub/glibc/releases \ - ftp://gcc.gnu.org/pub/glibc/snapshots + if ! CT_GetFile "glibc-${addon}-${CT_LIBC_VERSION}" \ + {ftp,http}://ftp.gnu.org/gnu/glibc \ + ftp://gcc.gnu.org/pub/glibc/releases \ + ftp://gcc.gnu.org/pub/glibc/snapshots + then + # Some add-ons are bundled with glibc, others are + # bundled in their own tarball. Eg. NPTL is internal, + # while LinuxThreads was external. Also, for old + # versions of glibc, the libidn add-on was external, + # but with version >=2.10, it is internal. + CT_DoLog DEBUG "Addon '${addon}' could not be downloaded." + CT_DoLog DEBUG "We'll see later if we can find it in the source tree" + fi done return 0 -- cgit v0.10.2-6-g49f6