scripts/functions: Fix CT_ExtractGit function.
Change CT_ExtractGit so that it clones the repository, instead of just
symlinking it. After cloning, any given ref is checked out, or if no
ref is given, the HEAD of the repository is checked out.
This makes CT_Extract behave similar for git repositories as it does
for tarballs, so that it for example can be used for passing glibc-ports
as a git repository.
Signed-off-by: "Esben Haabendal" <esben.haabendal@prevas.dk>
[yann.morin.1998@anciens.enib.fr: fix incomplete var rename]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
1 # eglibc build functions (initially by Thomas JOURDAN).
3 # Add the definitions common to glibc and eglibc
9 # do_libc_min_kernel_config
10 . "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common"
13 # eglibc is only available through subversion, there are no
14 # snapshots available.
20 if [ "${CT_EGLIBC_HTTP}" = "y" ]; then
21 svn_base="http://www.eglibc.org/svn"
23 svn_base="svn://svn.eglibc.org"
26 case "${CT_LIBC_VERSION}" in
27 trunk) svn_base+="/trunk";;
28 *) svn_base+="/branches/eglibc-${CT_LIBC_VERSION}";;
31 CT_GetSVN "eglibc-${CT_LIBC_VERSION}" \
33 "${CT_EGLIBC_REVISION:-HEAD}"
35 if [ "${CT_LIBC_LOCALES}" = "y" ]; then
36 extra_addons+=("localedef")
39 for addon in $(do_libc_add_ons_list " ") "${extra_addons[@]}"; do
40 # Never ever try to download these add-ons,
41 # they've always been internal
46 if ! CT_GetSVN "eglibc-${addon}-${CT_LIBC_VERSION}" \
47 "${svn_base}/${addon}" \
48 "${CT_EGLIBC_REVISION:-HEAD}"
50 # Some add-ons are bundled with the main sources
51 # so failure to download them is expected
52 CT_DoLog DEBUG "Addon '${addon}' could not be downloaded."
53 CT_DoLog DEBUG "We'll see later if we can find it in the source tree"
58 # Copy user provided eglibc configuration file if provided
59 do_libc_check_config() {
60 if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then
64 CT_DoStep INFO "Checking C library configuration"
66 CT_TestOrAbort "You did not provide an eglibc config file!" \
67 -n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \
68 -f "${CT_EGLIBC_OPTION_GROUPS_FILE}"
70 CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config"
73 if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then
74 CT_DoLog DEBUG "Using fixed-configuration nsswitch facility"
76 if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then
77 nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf"
79 nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}"
81 CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}"
83 CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config"
84 echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \
85 >> "${CT_CONFIG_DIR}/eglibc.config"
87 if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then
88 nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions"
90 nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}"
92 CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}"
94 CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions"
95 echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \
96 >> "${CT_CONFIG_DIR}/eglibc.config"
98 CT_DoLog DEBUG "Using full-blown nsswitch facility"
104 # Extract the files required for the libc locales
105 do_libc_locales_extract() {
106 CT_Extract "eglibc-localedef-${CT_LIBC_VERSION}"
107 CT_Patch "eglibc" "localedef-${CT_LIBC_VERSION}"
110 # Build and install the libc locales
112 local libc_src_dir="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}"
113 local src_dir="${CT_SRC_DIR}/eglibc-localedef-${CT_LIBC_VERSION}"
114 local -a extra_config
115 local -a localedef_opts
117 mkdir -p "${CT_BUILD_DIR}/build-localedef"
118 cd "${CT_BUILD_DIR}/build-localedef"
120 CT_DoLog EXTRA "Configuring C library localedef"
122 if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
123 extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
124 [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
127 CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
129 # ./configure is misled by our tools override wrapper for bash
130 # so just tell it where the real bash is _on_the_target_!
132 # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL
133 # - ${BASH_SHELL} is only used to set BASH
134 # - ${BASH} is only used to set the shebang
135 # in two scripts to run on the target
136 # So we can safely bypass bash detection at compile time.
137 # Should this change in a future eglibc release, we'd better
138 # directly mangle the generated scripts _after_ they get built,
139 # or even after they get installed... eglibc is such a sucker...
140 echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
142 # Configure with --prefix the way we want it on the target...
145 "${src_dir}/configure" \
147 --cache-file="$(pwd)/config.cache" \
148 --with-glibc="${libc_src_dir}" \
151 CT_DoLog EXTRA "Building C library localedef"
152 CT_DoExecLog ALL make ${JOBSFLAGS}
154 # Set the localedef endianness option
155 case "${CT_ARCH_BE},${CT_ARCH_LE}" in
156 y,) localedef_opts+=(--big-endian);;
157 ,y) localedef_opts+=(--little-endian);;
160 # Set the localedef option for the target's uint32_t alignment in bytes.
161 # This is target-specific, but for now, 32-bit alignment should work for all
162 # supported targets, even 64-bit ones.
163 localedef_opts+=(--uint32-align=4)
165 CT_DoLog EXTRA "Installing C library locales"
166 CT_DoExecLog ALL make ${JOBSFLAGS} \
167 "LOCALEDEF_OPTS=${localedef_opts[*]}" \
168 install_root="${CT_SYSROOT_DIR}" \