mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2024-12-19 21:07:54 +00:00
05429e01f2
For the versions of eglibc where the ports addon is not external (ie, all versions after, and including 2.17), we would fail to download the localedef addon, since the test did not care about the addon we were about to download, only whether the ports addon was external or not. Fix that by skipping the ports addon only if that's the addon we're trying to download. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
176 lines
6.5 KiB
Bash
176 lines
6.5 KiB
Bash
# eglibc build functions (initially by Thomas JOURDAN).
|
|
|
|
# Add the definitions common to glibc and eglibc
|
|
# do_libc_extract
|
|
# do_libc_start_files
|
|
# do_libc
|
|
# do_libc_add_ons_list
|
|
# do_libc_min_kernel_config
|
|
. "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common"
|
|
|
|
# Download glibc
|
|
# eglibc is only available through subversion, there are no
|
|
# snapshots available.
|
|
do_libc_get() {
|
|
local addon
|
|
local -a extra_addons
|
|
local svn_base
|
|
|
|
if [ "${CT_EGLIBC_HTTP}" = "y" ]; then
|
|
svn_base="http://www.eglibc.org/svn"
|
|
else
|
|
svn_base="svn://svn.eglibc.org"
|
|
fi
|
|
|
|
case "${CT_LIBC_VERSION}" in
|
|
trunk) svn_base+="/trunk";;
|
|
*) svn_base+="/branches/eglibc-${CT_LIBC_VERSION}";;
|
|
esac
|
|
|
|
CT_GetSVN "eglibc-${CT_LIBC_VERSION}" \
|
|
"${svn_base}/libc" \
|
|
"${CT_EGLIBC_REVISION:-HEAD}"
|
|
|
|
if [ "${CT_LIBC_LOCALES}" = "y" ]; then
|
|
extra_addons+=("localedef")
|
|
fi
|
|
|
|
for addon in $(do_libc_add_ons_list " ") "${extra_addons[@]}"; do
|
|
# Never ever try to download these add-ons,
|
|
# they've always been internal
|
|
case "${addon}" in
|
|
nptl) continue;;
|
|
esac
|
|
|
|
case "${addon}:${CT_LIBC_GLIBC_PORTS_EXTERNAL}" in
|
|
ports:y) ;;
|
|
ports:*) continue;;
|
|
esac
|
|
|
|
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
|
|
}
|
|
|
|
# Copy user provided eglibc configuration file if provided
|
|
do_libc_check_config() {
|
|
if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then
|
|
return 0
|
|
fi
|
|
|
|
CT_DoStep INFO "Checking C library configuration"
|
|
|
|
CT_TestOrAbort "You did not provide an eglibc config file!" \
|
|
-n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \
|
|
-f "${CT_EGLIBC_OPTION_GROUPS_FILE}"
|
|
|
|
CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config"
|
|
|
|
# NSS configuration
|
|
if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then
|
|
CT_DoLog DEBUG "Using fixed-configuration nsswitch facility"
|
|
|
|
if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then
|
|
nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf"
|
|
else
|
|
nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}"
|
|
fi
|
|
CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}"
|
|
|
|
CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config"
|
|
echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \
|
|
>> "${CT_CONFIG_DIR}/eglibc.config"
|
|
|
|
if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then
|
|
nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions"
|
|
else
|
|
nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}"
|
|
fi
|
|
CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}"
|
|
|
|
CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions"
|
|
echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \
|
|
>> "${CT_CONFIG_DIR}/eglibc.config"
|
|
else
|
|
CT_DoLog DEBUG "Using full-blown nsswitch facility"
|
|
fi
|
|
|
|
CT_EndStep
|
|
}
|
|
|
|
# Extract the files required for the libc locales
|
|
do_libc_locales_extract() {
|
|
CT_Extract "eglibc-localedef-${CT_LIBC_VERSION}"
|
|
CT_Patch "eglibc" "localedef-${CT_LIBC_VERSION}"
|
|
}
|
|
|
|
# Build and install the libc locales
|
|
do_libc_locales() {
|
|
local libc_src_dir="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}"
|
|
local src_dir="${CT_SRC_DIR}/eglibc-localedef-${CT_LIBC_VERSION}"
|
|
local -a extra_config
|
|
local -a localedef_opts
|
|
|
|
mkdir -p "${CT_BUILD_DIR}/build-localedef"
|
|
cd "${CT_BUILD_DIR}/build-localedef"
|
|
|
|
CT_DoLog EXTRA "Configuring C library localedef"
|
|
|
|
if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
|
|
extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
|
|
[ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
|
|
fi
|
|
|
|
CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
|
|
|
|
# ./configure is misled by our tools override wrapper for bash
|
|
# so just tell it where the real bash is _on_the_target_!
|
|
# Notes:
|
|
# - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL
|
|
# - ${BASH_SHELL} is only used to set BASH
|
|
# - ${BASH} is only used to set the shebang
|
|
# in two scripts to run on the target
|
|
# So we can safely bypass bash detection at compile time.
|
|
# Should this change in a future eglibc release, we'd better
|
|
# directly mangle the generated scripts _after_ they get built,
|
|
# or even after they get installed...
|
|
echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
|
|
|
|
# Configure with --prefix the way we want it on the target...
|
|
|
|
CT_DoExecLog CFG \
|
|
CPPFLAGS="-DNOT_IN_libc" \
|
|
"${src_dir}/configure" \
|
|
--prefix=/usr \
|
|
--cache-file="$(pwd)/config.cache" \
|
|
--with-glibc="${libc_src_dir}" \
|
|
"${extra_config[@]}"
|
|
|
|
CT_DoLog EXTRA "Building C library localedef"
|
|
CT_DoExecLog ALL make ${JOBSFLAGS}
|
|
|
|
# Set the localedef endianness option
|
|
case "${CT_ARCH_ENDIAN}" in
|
|
big) localedef_opts+=(--big-endian);;
|
|
little) localedef_opts+=(--little-endian);;
|
|
esac
|
|
|
|
# Set the localedef option for the target's uint32_t alignment in bytes.
|
|
# This is target-specific, but for now, 32-bit alignment should work for all
|
|
# supported targets, even 64-bit ones.
|
|
localedef_opts+=(--uint32-align=4)
|
|
|
|
CT_DoLog EXTRA "Installing C library locales"
|
|
CT_DoExecLog ALL make ${JOBSFLAGS} \
|
|
"LOCALEDEF_OPTS=${localedef_opts[*]}" \
|
|
install_root="${CT_SYSROOT_DIR}" \
|
|
install-locales
|
|
}
|