scripts/build/companion_libs/libelf.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Mar 29 00:15:32 2010 +0200 (2010-03-29)
changeset 1864 758d5137fe87
parent 1126 1ab3d2e08c8b
child 1892 af092b4bf65c
permissions -rw-r--r--
scripts/populate: optimise search loop

Curently, populate will iterate over all ELF (shared objects|executables)
to look for missing NEEDED DSOs, adding to the list at every iterations
of the search loop.

Instead of looking again at previously handled ELF files, recursively
resolve every ELf files.

Also, in case there are a whole lot of files (more than the shell can
accept as arguments list, or creating a command line longer than the
shell can cope with), use a temporary file with the list of files
to search for missing dependencies.
yann@479
     1
# Build script for libelf
yann@479
     2
yann@1811
     3
do_libelf_get() { :; }
yann@1811
     4
do_libelf_extract() { :; }
yann@1811
     5
do_libelf() { :; }
yann@1811
     6
do_libelf_target() { :; }
yann@1811
     7
yann@1811
     8
if [ "${CT_LIBELF}" = "y" -o "${CT_LIBELF_TARGET}" = "y" ]; then
yann@1811
     9
yann@1811
    10
do_libelf_get() {
yann@479
    11
    # The server hosting libelf will return an "HTTP 300 : Multiple Choices"
yann@479
    12
    # error code if we try to download a file that does not exists there.
yann@479
    13
    # So we have to request the file with an explicit extension.
yann@479
    14
    CT_GetFile "libelf-${CT_LIBELF_VERSION}" .tar.gz http://www.mr511.de/software/
yann@479
    15
}
yann@479
    16
yann@1811
    17
do_libelf_extract() {
yann@1126
    18
    CT_Extract "libelf-${CT_LIBELF_VERSION}"
yann@1126
    19
    CT_Patch "libelf-${CT_LIBELF_VERSION}"
yann@479
    20
}
yann@479
    21
yann@1811
    22
if [ "${CT_LIBELF}" = "y" ]; then
yann@1811
    23
yann@1811
    24
# Uncomment when we need it for gcc-4.5
yann@1811
    25
# WARNING! This function is absolutely UNTESTED yet!
yann@1811
    26
do_libelf() {
yann@1811
    27
    : # Remove this line!
yann@1811
    28
#    CT_DoStep INFO "Installing libelf"
yann@1811
    29
#    mkdir -p "${CT_BUILD_DIR}/build-libelf"
yann@1811
    30
#    CT_Pushd "${CT_BUILD_DIR}/build-libelf"
yann@1811
    31
#
yann@1811
    32
#    CT_DoLog EXTRA "Configuring libelf"
yann@1811
    33
#    CC="${CT_TARGET}-gcc"                                   \
yann@1811
    34
#    CT_DoExecLog ALL                                        \
yann@1811
    35
#    "${CT_SRC_DIR}/libelf-${CT_LIBELF_VERSION}/configure"   \
yann@1811
    36
#        --build=${CT_BUILD}                                 \
yann@1811
    37
#        --host=${CT_HOST}                                   \
yann@1811
    38
#        --target=${CT_TARGET}                               \
yann@1811
    39
#        --prefix="${CT_PREFIX_DIR}"                         \
yann@1811
    40
#        --enable-compat                                     \
yann@1811
    41
#        --enable-elf64                                      \
yann@1811
    42
#        --enable-static                                     \
yann@1811
    43
#        --enable-shared                                     \
yann@1811
    44
#        --enable-extended-format
yann@1811
    45
#
yann@1811
    46
#    CT_DoLog EXTRA "Building libelf"
yann@1811
    47
#    CT_DoExecLog ALL make
yann@1811
    48
#
yann@1811
    49
#    CT_DoLog EXTRA "Installing libelf"
yann@1811
    50
#    CT_DoExecLog ALL make instroot="${CT_SYSROOT_DIR}" install
yann@1811
    51
#
yann@1811
    52
#    CT_Popd
yann@1811
    53
#    CT_EndStep
yann@1811
    54
}
yann@1811
    55
yann@1811
    56
fi # CT_LIBELF
yann@1811
    57
yann@1811
    58
if [ "${CT_LIBELF_TARGET}" = "y" ]; then
yann@1811
    59
yann@1811
    60
do_libelf_target() {
yann@1811
    61
    CT_DoStep INFO "Installing libelf for the target"
yann@479
    62
    mkdir -p "${CT_BUILD_DIR}/build-libelf"
yann@479
    63
    CT_Pushd "${CT_BUILD_DIR}/build-libelf"
yann@479
    64
yann@479
    65
    CT_DoLog EXTRA "Configuring libelf"
yann@479
    66
    CC="${CT_TARGET}-gcc"                                   \
yann@663
    67
    CT_DoExecLog ALL                                        \
yann@479
    68
    "${CT_SRC_DIR}/libelf-${CT_LIBELF_VERSION}/configure"   \
yann@479
    69
        --build=${CT_BUILD}                                 \
yann@479
    70
        --host=${CT_TARGET}                                 \
yann@479
    71
        --target=${CT_TARGET}                               \
yann@479
    72
        --prefix=/usr                                       \
yann@479
    73
        --enable-compat                                     \
yann@479
    74
        --enable-elf64                                      \
yann@479
    75
        --enable-shared                                     \
yann@479
    76
        --enable-extended-format                            \
yann@663
    77
        --enable-static
yann@479
    78
yann@479
    79
    CT_DoLog EXTRA "Building libelf"
yann@663
    80
    CT_DoExecLog ALL make
yann@479
    81
yann@479
    82
    CT_DoLog EXTRA "Installing libelf"
yann@663
    83
    CT_DoExecLog ALL make instroot="${CT_SYSROOT_DIR}" install
yann@479
    84
yann@479
    85
    CT_Popd
yann@479
    86
    CT_EndStep
yann@479
    87
}
yann@479
    88
yann@1811
    89
fi # CT_LIBELF_TARGET
yann@1811
    90
yann@1811
    91
fi # CT_LIBELF || CT_LIBELF_TARGET