Skip to content

Commit

Permalink
Fix sbang for perl (spack#1802)
Browse files Browse the repository at this point in the history
* Perform shebang fix for all files

* Fix sbang for perl scripts

Otherwise perl would look at the #! line and call sbang again, resulting
in an infinite loop.
  • Loading branch information
muffgaga authored and tgamblin committed Sep 22, 2016
1 parent 98f9dd2 commit 025b779
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
8 changes: 6 additions & 2 deletions bin/sbang
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,12 @@ while read line && ((lines < 2)) ; do
done < "$script"

# Invoke any interpreter found, or raise an error if none was found.
if [ -n "$interpreter" ]; then
exec $interpreter "$@"
if [[ -n "$interpreter" ]]; then
if [[ "${interpreter##*/}" = "perl" ]]; then
exec $interpreter -x "$@"
else
exec $interpreter "$@"
fi
else
echo "error: sbang found no interpreter in $script"
exit 1
Expand Down
12 changes: 7 additions & 5 deletions lib/spack/spack/hooks/sbang.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,10 @@ def filter_shebang(path):
tty.warn("Patched overlong shebang in %s" % path)


def filter_shebangs_in_directory(directory):
for file in os.listdir(directory):
def filter_shebangs_in_directory(directory, filenames=None):
if filenames is None:
filenames = os.listdir(directory)
for file in filenames:
path = os.path.join(directory, file)

# only handle files
Expand All @@ -104,6 +106,6 @@ def post_install(pkg):
"""This hook edits scripts so that they call /bin/bash
$spack_prefix/bin/sbang instead of something longer than the
shebang limit."""
if not os.path.isdir(pkg.prefix.bin):
return
filter_shebangs_in_directory(pkg.prefix.bin)

for directory, _, filenames in os.walk(pkg.prefix):
filter_shebangs_in_directory(directory, filenames)

0 comments on commit 025b779

Please sign in to comment.