Split CT_ExtractAndPatch in two: CT_Extract and CT_Patch:

- it is unworkable to have CT_ExtactAndPAtch cope with all those silly glibc addons:
  - they can have 'short' (as 'ports') or 'long' (as glibc-ports-2.7) names
  - patches are against eithe the short or long name, but non-uniformly use one or the other
  - it is the reposibility of the component (glibc in this case) to handle corner cases such as those
- update all components to use the new functions

 /trunk/scripts/build/tools/000-template.sh |    3     2     1     0 +-
 /trunk/scripts/build/tools/100-libelf.sh   |    3     2     1     0 +-
 /trunk/scripts/build/tools/200-sstrip.sh   |    3     2     1     0 +-
 /trunk/scripts/build/kernel/linux.sh       |    3     2     1     0 +-
 /trunk/scripts/build/binutils.sh           |    3     2     1     0 +-
 /trunk/scripts/build/cc/gcc.sh             |    3     2     1     0 +-
 /trunk/scripts/build/debug/000-template.sh |    3     2     1     0 +-
 /trunk/scripts/build/debug/100-dmalloc.sh  |    3     2     1     0 +-
 /trunk/scripts/build/debug/400-ltrace.sh   |    3     2     1     0 +-
 /trunk/scripts/build/debug/300-gdb.sh      |    9     6     3     0 +++--
 /trunk/scripts/build/debug/500-strace.sh   |    7     3     4     0 ++--
 /trunk/scripts/build/debug/200-duma.sh     |   19     8    11     0 ++++------
 /trunk/scripts/build/libc/glibc.sh         |   14    12     2     0 ++++++-
 /trunk/scripts/build/libc/uClibc.sh        |   13     9     4     0 +++++--
 /trunk/scripts/build/libc/eglibc.sh        |   14    12     2     0 ++++++-
 /trunk/scripts/build/gmp.sh                |    3     2     1     0 +-
 /trunk/scripts/build/mpfr.sh               |    3     2     1     0 +-
 /trunk/scripts/functions                   |   68    36    32     0 +++++++++++++++++++-----------------
 18 files changed, 108 insertions(+), 69 deletions(-)
This commit is contained in:
Yann E. MORIN" 2009-01-05 23:02:43 +00:00
parent 4bcd72fb16
commit ebf01acb41
18 changed files with 108 additions and 69 deletions

View File

