# Build script for libelf

do_libelf_get() { :; }
do_libelf_extract() { :; }
do_libelf() { :; }
do_libelf_target() { :; }

if [ "${CT_LIBELF}" = "y" -o "${CT_LIBELF_TARGET}" = "y" ]; then

do_libelf_get() {
    # The server hosting libelf will return an "HTTP 300 : Multiple Choices"
    # error code if we try to download a file that does not exists there.
    # So we have to request the file with an explicit extension.
    CT_GetFile "libelf-${CT_LIBELF_VERSION}" .tar.gz http://www.mr511.de/software/
}

do_libelf_extract() {
    CT_Extract "libelf-${CT_LIBELF_VERSION}"
    CT_Patch "libelf" "${CT_LIBELF_VERSION}"
}

if [ "${CT_LIBELF}" = "y" ]; then

do_libelf() {
    CT_DoStep INFO "Installing libelf"
    mkdir -p "${CT_BUILD_DIR}/build-libelf"
    CT_Pushd "${CT_BUILD_DIR}/build-libelf"

    CT_DoLog EXTRA "Configuring libelf"

    CT_DoExecLog CFG                                        \
    CC="${CT_HOST}-gcc"                                     \
    CFLAGS="-fPIC"                                          \
    "${CT_SRC_DIR}/libelf-${CT_LIBELF_VERSION}/configure"   \
        --build=${CT_BUILD}                                 \
        --host=${CT_HOST}                                   \
        --target=${CT_TARGET}                               \
        --prefix="${CT_COMPLIBS_DIR}"                       \
        --enable-compat                                     \
        --enable-elf64                                      \
        --enable-extended-format                            \
        --disable-shared                                    \
        --enable-static

    CT_DoLog EXTRA "Building libelf"
    CT_DoExecLog ALL make

    CT_DoLog EXTRA "Installing libelf"
    CT_DoExecLog ALL make install

    CT_Popd
    CT_EndStep
}

fi # CT_LIBELF

if [ "${CT_LIBELF_TARGET}" = "y" ]; then

do_libelf_target() {
    CT_DoStep INFO "Installing libelf for the target"
    mkdir -p "${CT_BUILD_DIR}/build-libelf-for-target"
    CT_Pushd "${CT_BUILD_DIR}/build-libelf-for-target"

    CT_DoLog EXTRA "Configuring libelf"
    CT_DoExecLog CFG                                        \
    CC="${CT_TARGET}-gcc"                                   \
    CFLAGS="-fPIC"                                          \
    RANLIB="${CT_TARGET}-ranlib"                            \
    "${CT_SRC_DIR}/libelf-${CT_LIBELF_VERSION}/configure"   \
        --build=${CT_BUILD}                                 \
        --host=${CT_TARGET}                                 \
        --target=${CT_TARGET}                               \
        --prefix=/usr                                       \
        --enable-compat                                     \
        --enable-elf64                                      \
        --enable-shared                                     \
        --enable-extended-format                            \
        --enable-static

    CT_DoLog EXTRA "Building libelf"
    CT_DoExecLog ALL make

    CT_DoLog EXTRA "Installing libelf"
    CT_DoExecLog ALL make instroot="${CT_SYSROOT_DIR}" install

    CT_Popd
    CT_EndStep
}

fi # CT_LIBELF_TARGET

fi # CT_LIBELF || CT_LIBELF_TARGET
