diff --git a/scripts/build/binutils.sh b/scripts/build/binutils.sh index d1f3522d..17f04fb0 100644 --- a/scripts/build/binutils.sh +++ b/scripts/build/binutils.sh @@ -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 diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh index 66fbae52..1263e76c 100644 --- a/scripts/build/cc/gcc.sh +++ b/scripts/build/cc/gcc.sh @@ -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}" } #------------------------------------------------------------------------------ diff --git a/scripts/build/debug/000-template.sh b/scripts/build/debug/000-template.sh index c5fba916..793d7865 100644 --- a/scripts/build/debug/000-template.sh +++ b/scripts/build/debug/000-template.sh @@ -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}" : } diff --git a/scripts/build/debug/100-dmalloc.sh b/scripts/build/debug/100-dmalloc.sh index 27a70a8a..2766ff80 100644 --- a/scripts/build/debug/100-dmalloc.sh +++ b/scripts/build/debug/100-dmalloc.sh @@ -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() { diff --git a/scripts/build/debug/200-duma.sh b/scripts/build/debug/200-duma.sh index cf52234b..b8ef5a61 100644 --- a/scripts/build/debug/200-duma.sh +++ b/scripts/build/debug/200-duma.sh @@ -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" diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index c2a964e7..24d87dd6 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -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 } diff --git a/scripts/build/debug/400-ltrace.sh b/scripts/build/debug/400-ltrace.sh index 231a61f4..8654e205 100644 --- a/scripts/build/debug/400-ltrace.sh +++ b/scripts/build/debug/400-ltrace.sh @@ -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() { diff --git a/scripts/build/debug/500-strace.sh b/scripts/build/debug/500-strace.sh index 8e3c6826..6b1ff4d2 100644 --- a/scripts/build/debug/500-strace.sh +++ b/scripts/build/debug/500-strace.sh @@ -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() { diff --git a/scripts/build/gmp.sh b/scripts/build/gmp.sh index ab40374b..51134da5 100644 --- a/scripts/build/gmp.sh +++ b/scripts/build/gmp.sh @@ -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() { diff --git a/scripts/build/kernel/linux.sh b/scripts/build/kernel/linux.sh index 27aaa302..c8dbead2 100644 --- a/scripts/build/kernel/linux.sh +++ b/scripts/build/kernel/linux.sh @@ -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 } diff --git a/scripts/build/libc/eglibc.sh b/scripts/build/libc/eglibc.sh index 1d5608ad..478a230e 100644 --- a/scripts/build/libc/eglibc.sh +++ b/scripts/build/libc/eglibc.sh @@ -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 diff --git a/scripts/build/libc/glibc.sh b/scripts/build/libc/glibc.sh index 146a5b2c..b56905ea 100644 --- a/scripts/build/libc/glibc.sh +++ b/scripts/build/libc/glibc.sh @@ -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 diff --git a/scripts/build/libc/uClibc.sh b/scripts/build/libc/uClibc.sh index cf1623e4..e2345ed1 100644 --- a/scripts/build/libc/uClibc.sh +++ b/scripts/build/libc/uClibc.sh @@ -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 diff --git a/scripts/build/mpfr.sh b/scripts/build/mpfr.sh index c39cfa35..032e5d61 100644 --- a/scripts/build/mpfr.sh +++ b/scripts/build/mpfr.sh @@ -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 diff --git a/scripts/build/tools/000-template.sh b/scripts/build/tools/000-template.sh index 23c95755..032f289c 100644 --- a/scripts/build/tools/000-template.sh +++ b/scripts/build/tools/000-template.sh @@ -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}" : } diff --git a/scripts/build/tools/100-libelf.sh b/scripts/build/tools/100-libelf.sh index b82e3cfb..2ee92927 100644 --- a/scripts/build/tools/100-libelf.sh +++ b/scripts/build/tools/100-libelf.sh @@ -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() { diff --git a/scripts/build/tools/200-sstrip.sh b/scripts/build/tools/200-sstrip.sh index 90090751..b29a079f 100644 --- a/scripts/build/tools/200-sstrip.sh +++ b/scripts/build/tools/200-sstrip.sh @@ -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" diff --git a/scripts/functions b/scripts/functions index 203fd4eb..0e105b87 100644 --- a/scripts/functions +++ b/scripts/functions @@ -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 [nochdir] -CT_ExtractAndPatch() { - local file="$1" +# Usage: CT_Extract [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 [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 }