@ -11,7 +11,8 @@ do_binutils_get() {
# Extract binutils
do_binutils_extract() {
CT_ExtractAndPatch "binutils-${CT_BINUTILS_VERSION}"
CT_Extract "binutils-${CT_BINUTILS_VERSION}"
CT_Patch "binutils-${CT_BINUTILS_VERSION}"
}
# Build binutils

View File

@ -16,7 +16,8 @@ do_cc_get() {
# Extract gcc
do_cc_extract() {
CT_ExtractAndPatch "gcc-${CT_CC_VERSION}"
CT_Extract "gcc-${CT_CC_VERSION}"
CT_Patch "gcc-${CT_CC_VERSION}"
}
#------------------------------------------------------------------------------

View File

@ -10,7 +10,8 @@ do_debug_foobar_get() {
# Put your extract code here
do_debug_foobar_extract() {
# For example:
# CT_ExtractAndPatch "foobar-${CT_FOOBAR_VERSION}"
# CT_Extract "foobar-${CT_FOOBAR_VERSION}"
# CT_Patch "foobar-${CT_FOOBAR_VERSION}"
:
}

View File

@ -5,7 +5,8 @@ do_debug_dmalloc_get() {
}
do_debug_dmalloc_extract() {
CT_ExtractAndPatch "dmalloc-${CT_DMALLOC_VERSION}"
CT_Extract "dmalloc-${CT_DMALLOC_VERSION}"
CT_Patch "dmalloc-${CT_DMALLOC_VERSION}"
}
do_debug_dmalloc_build() {

View File

@ -2,26 +2,23 @@
do_debug_duma_get() {
CT_GetFile "duma_${CT_DUMA_VERSION}" http://mesh.dl.sourceforge.net/sourceforge/duma/
# D.U.M.A. doesn't separate its name from its version with a dash,
# but with an underscore. Create a link so that crosstool-NG can
# work correctly:
CT_Pushd "${CT_TARBALLS_DIR}"
duma_ext=$(CT_GetFileExtension "duma_${CT_DUMA_VERSION}")
rm -f "duma-${CT_DUMA_VERSION}${duma_ext}"
ln -sf "duma_${CT_DUMA_VERSION}${duma_ext}" "duma-${CT_DUMA_VERSION}${duma_ext}"
# Downloading from sourceforge leaves garbage, cleanup
rm -f showfiles.php\?group_id\=*
CT_Popd
CT_DoExecLog ALL rm -f "${CT_TARBALLS_DIR}/showfiles.php"*
}
do_debug_duma_extract() {
CT_ExtractAndPatch "duma-${CT_DUMA_VERSION}"
CT_Extract "duma_${CT_DUMA_VERSION}"
CT_Pushd "${CT_SRC_DIR}/duma_${CT_DUMA_VERSION}"
# Even if DUMA uses _ and not -, crosstool-NG uses the dash to split the
# name from the version in order to find the appropriate patches
# YEM: FIXME: make CT_Patch more intelligent, Eg.: CT_Patch duma _ "${CT_DUMA_VERSION}"
CT_Patch "duma-${CT_DUMA_VERSION}" nochdir
CT_Popd
}
do_debug_duma_build() {
CT_DoStep INFO "Installing D.U.M.A."
CT_DoLog EXTRA "Copying sources"
# DUMA separates its name from the version with an underscore, not a dash
cp -a "${CT_SRC_DIR}/duma_${CT_DUMA_VERSION}" "${CT_BUILD_DIR}/build-duma"
CT_Pushd "${CT_BUILD_DIR}/build-duma"

View File

@ -57,15 +57,18 @@ do_debug_gdb_extract() {
do_debug_gdb_parts
if [ "${do_gdb}" = "y" ]; then
CT_ExtractAndPatch "gdb$(do_debug_gdb_suffix)"
CT_Extract "gdb$(do_debug_gdb_suffix)"
CT_Patch "gdb$(do_debug_gdb_suffix)"
fi
if [ "${do_insight}" = "y" ]; then
CT_ExtractAndPatch "insight-${CT_GDB_VERSION}"
CT_Extract "insight-${CT_GDB_VERSION}"
CT_Patch "insight-${CT_GDB_VERSION}"
fi
if [ "${do_ncurses}" = "y" ]; then
CT_ExtractAndPatch "ncurses-${CT_NCURSES_VERSION}"
CT_Extract "ncurses-${CT_NCURSES_VERSION}"
CT_Patch "ncurses-${CT_NCURSES_VERSION}"
fi
}

View File

@ -9,7 +9,8 @@ do_debug_ltrace_get() {
}
do_debug_ltrace_extract() {
CT_ExtractAndPatch "ltrace-${CT_LTRACE_VERSION}"
CT_Extract "ltrace-${CT_LTRACE_VERSION}"
CT_Patch "ltrace-${CT_LTRACE_VERSION}"
}
do_debug_ltrace_build() {

View File

@ -3,13 +3,12 @@
do_debug_strace_get() {
CT_GetFile "strace-${CT_STRACE_VERSION}" http://mesh.dl.sourceforge.net/sourceforge/strace/
# Downloading from sourceforge leaves garbage, cleanup
CT_Pushd "${CT_TARBALLS_DIR}"
rm -f showfiles.php\?group_id\=*
CT_Popd
CT_DoExecLog ALL rm -f "${CT_TARBALLS_DIR}/showfiles.php"*
}
do_debug_strace_extract() {
CT_ExtractAndPatch "strace-${CT_STRACE_VERSION}"
CT_Extract "strace-${CT_STRACE_VERSION}"
CT_Patch "strace-${CT_STRACE_VERSION}"
}
do_debug_strace_build() {

View File

@ -17,7 +17,8 @@ do_gmp_get() {
# Extract GMP
do_gmp_extract() {
CT_ExtractAndPatch "gmp-${CT_GMP_VERSION}"
CT_Extract "gmp-${CT_GMP_VERSION}"
CT_Patch "gmp-${CT_GMP_VERSION}"
}
do_gmp() {

View File

@ -19,7 +19,8 @@ do_kernel_get() {
# Extract kernel
do_kernel_extract() {
if [ "${CT_KERNEL_LINUX_USE_CUSTOM_DIR}" != "y" ]; then
CT_ExtractAndPatch "linux-${CT_KERNEL_VERSION}"
CT_Extract "linux-${CT_KERNEL_VERSION}"
CT_Patch "linux-${CT_KERNEL_VERSION}"
fi
return 0
}

View File

@ -92,14 +92,24 @@ do_libc_get() {
# Extract eglibc
do_libc_extract() {
CT_ExtractAndPatch "eglibc-${CT_LIBC_VERSION}"
CT_Extract "eglibc-${CT_LIBC_VERSION}"
CT_Patch "eglibc-${CT_LIBC_VERSION}"
# 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}/eglibc-${CT_LIBC_VERSION}"
CT_ExtractAndPatch "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" nochdir
CT_Extract "eglibc-${addon}-${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 "eglibc-${addon}-${CT_LIBC_VERSION}" "${addon}"
[ -d "eglibc-${addon}-${CT_LIBC_VERSION}" ] || ln -s "${addon}" "eglibc-${addon}-${CT_LIBC_VERSION}"
CT_Patch "eglibc-${addon}-${CT_LIBC_VERSION}" nochdir
CT_Popd
done

View File

@ -55,14 +55,24 @@ do_libc_get() {
# Extract glibc
do_libc_extract() {
CT_ExtractAndPatch "glibc-${CT_LIBC_VERSION}"
CT_Extract "glibc-${CT_LIBC_VERSION}"
CT_Patch "glibc-${CT_LIBC_VERSION}"
# 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_ExtractAndPatch "glibc-${addon}-${CT_LIBC_VERSION}" nochdir
CT_Extract "glibc-${addon}-${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}"
CT_Patch "glibc-${addon}-${CT_LIBC_VERSION}" nochdir
CT_Popd
done

View File

@ -12,18 +12,23 @@ do_libc_get() {
# later...
CT_GetFile "uClibc-${CT_LIBC_VERSION}" ${libc_src}
# uClibc locales
[ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ] && CT_GetFile "uClibc-locale-030818" ${libc_src} || true
if [ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ]; then
CT_GetFile "uClibc-locale-030818" ${libc_src}
fi
return 0
}
# Extract uClibc
do_libc_extract() {
CT_ExtractAndPatch "uClibc-${CT_LIBC_VERSION}"
CT_Extract "uClibc-${CT_LIBC_VERSION}"
CT_Patch "uClibc-${CT_LIBC_VERSION}"
# uClibc locales
if [ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ]; then
CT_Pushd "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}"
CT_ExtractAndPatch "uClibc-locale-030818" nochdir || true
CT_Pushd "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}/extra/locale"
CT_Extract "uClibc-locale-030818" nochdir
CT_Patch "uClibc-locale-030818" nochdir
CT_Popd
fi

View File

@ -18,7 +18,8 @@ do_mpfr_get() {
# Extract MPFR
do_mpfr_extract() {
CT_ExtractAndPatch "mpfr-${CT_MPFR_VERSION}"
CT_Extract "mpfr-${CT_MPFR_VERSION}"
CT_Patch "mpfr-${CT_MPFR_VERSION}"
# OK, Gentoo have a sanity check that libtool.m4 and ltmain.sh have the
# same version number. Unfortunately, some tarballs of MPFR are not

View File

@ -10,7 +10,8 @@ do_tools_foobar_get() {
# Put your extract code here
do_tools_foobar_extract() {
# For example:
# CT_ExtractAndPatch "foobar-${CT_FOOBAR_VERSION}"
# CT_Extract "foobar-${CT_FOOBAR_VERSION}"
# CT_Patch "foobar-${CT_FOOBAR_VERSION}"
:
}

View File

@ -8,7 +8,8 @@ do_tools_libelf_get() {
}
do_tools_libelf_extract() {
CT_ExtractAndPatch "libelf-${CT_LIBELF_VERSION}"
CT_Extract "libelf-${CT_LIBELF_VERSION}"
CT_Patch "libelf-${CT_LIBELF_VERSION}"
}
do_tools_libelf_build() {

View File

@ -7,7 +7,8 @@ case "${CT_SSTRIP_FROM}" in
http://www.muppetlabs.com/~breadbox/pub/software
}
do_tools_sstrip_extract() {
CT_ExtractAndPatch "ELFkickers-${CT_SSTRIP_ELFKICKERS_VERSION}"
CT_Extract "ELFkickers-${CT_SSTRIP_ELFKICKERS_VERSION}"
CT_Patch "ELFkickers-${CT_SSTRIP_ELFKICKERS_VERSION}"
}
do_tools_sstrip_build() {
CT_DoStep INFO "Installing sstrip"

View File

@ -554,58 +554,60 @@ CT_GetCVS() {
CT_DoExecLog ALL rm -rf "${tmp_dir}"
}
# Extract a tarball and patch the resulting sources if necessary.
# Extract a tarball
# Some tarballs need to be extracted in specific places. Eg.: glibc addons
# must be extracted in the glibc directory; uCLibc locales must be extracted
# in the extra/locale sub-directory of uClibc. This is taken into account
# by the caller, that did a 'cd' into the correct path before calling us
# and sets nochdir to 'nochdir'.
# Usage: CT_ExtractAndPatch <basename> [nochdir]
CT_ExtractAndPatch() {
local file="$1"
# Usage: CT_Extract <basename> [nochdir]
CT_Extract() {
local basename="$1"
local nochdir="$2"
local base_file=$(echo "${file}" |cut -d - -f 1)
local ver_file=$(echo "${file}" |cut -d - -f 2-)
local official_patch_dir
local custom_patch_dir
local ext=$(CT_GetFileExtension "${file}")
CT_TestAndAbort "'${file}' not found in '${CT_TARBALLS_DIR}'" -z "${ext}"
local full_file="${CT_TARBALLS_DIR}/${file}${ext}"
[ "${nochdir}" = "nochdir" ] || CT_Pushd "${CT_SRC_DIR}"
local ext=$(CT_GetFileExtension "${basename}")
CT_TestAndAbort "'${basename}' not found in '${CT_TARBALLS_DIR}'" -z "${ext}"
local full_file="${CT_TARBALLS_DIR}/${basename}${ext}"
# Check if already extracted
if [ -e "${CT_SRC_DIR}/.${file}.extracted" ]; then
CT_DoLog DEBUG "Already extracted '${file}'"
if [ -e "${CT_SRC_DIR}/.${basename}.extracted" ]; then
CT_DoLog DEBUG "Already extracted '${basename}'"
return 0
fi
CT_DoLog EXTRA "Extracting and patching '${file}'"
[ "${nochdir}" = "nochdir" ] || CT_Pushd "${CT_SRC_DIR}"
CT_DoLog EXTRA "Extracting '${basename}'"
case "${ext}" in
.tar.bz2) CT_DoExecLog ALL tar xvjf "${full_file}";;
.tar.gz|.tgz) CT_DoExecLog ALL tar xvzf "${full_file}";;
.tar) CT_DoExecLog ALL tar xvf "${full_file}";;
*) CT_Abort "Don't know how to handle '${file}': unknown extension" ;;
*) CT_Abort "Don't know how to handle '${basename}${ext}': unknown extension" ;;
esac
touch "${CT_SRC_DIR}/.${file}.extracted"
# Snapshots might not have the version number in the extracted directory
# name. This is also the case for some (odd) packages, such as D.U.M.A.
# Overcome this issue by symlink'ing the directory.
if [ ! -d "${file}" ]; then
case "${ext}" in
.tar.bz2) base=$(tar tjf "${full_file}" |head -n 1 |cut -d / -f 1 || true);;
.tar.gz|.tgz) base=$(tar tzf "${full_file}" |head -n 1 |cut -d / -f 1 || true);;
.tar) base=$(tar tf "${full_file}" |head -n 1 |cut -d / -f 1 || true);;
esac
CT_TestOrAbort "There was a problem when extracting '${file}'" -d "${base}" -o "${base}" != "${file}"
ln -s "${base}" "${file}"
touch "${CT_SRC_DIR}/.${basename}.extracted"
[ "${nochdir}" = "nochdir" ] || CT_Popd
}
# Patches the specified component
# Usage: CT_Patch <basename> [nochdir]
CT_Patch() {
local basename="$1"
local nochdir="$2"
local base_file="${basename%%-*}"
local ver_file="${basename#*-}"
local official_patch_dir
local custom_patch_dir
# Check if already patched
if [ -e "${CT_SRC_DIR}/.${basename}.patched" ]; then
CT_DoLog DEBUG "Already patched '${basename}'"
return 0
fi
# Kludge: outside this function, we wouldn't know if we had just extracted
# a libc addon, or a plain package. Apply patches now.
[ "${nochdir}" = "nochdir" ] || CT_Pushd "${CT_SRC_DIR}/${basename}"
[ "${nochdir}" = "nochdir" ] || cd "${file}"
CT_DoLog EXTRA "Patching '${basename}'"
official_patch_dir=
custom_patch_dir=
@ -633,6 +635,8 @@ CT_ExtractAndPatch() {
done
fi
touch "${CT_SRC_DIR}/.${basename}.patched"
[ "${nochdir}" = "nochdir" ] || CT_Popd
}