scripts/build/libc/eglibc.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Thu Jan 10 21:01:59 2013 +0100 (2013-01-10)
changeset 3162 e51eb0a614c7
parent 3041 b9f695c2f5b7
child 3251 ec603d1371b9
permissions -rw-r--r--
libc: get rid of libc_finish

At long last, we no longer have any libc that requries a libc_finish.
Yeah!

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
     1 # eglibc build functions (initially by Thomas JOURDAN).
     2 
     3 # Add the definitions common to glibc and eglibc
     4 #   do_libc_extract
     5 #   do_libc_start_files
     6 #   do_libc
     7 #   do_libc_add_ons_list
     8 #   do_libc_min_kernel_config
     9 . "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common"
    10 
    11 # Download glibc
    12 # eglibc is only available through subversion, there are no
    13 # snapshots available.
    14 do_libc_get() {
    15     local addon
    16     local -a extra_addons
    17     local svn_base
    18 
    19     if [ "${CT_EGLIBC_HTTP}" = "y" ]; then
    20         svn_base="http://www.eglibc.org/svn"
    21     else
    22         svn_base="svn://svn.eglibc.org"
    23     fi
    24 
    25     case "${CT_LIBC_VERSION}" in
    26         trunk)  svn_base+="/trunk";;
    27         *)      svn_base+="/branches/eglibc-${CT_LIBC_VERSION}";;
    28     esac
    29 
    30     CT_GetSVN "eglibc-${CT_LIBC_VERSION}"   \
    31               "${svn_base}/libc"            \
    32               "${CT_EGLIBC_REVISION:-HEAD}"
    33 
    34     if [ "${CT_LIBC_LOCALES}" = "y" ]; then
    35         extra_addons+=("localedef")
    36     fi
    37 
    38     for addon in $(do_libc_add_ons_list " ") "${extra_addons[@]}"; do
    39         # Never ever try to download these add-ons,
    40         # they've always been internal
    41         case "${addon}" in
    42             nptl)   continue;;
    43         esac
    44 
    45         if ! CT_GetSVN "eglibc-${addon}-${CT_LIBC_VERSION}" \
    46                        "${svn_base}/${addon}"               \
    47                        "${CT_EGLIBC_REVISION:-HEAD}"
    48         then
    49             # Some add-ons are bundled with the main sources
    50             # so failure to download them is expected
    51             CT_DoLog DEBUG "Addon '${addon}' could not be downloaded."
    52             CT_DoLog DEBUG "We'll see later if we can find it in the source tree"
    53         fi
    54     done
    55 }
    56 
    57 # Copy user provided eglibc configuration file if provided
    58 do_libc_check_config() {
    59     if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then
    60         return 0
    61     fi
    62 
    63     CT_DoStep INFO "Checking C library configuration"
    64 
    65     CT_TestOrAbort "You did not provide an eglibc config file!" \
    66         -n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \
    67         -f "${CT_EGLIBC_OPTION_GROUPS_FILE}"
    68 
    69     CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config"
    70 
    71     # NSS configuration
    72     if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then
    73         CT_DoLog DEBUG "Using fixed-configuration nsswitch facility"
    74 
    75         if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then
    76             nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf"
    77         else
    78             nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}"
    79         fi
    80         CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}"
    81 
    82         CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config"
    83         echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \
    84             >> "${CT_CONFIG_DIR}/eglibc.config"
    85 
    86         if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then
    87             nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions"
    88         else
    89             nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}"
    90         fi
    91         CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}"
    92 
    93         CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions"
    94         echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \
    95             >> "${CT_CONFIG_DIR}/eglibc.config"
    96     else
    97         CT_DoLog DEBUG "Using full-blown nsswitch facility"
    98     fi
    99 
   100     CT_EndStep
   101 }
   102 
   103 # Extract the files required for the libc locales
   104 do_libc_locales_extract() {
   105     CT_Extract "eglibc-localedef-${CT_LIBC_VERSION}"
   106     CT_Patch "eglibc" "localedef-${CT_LIBC_VERSION}"
   107 }
   108 
   109 # Build and install the libc locales
   110 do_libc_locales() {
   111     local libc_src_dir="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}"
   112     local src_dir="${CT_SRC_DIR}/eglibc-localedef-${CT_LIBC_VERSION}"
   113     local -a extra_config
   114     local -a localedef_opts
   115 
   116     mkdir -p "${CT_BUILD_DIR}/build-localedef"
   117     cd "${CT_BUILD_DIR}/build-localedef"
   118 
   119     CT_DoLog EXTRA "Configuring C library localedef"
   120 
   121     if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   122         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   123         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   124     fi
   125 
   126     CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
   127 
   128     # ./configure is misled by our tools override wrapper for bash
   129     # so just tell it where the real bash is _on_the_target_!
   130     # Notes:
   131     # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL
   132     # - ${BASH_SHELL}            is only used to set BASH
   133     # - ${BASH}                  is only used to set the shebang
   134     #                            in two scripts to run on the target
   135     # So we can safely bypass bash detection at compile time.
   136     # Should this change in a future eglibc release, we'd better
   137     # directly mangle the generated scripts _after_ they get built,
   138     # or even after they get installed...
   139     echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
   140 
   141     # Configure with --prefix the way we want it on the target...
   142 
   143     CT_DoExecLog CFG                                                \
   144     CPPFLAGS="-DNOT_IN_libc"                                        \
   145     "${src_dir}/configure"                                          \
   146         --prefix=/usr                                               \
   147         --cache-file="$(pwd)/config.cache"                          \
   148         --with-glibc="${libc_src_dir}"                              \
   149         "${extra_config[@]}"
   150 
   151     CT_DoLog EXTRA "Building C library localedef"
   152     CT_DoExecLog ALL make ${JOBSFLAGS}
   153 
   154     # Set the localedef endianness option
   155     case "${CT_ARCH_ENDIAN}" in
   156         big)    localedef_opts+=(--big-endian);;
   157         little) localedef_opts+=(--little-endian);;
   158     esac
   159 
   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)
   164 
   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}"          \
   169                           install-locales
   170 }