Update populate:
author"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jan 29 22:35:26 2009 +0000 (2009-01-29)
changeset 1177748c418d3b6a
parent 1176 8508ec77df4c
child 1178 41a84f7d3b4f
Update populate:
- use tools found by ./configure
- some POSIX and eye-candy cleanups

/trunk/scripts/functions | 7 4 3 0 +++--
/trunk/scripts/populate.in | 70 46 24 0 ++++++++++++++++++++++++++++++++++------------------
2 files changed, 50 insertions(+), 27 deletions(-)
scripts/functions
scripts/populate.in
     1.1 --- a/scripts/functions	Thu Jan 29 22:09:55 2009 +0000
     1.2 +++ b/scripts/functions	Thu Jan 29 22:35:26 2009 +0000
     1.3 @@ -902,9 +902,10 @@
     1.4  
     1.5      if [ "${CT_BARE_METAL}" != "y" ]; then
     1.6          CT_DoLog EXTRA "Installing the populate helper"
     1.7 -        sed -r -e 's|@@CT_TARGET@@|'"${CT_TARGET}"'|g;' \
     1.8 -            "${CT_LIB_DIR}/scripts/populate.in"           \
     1.9 -            >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
    1.10 +        sed -r -e 's|@@CT_TARGET@@|'"${CT_TARGET}"'|g;'     \
    1.11 +               -e 's|@@CT_bash@@|'"${bash}"'|g;'            \
    1.12 +               "${CT_LIB_DIR}/scripts/populate.in"          \
    1.13 +               >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
    1.14          CT_DoExecLog ALL chmod 755 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
    1.15      fi
    1.16  
     2.1 --- a/scripts/populate.in	Thu Jan 29 22:09:55 2009 +0000
     2.2 +++ b/scripts/populate.in	Thu Jan 29 22:35:26 2009 +0000
     2.3 @@ -1,16 +1,21 @@
     2.4 -#!/bin/bash
     2.5 -
     2.6 +#!@@CT_bash@@
     2.7  # This script will populate the root directory with libs from the sysroot.
     2.8  # (C) 2007 Yann E. MORIN
     2.9  # Licensed under the GPL v2
    2.10 +set -e
    2.11  
    2.12  # Detect where the toolchain is:
    2.13 -BIN_DIR="$(cd "$(dirname "$0")"; pwd)"
    2.14 -CT_READELF="${BIN_DIR}/@@CT_TARGET@@-readelf"
    2.15 -CT_SYSROOT_DIR="${BIN_DIR}/../@@CT_TARGET@@/sys-root"
    2.16 +CT_PREFIX_DIR="$(cd "$(dirname "$0")/.."; pwd)"
    2.17 +CT_BIN_DIR="${CT_PREFIX_DIR}/bin"
    2.18 +CT_READELF="${CT_BIN_DIR}/@@CT_TARGET@@-readelf"
    2.19 +CT_LIB_DIR="${CT_PREFIX_DIR}/lib"
    2.20 +CT_SYSROOT_DIR="$(cd "${CT_BIN_DIR}/../@@CT_TARGET@@/sys-root"; pwd)"
    2.21  
    2.22  myname=$(basename "$0")
    2.23  
    2.24 +# Parse the tools' paths configuration
    2.25 +. "${CT_LIB_DIR}/paths.mk"
    2.26 +
    2.27  doHelp() {
    2.28      cat <<_EOF_
    2.29  NAME
    2.30 @@ -63,6 +68,7 @@
    2.31  CT_LIB_FILE=
    2.32  CT_FORCE=no
    2.33  CT_ECHO=true
    2.34 +OPTIND=1
    2.35  while getopts ":s:d:l:L:fvh" CT_OPT; do
    2.36      case "${CT_OPT}" in
    2.37          s)  CT_ROOT_SRC_DIR="${OPTARG}";;
    2.38 @@ -110,10 +116,7 @@
    2.39  fi
    2.40  
    2.41  # Get rid of potentially older destination directory
    2.42 -if [ -d "${CT_ROOT_DST_DIR}" ]; then
    2.43 -    mv "${CT_ROOT_DST_DIR}" "${CT_ROOT_DST_DIR}.$$"
    2.44 -    setsid nohup rm -rf "${CT_ROOT_DST_DIR}.$$" >/dev/null 2>&1 &
    2.45 -fi
    2.46 +rm -rf "${CT_ROOT_DST_DIR}"
    2.47  
    2.48  # Create the working copy
    2.49  mkdir -p "${CT_ROOT_DST_DIR}"
    2.50 @@ -122,6 +125,7 @@
    2.51  CT_ROOT_SRC_DIR=$(cd "${CT_ROOT_SRC_DIR}"; pwd)
    2.52  CT_ROOT_DST_DIR=$(cd "${CT_ROOT_DST_DIR}"; pwd)
    2.53  
    2.54 +# Populate the destination directory with files form the source directory
    2.55  pushd "${CT_ROOT_SRC_DIR}" >/dev/null
    2.56  tar cf - . |(cd "${CT_ROOT_DST_DIR}"; tar xf -)
    2.57  popd >/dev/null
    2.58 @@ -131,30 +135,42 @@
    2.59  # returns: 0 if library was found and added, !0 otherwise
    2.60  do_add_lib() {
    2.61      local libname="$1"
    2.62 -    local ret=1
    2.63      local true_libname
    2.64 -    for dir in . usr; do
    2.65 +    local dir
    2.66 +    for dir in lib usr/lib; do
    2.67          ${CT_ECHO} -n "    trying in '${dir}'"
    2.68 -        libfile="${CT_SYSROOT_DIR}/${dir}/lib/${libname}"
    2.69 +        libfile="${CT_SYSROOT_DIR}/${dir}/${libname}"
    2.70          ${CT_ECHO} ": '${libfile}'"
    2.71          if [ -e "${libfile}" ]; then
    2.72 -            mkdir -p "${dir}/lib"
    2.73 -            true_libname=$("${CT_READELF}" -d "${libfile}" |egrep "SONAME" |sed -r -e 's,.+\[(.+)\] *$,\1,;')
    2.74 -            ${CT_ECHO} "      installing as '${dir}/lib/${true_libname}'"
    2.75 -            cat "${libfile}" >"${dir}/lib/${true_libname}"
    2.76 -            ret=0
    2.77 +            mkdir -p "${dir}"
    2.78 +            true_libname=$("${CT_READELF}" -d "${libfile}"          \
    2.79 +                           |"${grep}" "Library soname:"             \
    2.80 +                           |"${sed}" -r -e 's,.+\[(.+)\] *$,\1,;'   \
    2.81 +                          )
    2.82 +            ${CT_ECHO} "      installing as '${dir}/${true_libname}'"
    2.83 +            "${install}" -m 0644 "${libfile}" "${dir}/${true_libname}"
    2.84 +            return 0
    2.85              break
    2.86          fi
    2.87      done
    2.88 -    return ${ret}
    2.89 +    return 1
    2.90  }
    2.91  
    2.92  # First of, copy the forced libraries into the working copy
    2.93  if [ -n "${CT_LIB_FILE}" ]; then
    2.94 -    lib_list=$(sed -r -e ':loop; s/#.*//; s/[[:space:]]+//g; s/([^:])$/\1:/; /$/N; s/\n//; tloop;' "${CT_LIB_FILE}")
    2.95 -    CT_LIB_LIST=$(echo "${CT_LIB_LIST}:${lib_list}" |sed -r -e 's/:+/:/g; s/^:+//; s/:+$//;')
    2.96 +    lib_list=$("${sed}" -r -e ':loop; s/#.*//;'         \
    2.97 +                           -e 's/[[:space:]]+//g;'      \
    2.98 +                           -e 's/([^:])$/\1:/;'         \
    2.99 +                           -e '/$/N; s/\n//; tloop;'    \
   2.100 +                        "${CT_LIB_FILE}"
   2.101 +              )
   2.102 +    CT_LIB_LIST=$(echo "${CT_LIB_LIST}:${lib_list}"             \
   2.103 +                  |"${sed}" -r -e 's/:+/:/g; s/^:+//; s/:+$//;' \
   2.104 +                 )
   2.105  fi
   2.106 -CT_LIB_LIST="${CT_LIB_LIST//:/ }"
   2.107 +CT_LIB_LIST=$(echo "${CT_LIB_LIST}:${lib_list}"             \
   2.108 +              |"${sed}" -r -e 's/^:+//; s/:+$//; s/:+/ /g;' \
   2.109 +             )
   2.110  ${CT_ECHO} "Installing forced libraries..."
   2.111  pushd "${CT_ROOT_DST_DIR}" >/dev/null
   2.112  for name in ${CT_LIB_LIST}; do
   2.113 @@ -180,9 +196,15 @@
   2.114  while [ ${still_needed} -eq 1 ]; do
   2.115      ${CT_ECHO} "Looping..."
   2.116      still_needed=0
   2.117 -    for f in $(find . -type f -exec file {} \; |egrep ': ELF [[:digit:]]+-bit .SB (executable|shared object),' |cut -d ":" -f 1); do
   2.118 +    for f in $(find . -type f -exec file {} \;                                              \
   2.119 +               |"${grep}" -E ': ELF [[:digit:]]+-bit (L|M)SB (executable|shared object),'   \
   2.120 +               |cut -d ":" -f 1                                                             \
   2.121 +              ); do
   2.122          ${CT_ECHO} "Scanning '${f}'"
   2.123 -        for libname in $("${CT_READELF}" -d "${f}" |egrep '(NEEDED)' |sed -r -e 's,.+\[(.+)\] *$,\1,;'); do
   2.124 +        for libname in $("${CT_READELF}" -d "${f}"                              \
   2.125 +                         |"${grep}" -E '\(NEEDED\)[[:space:]]+Shared library:'  \
   2.126 +                         |"${sed}" -r -e 's,.+\[(.+)\] *$,\1,;'                 \
   2.127 +                        ); do
   2.128              ${CT_ECHO} "  searching for '${libname}'"
   2.129              if [    -e "lib/${libname}"     \
   2.130                   -o -e "usr/lib/${libname}" ]; then