summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-03-28 21:01:19 (GMT)
committerYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-03-28 21:01:19 (GMT)
commitec4181e4d2306c423118d9ee083c67b2fb48b414 (patch)
tree6a0442c6ae21dcbc375e83db0ad9ebafb876bc35
parent1913d355b3839f372c0fc7701f231fd2a38f0ba3 (diff)
scripts/populate: cleanups and misc fixes
- it's a POSIX compliant shell script: drop bash, use /bin/sh - fix help text - use an absolute path for sysroot - replace "echo" with "printf" - replace "stat -c '%i'" with "ls -1id" - replace "pushd / popd" with "cd / cd -" - remove superfluous break - bail out if required lib not found, except if forced
-rw-r--r--scripts/populate.in61
1 files changed, 33 insertions, 28 deletions
diff --git a/scripts/populate.in b/scripts/populate.in
index 04f66df..f52eefd 100644
--- a/scripts/populate.in
+++ b/scripts/populate.in
@@ -1,4 +1,4 @@
-#!@@CT_bash@@
+#!/bin/sh
# This script will populate the root directory with libs from the sysroot.
# (C) 2007 Yann E. MORIN
# Licensed under the GPL v2
@@ -23,7 +23,7 @@ CT_CFG_SYSROOT_DIR="$("${CT_GCC}" -v 2>&1 \
|"${grep}" -E -- '--with-sysroot=' \
|cut -d = -f 2-
)"
-CT_SYSROOT_DIR="$(echo "${CT_CFG_SYSROOT_DIR}" \
+CT_SYSROOT_DIR="$(printf "${CT_CFG_SYSROOT_DIR}\n" \
|"${sed}" -r -e "s:^${CT_CFG_PREFIX_DIR}:${CT_PREFIX_DIR}:;" \
|"${sed}" -r -e 's,/+,/,g;' \
)"
@@ -39,19 +39,21 @@ SYNOPSIS
$myname OPTIONS -s source_root -d destination_root
DESCRIPTION
- $myname will 'populate' your target root file system ('src_dir') with
- libraries from the toolchain (eg. libc.so...), storing the result into
- 'dst_dir'.
+ This script will 'populate' your target root file system 'source_root'
+ with libraries from the toolchain (eg. libc.so...), storing the result
+ into 'dst_dir'.
OPTIONS
-s src_dir
- use 'src_dir' as the un-populated (source) root directory
+ Use 'src_dir' as the un-populated (source) root directory.
-d dst_dir
- use 'dst_dir' as the place to put the populated root directory
+ Use 'dst_dir' as the place to put the populated root directory.
+ See the -f and -m options, below, on the required (non-)existence
+ of this directory.
-r sysroot_dir
- use 'sysroot_dir' as the sysroot instead of the toolchain default
+ Use 'sysroot_dir' as the sysroot instead of the toolchain default.
-l name1[:name2[...]]
Always add the specified shared library/ies name1, name2... from the
@@ -71,14 +73,14 @@ OPTIONS
after a # is ignored until the end of the line; spaces are ignored;
empty lines are ignored. Libraries are searched for as with -l.
- -f force execution: if destination directory already exists, it will be
+ -f Force execution: if destination directory already exists, it will be
removed first; if a specified library (above) was not found, continue.
Note: if using -m and the destination directory already exists, it
is *not* removed, see below.
-m Merge the source root directory with the destination root directory.
If the latter does not exist, it is created, and -m is ignored.
- If the destination droot directory exists, then the content of the
+ If the destination root directory exists, then the content of the
source root directory is copied in there, and the result is populated
as usual.
It can be usefull if constructing a rootfs incrementally from many
@@ -112,10 +114,10 @@ while getopts ":s:d:r:l:L:fmvh" CT_OPT; do
h) doHelp
exit 0
;;
- :) echo "$myname: '-${OPTARG}' takes exactly one argument."
+ :) printf "$myname: '-${OPTARG}' takes exactly one argument.\n"
exit 1
;;
- ?) echo "$myname: unknown option '-${OPTARG}'."
+ ?) printf "$myname: unknown option '-${OPTARG}'.\n"
exit 1
;;
esac
@@ -127,11 +129,11 @@ if [ -z "${CT_ROOT_SRC_DIR}" -o -z "${CT_ROOT_DST_DIR}" ]; then
exit 1
fi
if [ ! -d "${CT_ROOT_SRC_DIR}" ]; then
- echo "$myname: '${CT_ROOT_SRC_DIR}': no such file or directory"
+ printf "$myname: '${CT_ROOT_SRC_DIR}': no such file or directory\n"
exit 1
fi
if [ ! -d "${CT_SYSROOT_DIR}" ]; then
- echo "$myname: '${CT_SYSROOT_DIR}': no such file or directory"
+ printf "$myname: '${CT_SYSROOT_DIR}': no such file or directory\n"
exit 1
fi
# If the dest dir does not exist, all is well
@@ -142,19 +144,21 @@ if [ -d "${CT_ROOT_DST_DIR}" ]; then
case "${CT_FORCE}:${CT_MERGE}" in
*:y) ;;
y:) rm -rf "${CT_ROOT_DST_DIR}";;
- :) echo "$myname: '${CT_ROOT_DST_DIR}': already exists" && exit 1 ;;
+ :) printf "$myname: '${CT_ROOT_DST_DIR}': already exists\n"
+ exit 1
+ ;;
esac
fi
-src_inode=$(stat -c '%i' "${CT_ROOT_SRC_DIR}/.")
-dst_inode=$(stat -c '%i' "${CT_ROOT_DST_DIR}/." 2>/dev/null || true)
+src_inode=$(ls -1id "${CT_ROOT_SRC_DIR}/." |awk '{ print $1 }')
+dst_inode=$(ls -1id "${CT_ROOT_DST_DIR}/." 2>/dev/null |awk '{ print $1 }')
if [ "${src_inode}" -eq "$((dst_inode+0))" ]; then
- echo "$myname: source and destination are the same!"
+ printf "$myname: source and destination are the same!\n"
exit 1
fi
# Check existence of the forced libraries file
if [ -n "${CT_LIB_FILE}" -a ! \( -f "${CT_LIB_FILE}" -a -r "${CT_LIB_FILE}" \) ]; then
- echo "$myname: forced libraries file '${CT_LIB_FILE}' not found!"
+ printf "$myname: forced libraries file '${CT_LIB_FILE}' not found!\n"
exit 1
fi
@@ -164,11 +168,12 @@ mkdir -p "${CT_ROOT_DST_DIR}"
# Make all path absolute
CT_ROOT_SRC_DIR=$(cd "${CT_ROOT_SRC_DIR}"; pwd)
CT_ROOT_DST_DIR=$(cd "${CT_ROOT_DST_DIR}"; pwd)
+CT_SYSROOT_DIR=$(cd "${CT_SYSROOT_DIR}"; pwd)
# Populate the destination directory with files from the source directory
-pushd "${CT_ROOT_SRC_DIR}" >/dev/null
+cd "${CT_ROOT_SRC_DIR}"
cp -a . "${CT_ROOT_DST_DIR}"
-popd >/dev/null
+cd - >/dev/null
# A function do search for a library
# Usage: do_add_lib libname
@@ -196,14 +201,13 @@ do_add_lib() {
${CT_PRINTF} " installing as '%s/%s', mode='%s'\n" "${dir}" "${true_libname}" "${mode}"
"${install}" -m "${mode}" "${libfile}" "${dir}/${true_libname}"
return 0
- break
fi
done
return 1
}
# We'll work in the copied rootfs
-pushd "${CT_ROOT_DST_DIR}" >/dev/null
+cd "${CT_ROOT_DST_DIR}"
# First of, copy the forced libraries into the working copy
lib_list=
@@ -215,7 +219,7 @@ if [ -n "${CT_LIB_FILE}" ]; then
"${CT_LIB_FILE}"
)
fi
-CT_LIB_LIST=$(echo "${CT_LIB_LIST}:${lib_list}" \
+CT_LIB_LIST=$(printf "${CT_LIB_LIST}:${lib_list}\n" \
|"${sed}" -r -e 's/^:+//; s/:+$//; s/:+/ /g;' \
)
if [ -n "${CT_LIB_LIST}" ]; then
@@ -231,8 +235,8 @@ if [ -n "${CT_LIB_LIST}" ]; then
fi
done
if [ ${found} -eq 0 ]; then
- echo "$myname: library '${libname}' not found!"
- [ "${CT_FORCE}" = y ] || exit 1
+ printf "$myname: library '${libname}' not found!\n"
+ [ "${CT_FORCE}" = "y" ] || exit 1
fi
done
fi
@@ -260,11 +264,12 @@ while [ ${still_needed} -eq 1 ]; do
if do_add_lib "${libname}"; then
still_needed=1
else
- echo "$myname: library '${libname}' not found!"
+ printf "$myname: library '${libname}' not found!\n"
+ [ "${CT_FORCE}" = "y" ] || exit 1
fi
done
done
done
# OK, we're done. Back off.
-popd >/dev/null
+cd - >/dev/null