author | "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com> |
Tue May 31 20:39:42 2011 +0200 (2011-05-31) | |
changeset 2488 | 58a28561f1bc |
parent 2482 | af25723a794f |
child 2495 | 98b02f85db29 |
permissions | -rw-r--r-- |
yann@850 | 1 |
# eglibc build functions (initially by Thomas JOURDAN). |
yann@850 | 2 |
|
yann@2270 | 3 |
# Add the definitions common to glibc and eglibc |
yann@2483 | 4 |
# do_libc_extract |
yann@2270 | 5 |
# do_libc_start_files |
yann@2270 | 6 |
# do_libc |
yann@2270 | 7 |
# do_libc_finish |
yann@2270 | 8 |
# do_libc_add_ons_list |
yann@2483 | 9 |
# do_libc_min_kernel_config |
yann@2270 | 10 |
. "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common" |
yann@2270 | 11 |
|
yann@850 | 12 |
# Download eglibc repository |
yann@850 | 13 |
do_eglibc_get() { |
yann@850 | 14 |
CT_HasOrAbort svn |
yann@850 | 15 |
|
yann@850 | 16 |
case "${CT_LIBC_VERSION}" in |
yann@850 | 17 |
trunk) svn_url="svn://svn.eglibc.org/trunk";; |
yann@850 | 18 |
*) svn_url="svn://svn.eglibc.org/branches/eglibc-${CT_LIBC_VERSION}";; |
yann@850 | 19 |
esac |
yann@850 | 20 |
|
yann@850 | 21 |
case "${CT_EGLIBC_CHECKOUT}" in |
yann@850 | 22 |
y) svn_action="checkout";; |
yann@850 | 23 |
*) svn_action="export --force";; |
yann@850 | 24 |
esac |
yann@850 | 25 |
|
bob@2178 | 26 |
CT_DoExecLog ALL svn ${svn_action} -r "${CT_EGLIBC_REVISION:-HEAD}" "${svn_url}" "$(pwd)" |
yann@850 | 27 |
|
yann@850 | 28 |
# Compress eglibc |
yann@1123 | 29 |
CT_DoExecLog ALL mv libc "eglibc-${CT_LIBC_VERSION}" |
yann@1123 | 30 |
CT_DoExecLog ALL tar cjf "eglibc-${CT_LIBC_VERSION}.tar.bz2" "eglibc-${CT_LIBC_VERSION}" |
yann@850 | 31 |
|
yann@850 | 32 |
# Compress linuxthreads, localedef and ports |
yann@850 | 33 |
# Assign them the name the way ct-ng like it |
yann@850 | 34 |
for addon in linuxthreads localedef ports; do |
yann@1123 | 35 |
CT_DoExecLog ALL mv "${addon}" "eglibc-${addon}-${CT_LIBC_VERSION}" |
yann@1123 | 36 |
CT_DoExecLog ALL tar cjf "eglibc-${addon}-${CT_LIBC_VERSION}.tar.bz2" "eglibc-${addon}-${CT_LIBC_VERSION}" |
yann@850 | 37 |
done |
yann@850 | 38 |
} |
yann@850 | 39 |
|
yann@850 | 40 |
# Download glibc |
yann@850 | 41 |
do_libc_get() { |
yann@850 | 42 |
# eglibc is only available through subversion, there are no |
yann@850 | 43 |
# snapshots available. Moreover, addons will be downloaded |
yann@850 | 44 |
# simultaneously. |
yann@850 | 45 |
|
yann@850 | 46 |
# build filename |
yann@1123 | 47 |
eglibc="eglibc-${CT_LIBC_VERSION}.tar.bz2" |
yann@850 | 48 |
eglibc_linuxthreads="${CT_LIBC}-linuxthreads-${CT_LIBC_VERSION}.tar.bz2" |
yann@850 | 49 |
eglibc_localedef="${CT_LIBC}-localedef-${CT_LIBC_VERSION}.tar.bz2" |
yann@850 | 50 |
eglibc_ports="${CT_LIBC}-ports-${CT_LIBC_VERSION}.tar.bz2" |
yann@850 | 51 |
|
yann@850 | 52 |
# Check if every tarballs are already present |
yann@1476 | 53 |
if [ -f "${CT_TARBALLS_DIR}/${eglibc}" \ |
yann@1476 | 54 |
-a -f "${CT_TARBALLS_DIR}/${eglibc_linuxthreads}" \ |
yann@1476 | 55 |
-a -f "${CT_TARBALLS_DIR}/${eglibc_localedef}" \ |
yann@1476 | 56 |
-a -f "${CT_TARBALLS_DIR}/${eglibc_ports}" \ |
yann@1476 | 57 |
]; then |
yann@850 | 58 |
CT_DoLog DEBUG "Already have 'eglibc-${CT_LIBC_VERSION}'" |
yann@850 | 59 |
return 0 |
yann@850 | 60 |
fi |
yann@850 | 61 |
|
yann@1476 | 62 |
if [ -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc}" \ |
yann@1476 | 63 |
-a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_linuxthreads}" \ |
yann@1476 | 64 |
-a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_localedef}" \ |
yann@1476 | 65 |
-a -f "${CT_LOCAL_TARBALLS_DIR}/${eglibc_ports}" \ |
yann@1528 | 66 |
-a "${CT_FORCE_DOWNLOAD}" != "y" \ |
yann@1476 | 67 |
]; then |
yann@850 | 68 |
CT_DoLog DEBUG "Got 'eglibc-${CT_LIBC_VERSION}' from local storage" |
yann@850 | 69 |
for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do |
yann@850 | 70 |
CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${file}" "${CT_TARBALLS_DIR}/${file}" |
yann@850 | 71 |
done |
yann@850 | 72 |
return 0 |
yann@850 | 73 |
fi |
yann@850 | 74 |
|
yann@850 | 75 |
# Not found locally, try from the network |
yann@850 | 76 |
CT_DoLog EXTRA "Retrieving 'eglibc-${CT_LIBC_VERSION}'" |
yann@867 | 77 |
|
yann@867 | 78 |
CT_MktempDir tmp_dir |
yann@867 | 79 |
CT_Pushd "${tmp_dir}" |
yann@867 | 80 |
|
yann@850 | 81 |
do_eglibc_get |
yann@867 | 82 |
CT_DoLog DEBUG "Moving 'eglibc-${CT_LIBC_VERSION}' to tarball directory" |
yann@867 | 83 |
for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do |
yann@867 | 84 |
CT_DoExecLog ALL mv -f "${file}" "${CT_TARBALLS_DIR}" |
yann@867 | 85 |
done |
yann@867 | 86 |
|
yann@867 | 87 |
CT_Popd |
yann@867 | 88 |
|
yann@867 | 89 |
# Remove source files |
yann@867 | 90 |
CT_DoExecLog ALL rm -rf "${tmp_dir}" |
yann@850 | 91 |
|
yann@850 | 92 |
if [ "${CT_SAVE_TARBALLS}" = "y" ]; then |
yann@850 | 93 |
CT_DoLog EXTRA "Saving 'eglibc-${CT_LIBC_VERSION}' to local storage" |
yann@850 | 94 |
for file in ${eglibc} ${eglibc_linuxthreads} ${eglibc_localedef} ${eglibc_ports}; do |
yann@850 | 95 |
CT_DoExecLog ALL mv -f "${CT_TARBALLS_DIR}/${file}" "${CT_LOCAL_TARBALLS_DIR}" |
yann@850 | 96 |
CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${file}" "${CT_TARBALLS_DIR}/${file}" |
yann@850 | 97 |
done |
yann@850 | 98 |
fi |
yann@850 | 99 |
|
yann@850 | 100 |
return 0 |
yann@850 | 101 |
} |
yann@850 | 102 |
|
avrac@1569 | 103 |
# Copy user provided eglibc configuration file if provided |
yann@850 | 104 |
do_libc_check_config() { |
avrac@1569 | 105 |
if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then |
avrac@1569 | 106 |
return 0 |
avrac@1569 | 107 |
fi |
avrac@1569 | 108 |
|
avrac@1569 | 109 |
CT_DoStep INFO "Checking C library configuration" |
avrac@1569 | 110 |
|
avrac@1569 | 111 |
CT_TestOrAbort "You did not provide an eglibc config file!" \ |
avrac@1569 | 112 |
-n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \ |
avrac@1569 | 113 |
-f "${CT_EGLIBC_OPTION_GROUPS_FILE}" |
avrac@1569 | 114 |
|
avrac@1569 | 115 |
CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config" |
avrac@1569 | 116 |
|
avrac@1569 | 117 |
# NSS configuration |
avrac@1569 | 118 |
if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then |
avrac@1569 | 119 |
CT_DoLog DEBUG "Using fixed-configuration nsswitch facility" |
avrac@1569 | 120 |
|
avrac@1569 | 121 |
if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then |
avrac@1569 | 122 |
nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf" |
avrac@1569 | 123 |
else |
avrac@1569 | 124 |
nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}" |
avrac@1569 | 125 |
fi |
avrac@1569 | 126 |
CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}" |
avrac@1569 | 127 |
|
avrac@1569 | 128 |
CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config" |
avrac@1569 | 129 |
echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \ |
avrac@1569 | 130 |
>> "${CT_CONFIG_DIR}/eglibc.config" |
avrac@1569 | 131 |
|
avrac@1569 | 132 |
if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then |
avrac@1569 | 133 |
nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions" |
avrac@1569 | 134 |
else |
avrac@1569 | 135 |
nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}" |
avrac@1569 | 136 |
fi |
avrac@1569 | 137 |
CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}" |
avrac@1569 | 138 |
|
avrac@1569 | 139 |
CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions" |
avrac@1569 | 140 |
echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \ |
avrac@1569 | 141 |
>> "${CT_CONFIG_DIR}/eglibc.config" |
avrac@1569 | 142 |
else |
avrac@1569 | 143 |
CT_DoLog DEBUG "Using full-blown nsswitch facility" |
avrac@1569 | 144 |
fi |
avrac@1569 | 145 |
|
avrac@1569 | 146 |
CT_EndStep |
yann@850 | 147 |
} |