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