scripts/build/internals.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1503 7dcef3fb5e8f
child 1817 c9654a027900
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
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
    if [ "${CT_BARE_METAL}" != "y" ]; then
yann@1225
    12
        CT_DoLog EXTRA "Installing the populate helper"
yann@1225
    13
        sed -r -e 's|@@CT_TARGET@@|'"${CT_TARGET}"'|g;' \
yann@1225
    14
               -e 's|@@CT_install@@|'"${install}"'|g;'  \
yann@1225
    15
               -e 's|@@CT_bash@@|'"${bash}"'|g;'        \
yann@1225
    16
               -e 's|@@CT_grep@@|'"${grep}"'|g;'        \
yann@1225
    17
               -e 's|@@CT_make@@|'"${make}"'|g;'        \
yann@1225
    18
               -e 's|@@CT_sed@@|'"${sed}"'|g;'          \
yann@1225
    19
               "${CT_LIB_DIR}/scripts/populate.in"      \
yann@1225
    20
               >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
yann@1225
    21
        CT_DoExecLog ALL chmod 755 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
yann@1225
    22
    fi
yann@1225
    23
yann@1225
    24
    # Create the aliases to the target tools
yann@1225
    25
    CT_DoLog EXTRA "Creating toolchain aliases"
yann@1225
    26
    CT_Pushd "${CT_PREFIX_DIR}/bin"
yann@1225
    27
    for t in "${CT_TARGET}-"*; do
yann@1225
    28
        if [ -n "${CT_TARGET_ALIAS}" ]; then
yann@1225
    29
            _t=$(echo "$t" |sed -r -e 's/^'"${CT_TARGET}"'-/'"${CT_TARGET_ALIAS}"'-/;')
yann@1225
    30
            CT_DoExecLog ALL ln -sv "${t}" "${_t}"
yann@1225
    31
        fi
yann@1225
    32
        if [ -n "${CT_TARGET_ALIAS_SED_EXPR}" ]; then
yann@1225
    33
            _t=$(echo "$t" |sed -r -e "${CT_TARGET_ALIAS_SED_EXPR}")
yann@1225
    34
            CT_DoExecLog ALL ln -sv "${t}" "${_t}"
yann@1225
    35
        fi
yann@1225
    36
    done
yann@1225
    37
    CT_Popd
yann@1225
    38
yann@1401
    39
    # If using the companion libraries, we need a wrapper
yann@1401
    40
    # that will set LD_LIBRARY_PATH approriately
yann@1495
    41
    if [ "${CT_WRAPPER_NEEDED}" = "y" ]; then
yann@1401
    42
        CT_DoLog EXTRA "Installing toolchain wrappers"
yann@1401
    43
        CT_Pushd "${CT_PREFIX_DIR}/bin"
yann@1402
    44
yann@1493
    45
        # Install the wrapper
yann@1493
    46
        case "${CT_TOOLS_WRAPPER}" in
yann@1493
    47
            script)
yann@1493
    48
                CT_DoExecLog DEBUG install                              \
yann@1493
    49
                                   -m 0755                              \
yann@1493
    50
                                   "${CT_LIB_DIR}/scripts/wrapper.in"   \
yann@1493
    51
                                   ".${CT_TARGET}-wrapper"
yann@1493
    52
                ;;
yann@1493
    53
            exec)
yann@1493
    54
                _t="-s"
yann@1493
    55
                if [ "${CT_DEBUG_CT}" = "y" ]; then
yann@1493
    56
                  _t="" # If debugging crosstool-NG, don't strip the wrapper
yann@1493
    57
                fi
yann@1518
    58
                CT_DoExecLog DEBUG "${CT_HOST}-gcc"                           \
yann@1518
    59
                                   -Wall -Wextra -Wunreachable-code -Werror   \
yann@1518
    60
                                   -O3 -static ${_t}                          \
yann@1518
    61
                                   "${CT_LIB_DIR}/scripts/wrapper.c"          \
yann@1518
    62
                                   -o ".${CT_TARGET}-wrapper"
yann@1493
    63
                ;;
yann@1493
    64
        esac
yann@1402
    65
yann@1402
    66
        # Replace every tools with the wrapper
yann@1402
    67
        # Do it unconditionally, even for those tools that happen to be shell
yann@1402
    68
        # scripts, we don't know if they would in the end spawn a binary...
yann@1402
    69
        # Just skip symlinks
Yann@1408
    70
        for _t in "${CT_TARGET}-"*; do
Yann@1408
    71
            if [ "$( LANG=C stat -c '%F' "${_t}" )" != "symbolic link" ]; then
yann@1413
    72
                CT_DoExecLog ALL mv "${_t}" ".${_t}"
Yann@1408
    73
                CT_DoExecLog ALL ln ".${CT_TARGET}-wrapper" "${_t}"
yann@1402
    74
            fi
yann@1401
    75
        done
yann@1402
    76
yann@1402
    77
        # Get rid of the wrapper, we're using hardlinks
yann@1402
    78
        CT_DoExecLog DEBUG rm -f ".${CT_TARGET}-wrapper"
yann@1401
    79
        CT_Popd
yann@1401
    80
    fi
yann@1401
    81
yann@1518
    82
    CT_DoLog EXTRA "Removing access to the build system tools"
yann@1518
    83
    CT_DoExecLog DEBUG rm -rf "${CT_PREFIX_DIR}/buildtools"
yann@1518
    84
yann@1225
    85
    # Remove the generated documentation files
yann@1225
    86
    if [ "${CT_REMOVE_DOCS}" = "y" ]; then
yann@1225
    87
        CT_DoLog EXTRA "Removing installed documentation"
yann@1225
    88
        CT_DoForceRmdir "${CT_PREFIX_DIR}/"{,usr/}{man,info}
yann@1225
    89
        CT_DoForceRmdir "${CT_SYSROOT_DIR}/"{,usr/}{man,info}
yann@1225
    90
        CT_DoForceRmdir "${CT_DEBUGROOT_DIR}/"{,usr/}{man,info}
yann@1225
    91
    fi
yann@1225
    92
yann@1225
    93
    CT_EndStep
yann@1225
    94
}