--- bin/misc-functions.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh index 9b79351..c2ff70a 100755 --- a/bin/misc-functions.sh +++ b/bin/misc-functions.sh @@ -261,20 +261,30 @@ install_mask() { shift local install_mask="$*" - # we don't want globbing for initial expansion, but afterwards, we do + # We think of $install_mask as a space-separated list of + # globs. We don't want globbing in the "for" loop; that is, we + # want to keep the asterisks in the indivual entries. local shopts=$- set -o noglob local no_inst for no_inst in ${install_mask}; do + # Here, $no_inst is a single "entry" potentially + # containing a glob. From now on, we *do* want to + # expand it. set +o noglob - # normal stuff + # The standard case where $no_inst is something that + # the shell could expand on its own. if [[ -e "${root}"/${no_inst} || "${root}"/${no_inst} != $(echo "${root}"/${no_inst}) ]] ; then __quiet_mode || einfo "Removing ${no_inst}" rm -Rf "${root}"/${no_inst} >&/dev/null fi - # we also need to handle globs (*.a, *.h, etc) + # We also want to allow the user to specify a "bare + # glob." For example, $no_inst="*.a" should prevent + # ALL files ending in ".a" from being installed, + # regardless of their location/depth. We achieve this + # by passing the pattern to `find`. find "${root}" \( -path "${no_inst}" -or -name "${no_inst}" \) \ -print0 2> /dev/null \ | LC_ALL=C sort -z \ -- 2.3.6