Sanitise using glibc cvs exports:

- recently, tarballs for glibc 2.8 and 2.9 have appeared on the GNU ftp site
- always use a dot in version strings (eg. 2.9, not 2_9)

 /trunk/scripts/build/libc/glibc.sh |  135    76    59     0 +++++++++++++++++++++++++-------------------
 /trunk/config/libc/glibc.in        |   71    45    26     0 +++++++++++++++--------
 2 files changed, 121 insertions(+), 85 deletions(-)
This commit is contained in:
Yann E. MORIN" 2009-03-15 20:50:40 +00:00
parent 24003e416f
commit 509b3e52e9
2 changed files with 121 additions and 85 deletions

View File

@ -38,13 +38,11 @@ config LIBC_V_2_7
config LIBC_V_2_8
bool
prompt "2_8"
select LIBC_GLIBC_2_8_or_later
prompt "2.8"
config LIBC_V_2_9
bool
prompt "2_9"
select LIBC_GLIBC_2_8_or_later
prompt "2.9"
# CT_INSERT_VERSION_ABOVE
# Don't remove above line!
@ -72,28 +70,48 @@ config LIBC_VERSION
default "2.6" if LIBC_V_2_6
default "2.6.1" if LIBC_V_2_6_1
default "2.7" if LIBC_V_2_7
default "2_8" if LIBC_V_2_8
default "2_9" if LIBC_V_2_9
default "2.8" if LIBC_V_2_8
default "2.9" if LIBC_V_2_9
# CT_INSERT_VERSION_STRING_ABOVE
# Don't remove above line!
config LIBC_GLIBC_2_8_or_later
choice
bool
default n
prompt "Retrieval method"
default LIBC_GLIBC_TARBALL
if LIBC_GLIBC_2_8_or_later
config LIBC_GLIBC_latest_snapshot
config LIBC_GLIBC_TARBALL
bool
prompt "Use latest nightly snapshot"
default n
prompt "Released tarball"
help
Say 'y' to use the latest nightly snapshot.
Not recommended, as the toolchain will not be reproducible.
Until end of Februrary 2009, there was no tarball for glibc releases
2.8 and later. This was intentional.
Then, all of a sudden, tarballs for those releases have appeared at the
traditional download place (ftp.gnu.org).
Some of the glibc people argue that fixes are committed to the maintenance
branch, and thus it is the best plac e to retrieve the glibc from.
On the other hand, it might be preferable to always generate a toolchain
using a known code-base, so the toolchain can be reproducible.
For version prior to 2.8, tarballs were readily available.
If you want your toolchain to really be reproducible, say 'Y' here.
If you can live with a moving code-base, look at the other choice
entries, below.
if ! LIBC_GLIBC_latest_snapshot
config LIBC_GLIBC_CVS
bool
prompt "CVS checkout"
help
See the help for the entry "Released tarball", above.
If you can live with a moving code-base, say 'Y' here.
If you want your toolchain to really be reproducible, look at the
choice entry "Released tarball from FTP", above.
comment "Using CVS checkout"
if LIBC_GLIBC_CVS
config LIBC_GLIBC_CVS_date
string
@ -102,15 +120,16 @@ config LIBC_GLIBC_CVS_date
help
The date, in ISO-8601 format, at which to check out the repository.
#config LIBC_GLIBC_CVS_CHECKOUT
endif # LIBC_GLIBC_CVS
#config LIBC_GLIBC_SNAPSHOT
# bool
# prompt "checkout instead of export"
# default n
# prompt "Use latest nightly snapshot"
# help
# Use checkout rather than export, so that you can later update
# the sources.
# Not recommended, as the toolchain could be non-reproducible.
# See the help for the entry "Released tarball", above.
#
# If you can live with a moving code-base, say 'Y' here.
# If you want your toolchain to really be reproducible, look at the
# choice entry "Released tarball from FTP", above.
endif # ! LIBC_GLIBC_latest_snapshot
endif # LIBC_GLIBC_2_8_or_later
endchoice

View File

