--- doins.orig 2008-02-18 16:28:27.610453995 +0000 +++ doins 2008-02-19 07:40:36.239183825 +0000 @@ -16,11 +16,6 @@ else DOINSRECUR=n fi -[[ -z ${INSDEPTH} ]] && declare -i INSDEPTH=0 -if [[ ${INSDEPTH} -gt 30 ]] ; then - echo "${0##*/}: sanity check ... 30 directories is too much :(" 2>&1 - exit 1 -fi if [[ ${INSDESTTREE#${D}} != "${INSDESTTREE}" ]]; then vecho "-------------------------------------------------------" 1>&2 @@ -32,24 +27,34 @@ [[ ! -d ${D}${INSDESTTREE} ]] && dodir "${INSDESTTREE}" +_doins() { + local mysrc="$1" mydir="$2" + + if [ -L "$1" ] ; then + cp "$1" "${T}" + mysrc="${T}/$(/usr/bin/basename "${1}")" + fi + + install ${INSOPTIONS} "${mysrc}" "${D}${INSDESTTREE}/${mydir}" +} + +_xdoins() { + while read line; do + _doins "${line}" "$(dirname "${line}")" + done +} + for x in "$@" ; do - if [ -L "$x" ] ; then - cp "$x" "${T}" - mysrc="${T}/$(/usr/bin/basename "${x}")" - elif [ -d "$x" ] ; then + if [ -d "$x" ] ; then if [ "${DOINSRECUR}" == "n" ] ; then continue fi - mydir="${INSDESTTREE}/$(basename "${x}")" - find "${x}" -mindepth 1 -maxdepth 1 -exec \ - env \ - INSDESTTREE="${mydir}" \ - INSDEPTH=$((INSDEPTH+1)) \ - doins -r {} \; - continue + pushd "${x}" >/dev/null + find -type d -exec dodir "${INSDESTTREE}/{}" \; + find \( -type f -or -type l \) | _xdoins + popd >/dev/null else - mysrc="${x}" + _doins "${x}" fi - install ${INSOPTIONS} "${mysrc}" "${D}${INSDESTTREE}" done