scripts/build/internals.sh
author Bart vdr. Meulen <bartvdrmeulen@gmail.com>
Sun Aug 02 16:45:43 2009 +0200 (2009-08-02)
changeset 1434 7e7290acccc1
parent 1413 084d38788c1d
child 1493 0dce3a3986a1
permissions -rw-r--r--
fix wrapper script for symlinks

The wrapper script placed around the target binaries when
using the companion libraries does not work for symbolic links
The wrapper scripts needs to follow the links before calling the
actual binary

Signed-off-by: Bart vdr. Meulen <bartvdrmeulen@gmail.com>

---
yann@1225
     1
# This file contains crosstool-NG internal steps
yann@1225
     2
yann@1225
     3
# This step is called once all components were built, to remove
yann@1225
     4
# un-wanted files, to add tuple aliases, and to add the final
yann@1225
     5
# crosstool-NG-provided files.
yann@1225
     6
do_finish() {
yann@1401
     7
    local _t
yann@1401
     8
yann@1225
     9
    CT_DoStep INFO "Cleaning-up the toolchain's directory"
yann@1225
    10
yann@1225
    11
    CT_DoLog EXTRA "Removing access to the build system tools"
yann@1423
    12
    CT_DoExecLog DEBUG rm -rf "${CT_PREFIX_DIR}/buildtools"
yann@1225
    13
yann@1225
    14
    if [ "${CT_BARE_METAL}" != "y" ]; then
yann@1225
    15
        CT_DoLog EXTRA "Installing the populate helper"
yann@1225
    16
        sed -r -e 's|@@CT_TARGET@@|'"${CT_TARGET}"'|g;' \
yann@1225
    17
               -e 's|@@CT_install@@|'"${install}"'|g;'  \
yann@1225
    18
               -e 's|@@CT_bash@@|'"${bash}"'|g;'        \
yann@1225
    19
               -e 's|@@CT_grep@@|'"${grep}"'|g;'        \
yann@1225
    20
               -e 's|@@CT_make@@|'"${make}"'|g;'        \
yann@1225
    21
               -e 's|@@CT_sed@@|'"${sed}"'|g;'          \
yann@1225
    22
               "${CT_LIB_DIR}/scripts/populate.in"      \
yann@1225
    23
               >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
yann@1225
    24
        CT_DoExecLog ALL chmod 755 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
yann@1225
    25
    fi
yann@1225
    26
yann@1225
    27
    # Create the aliases to the target tools
yann@1225
    28
    CT_DoLog EXTRA "Creating toolchain aliases"
yann@1225
    29
    CT_Pushd "${CT_PREFIX_DIR}/bin"
yann@1225
    30
    for t in "${CT_TARGET}-"*; do
yann@1225
    31
        if [ -n "${CT_TARGET_ALIAS}" ]; then
yann@1225
    32
            _t=$(echo "$t" |sed -r -e 's/^'"${CT_TARGET}"'-/'"${CT_TARGET_ALIAS}"'-/;')
yann@1225
    33
            CT_DoExecLog ALL ln -sv "${t}" "${_t}"
yann@1225
    34
        fi
yann@1225
    35
        if [ -n "${CT_TARGET_ALIAS_SED_EXPR}" ]; then
yann@1225
    36
            _t=$(echo "$t" |sed -r -e "${CT_TARGET_ALIAS_SED_EXPR}")
yann@1225
    37
            CT_DoExecLog ALL ln -sv "${t}" "${_t}"
yann@1225
    38
        fi
yann@1225
    39
    done
yann@1225
    40
    CT_Popd
yann@1225
    41
yann@1401
    42
    # If using the companion libraries, we need a wrapper
yann@1401
    43
    # that will set LD_LIBRARY_PATH approriately
yann@1401
    44
    if [    "${CT_GMP_MPFR}" = "y"      \
yann@1401
    45
         -o "${CT_PPL_CLOOG_MPC}" = "y" ]; then
yann@1401
    46
        CT_DoLog EXTRA "Installing toolchain wrappers"
yann@1401
    47
        CT_Pushd "${CT_PREFIX_DIR}/bin"
yann@1402
    48
yann@1402
    49
        # Copy the wrapper
yann@1402
    50
        CT_DoExecLog DEBUG install -m 0755 "${CT_LIB_DIR}/scripts/wrapper.in"   \
yann@1402
    51
                                           ".${CT_TARGET}-wrapper"
yann@1402
    52
yann@1402
    53
        # Replace every tools with the wrapper
yann@1402
    54
        # Do it unconditionally, even for those tools that happen to be shell
yann@1402
    55
        # scripts, we don't know if they would in the end spawn a binary...
yann@1402
    56
        # Just skip symlinks
Yann@1408
    57
        for _t in "${CT_TARGET}-"*; do
Yann@1408
    58
            if [ "$( LANG=C stat -c '%F' "${_t}" )" != "symbolic link" ]; then
yann@1413
    59
                CT_DoExecLog ALL mv "${_t}" ".${_t}"
Yann@1408
    60
                CT_DoExecLog ALL ln ".${CT_TARGET}-wrapper" "${_t}"
yann@1402
    61
            fi
yann@1401
    62
        done
yann@1402
    63
yann@1402
    64
        # Get rid of the wrapper, we're using hardlinks
yann@1402
    65
        CT_DoExecLog DEBUG rm -f ".${CT_TARGET}-wrapper"
yann@1401
    66
        CT_Popd
yann@1401
    67
    fi
yann@1401
    68
yann@1225
    69
    # Remove the generated documentation files
yann@1225
    70
    if [ "${CT_REMOVE_DOCS}" = "y" ]; then
yann@1225
    71
        CT_DoLog EXTRA "Removing installed documentation"
yann@1225
    72
        CT_DoForceRmdir "${CT_PREFIX_DIR}/"{,usr/}{man,info}
yann@1225
    73
        CT_DoForceRmdir "${CT_SYSROOT_DIR}/"{,usr/}{man,info}
yann@1225
    74
        CT_DoForceRmdir "${CT_DEBUGROOT_DIR}/"{,usr/}{man,info}
yann@1225
    75
    fi
yann@1225
    76
yann@1225
    77
    CT_EndStep
yann@1225
    78
}