@ -4,36 +4,11 @@
# Download glibc
do_libc_get() {
local date
local date
local version
# Ah! Not all GNU folks seem stupid. All glibc releases are in the same
# directory. Good. Alas, there is no snapshot there. I'll deal with them
# later on... :-/
# Update: sadly, glibc folks do be stupid: they no longer build
# release tarballs as of glibc-2.8, hence forcing us to fetch
# from CVS (CVS! Don't those guys know the world of SCM has
# evolved since the dawn ages of CVS?) Sigh...
if [ "${CT_LIBC_GLIBC_2_8_or_later}" = "y" ]; then
# No release tarball available...
date="${CT_LIBC_GLIBC_CVS_date}"
CT_GetCVS "glibc-${CT_LIBC_VERSION}" \
":pserver:anoncvs@sources.redhat.com:/cvs/glibc" \
"libc" \
"glibc-${CT_LIBC_VERSION}-branch${date:+:}${date}" \
"glibc-${CT_LIBC_VERSION}"
# C library addons
for addon in $(do_libc_add_ons_list " "); do
# NPTL addon is not to be downloaded, in any case
[ "${addon}" = "nptl" ] && continue || true
CT_GetCVS "glibc-${addon}-${CT_LIBC_VERSION}" \
":pserver:anoncvs@sources.redhat.com:/cvs/glibc" \
"${addon}" \
"glibc-${CT_LIBC_VERSION}-branch${date:+:}${date}" \
"glibc-${addon}-${CT_LIBC_VERSION}"
done
else
# Release tarballs are available
if [ "${CT_LIBC_GLIBC_TARBALL}" = "y" ]; then
# Use release tarballs
CT_GetFile "glibc-${CT_LIBC_VERSION}" \
{ftp,http}://ftp.gnu.org/gnu/glibc \
ftp://gcc.gnu.org/pub/glibc/releases \
@ -48,6 +23,29 @@ do_libc_get() {
ftp://gcc.gnu.org/pub/glibc/releases \
ftp://gcc.gnu.org/pub/glibc/snapshots
done
elif [ "${CT_LIBC_GLIBC_CVS}" = "y" ]; then
# Use CVS checkout
version="${CT_LIBC_VERSION//./_}"
date="${CT_LIBC_GLIBC_CVS_date}"
CT_GetCVS "glibc-cvs-${CT_LIBC_VERSION}" \
":pserver:anoncvs@sources.redhat.com:/cvs/glibc" \
"libc" \
"glibc-${version}-branch${date:+:}${date}" \
"glibc-cvs-${CT_LIBC_VERSION}"
# C library addons
for addon in $(do_libc_add_ons_list " "); do
# NPTL addon is not to be downloaded, in any case
[ "${addon}" = "nptl" ] && continue || true
CT_GetCVS "glibc-${addon}-cvs-${CT_LIBC_VERSION}" \
":pserver:anoncvs@sources.redhat.com:/cvs/glibc" \
"${addon}" \
"glibc-${version}-branch${date:+:}${date}" \
"glibc-${addon}-cvs-${CT_LIBC_VERSION}"
done
# elif [ "${CT_LIBC_GLIBC_SNAPSHOT}" = "y" ]; then
# : # Not yet handled...
fi
return 0
@ -55,31 +53,38 @@ do_libc_get() {
# Extract glibc
do_libc_extract() {
CT_Extract "glibc-${CT_LIBC_VERSION}"
CT_Patch "glibc-${CT_LIBC_VERSION}"
local cvs
[ "${CT_LIBC_GLIBC_CVS}" = "y" ] && cvs="cvs-"
CT_Extract "glibc-${cvs}${CT_LIBC_VERSION}"
CT_Pushd "${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}"
CT_Patch "glibc-${CT_LIBC_VERSION}" nochdir
# C library addons
for addon in $(do_libc_add_ons_list " "); do
# NPTL addon is not to be extracted, in any case
[ "${addon}" = "nptl" ] && continue || true
CT_Pushd "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}"
CT_Extract "glibc-${addon}-${CT_LIBC_VERSION}" nochdir
CT_Extract "glibc-${addon}-${cvs}${CT_LIBC_VERSION}" nochdir
# Some addons have the 'long' name, while others have the
# 'short' name, but patches are non-uniformly built with
# either the 'long' or 'short' name, whatever the addons name
# so we have to make symlinks from the existing to the missing
# Fortunately for us, [ -d foo ], when foo is a symlink to a
# directory, returns true!
[ -d "${addon}" ] || ln -s "glibc-${addon}-${CT_LIBC_VERSION}" "${addon}"
[ -d "glibc-${addon}-${CT_LIBC_VERSION}" ] || ln -s "${addon}" "glibc-${addon}-${CT_LIBC_VERSION}"
[ -d "${addon}" ] || CT_DoExecLog ALL ln -s "glibc-${addon}-${cvs}${CT_LIBC_VERSION}" "${addon}"
[ -d "glibc-${addon}-${cvs}${CT_LIBC_VERSION}" ] || CT_DoExecLog ALL ln -s "${addon}" "glibc-${addon}-${cvs}${CT_LIBC_VERSION}"
CT_Patch "glibc-${addon}-${CT_LIBC_VERSION}" nochdir
CT_Popd
done
# 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.
find "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}" -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL
find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL
CT_Popd
return 0
}
@ -91,8 +96,12 @@ do_libc_check_config() {
# This function installs the glibc headers needed to build the core compiler
do_libc_headers() {
local cvs
CT_DoStep INFO "Installing C library headers"
[ "${CT_LIBC_GLIBC_CVS}" = "y" ] && cvs="cvs-"
mkdir -p "${CT_BUILD_DIR}/build-libc-headers"
cd "${CT_BUILD_DIR}/build-libc-headers"
@ -130,23 +139,23 @@ do_libc_headers() {
CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
CT_DoLog DEBUG "Extra config passed : '${extra_config}'"
libc_cv_ppc_machine=yes \
CC=${cross_cc} \
CT_DoExecLog ALL \
"${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/configure" \
--build="${CT_BUILD}" \
--host="${CT_TARGET}" \
--prefix=/usr \
--with-headers="${CT_HEADERS_DIR}" \
--without-cvs \
--disable-sanity-checks \
--enable-hacker-mode \
${extra_config} \
libc_cv_ppc_machine=yes \
CC=${cross_cc} \
CT_DoExecLog ALL \
"${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/configure" \
--build="${CT_BUILD}" \
--host="${CT_TARGET}" \
--prefix=/usr \
--with-headers="${CT_HEADERS_DIR}" \
--without-cvs \
--disable-sanity-checks \
--enable-hacker-mode \
${extra_config} \
--without-nptl
CT_DoLog EXTRA "Installing C library headers"
if grep -q GLIBC_2.3 "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/ChangeLog"; then
if grep -q GLIBC_2.3 "${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/ChangeLog"; then
# glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c,
# which fails without a real cross-compiler.
# Fortunately, we don't need errlist-compat.c, since we just need .h
@ -187,7 +196,7 @@ do_libc_headers() {
# See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
mkdir -p "${CT_HEADERS_DIR}/gnu"
CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h"
CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h" \
CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/include/features.h" \
"${CT_HEADERS_DIR}/features.h"
# Building the bootstrap gcc requires either setting inhibit_libc, or
@ -202,20 +211,20 @@ do_libc_headers() {
[ "${CT_ARCH}" != "arm" ] && CT_DoExecLog ALL cp -v misc/syscall-list.h "${CT_HEADERS_DIR}/bits/syscall.h" || true
# Those headers are to be manually copied so gcc can build properly
pthread_h="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/${CT_THREADS}/sysdeps/pthread/pthread.h"
pthread_h="${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/${CT_THREADS}/sysdeps/pthread/pthread.h"
pthreadtypes_h=
case "${CT_THREADS}" in
nptl)
# NOTE: for some archs, the pathes are different, but they are not
# supported by crosstool-NG right now. See original crosstool when they are.
pthread_h="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/${CT_THREADS}/sysdeps/pthread/pthread.h"
pthreadtypes_h="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/nptl/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/bits/pthreadtypes.h"
pthread_h="${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/${CT_THREADS}/sysdeps/pthread/pthread.h"
pthreadtypes_h="${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/nptl/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/bits/pthreadtypes.h"
if [ ! -f "${pthreadtypes_h}" ]; then
pthreadtypes_h="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/ports/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/nptl/bits/pthreadtypes.h"
pthreadtypes_h="${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/ports/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/nptl/bits/pthreadtypes.h"
fi
;;
linuxthreads)
pthreadtypes_h="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h"
pthreadtypes_h="${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h"
;;
*)
pthread_h=
@ -234,11 +243,15 @@ do_libc_headers() {
# Build and install start files
do_libc_start_files() {
local cvs
# Needed only in the NPTL case. Otherwise, return.
[ "${CT_THREADS}" = "nptl" ] || return 0
CT_DoStep INFO "Installing C library start files"
[ "${CT_LIBC_GLIBC_CVS}" = "y" ] && cvs="cvs-"
mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
cd "${CT_BUILD_DIR}/build-libc-startfiles"
@ -305,7 +318,7 @@ do_libc_start_files() {
AR=${CT_TARGET}-ar \
RANLIB=${CT_TARGET}-ranlib \
CT_DoExecLog ALL \
"${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/configure" \
"${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/configure" \
--prefix=/usr \
--build="${CT_BUILD}" \
--host=${CT_TARGET} \
@ -336,8 +349,12 @@ do_libc_start_files() {
# This function builds and install the full glibc
do_libc() {
local cvs
CT_DoStep INFO "Installing C library"
[ "${CT_LIBC_GLIBC_CVS}" = "y" ] && cvs="cvs-"
mkdir -p "${CT_BUILD_DIR}/build-libc"
cd "${CT_BUILD_DIR}/build-libc"
@ -432,7 +449,7 @@ do_libc() {
AR=${CT_TARGET}-ar \
RANLIB=${CT_TARGET}-ranlib \
CT_DoExecLog ALL \
"${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/configure" \
"${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/configure" \
--prefix=/usr \
--build=${CT_BUILD} \
--host=${CT_TARGET} \
@ -446,7 +463,7 @@ do_libc() {
${extra_config} \
${CT_LIBC_GLIBC_EXTRA_CONFIG}
if grep -l '^install-lib-all:' "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/Makerules" > /dev/null; then
if grep -l '^install-lib-all:' "${CT_SRC_DIR}/glibc-${cvs}${CT_LIBC_VERSION}/Makerules" > /dev/null; then
# nptl-era glibc.
# If the install-lib-all target (which is added by our make-install-lib-all.patch)
# is present, it means we're building glibc-2.3.3 or later, and we can't