diff options
author | Toyohisa Kameyama <kameyama@riken.jp> | 2020-10-27 14:11:43 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-26 22:11:43 -0700 |
commit | bb00b1a7c9eae3d307f0a22dcccae9e33a5885d0 (patch) | |
tree | e5c4a9e189bac786687ba3bdb0d17374923a3049 /bin/sbang | |
parent | cb07d9ddb1e744c8e0f1aded64ab3f5bf9e5bae3 (diff) | |
download | spack-bb00b1a7c9eae3d307f0a22dcccae9e33a5885d0.tar.gz spack-bb00b1a7c9eae3d307f0a22dcccae9e33a5885d0.tar.bz2 spack-bb00b1a7c9eae3d307f0a22dcccae9e33a5885d0.tar.xz spack-bb00b1a7c9eae3d307f0a22dcccae9e33a5885d0.zip |
sbang: add support for php (#18299)
PHP supports an initial shebang, but its comment syntax can't handle our 2-line
shebangs. So, we need to embed the 2nd-line shebang comment to look like a
PHP comment:
<?php #!/path/to/php ?>
This adds patching support to the sbang hook and support for
instrumenting php shebangs.
This also patches `phar`, which is a tool used to create php packages.
`phar` itself has to add sbangs to those packages (as phar archives
apparently contain UTF-8, as well as binary blobs), and `phar` sets a
checksum based on the contents of the package.
Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
Diffstat (limited to 'bin/sbang')
-rwxr-xr-x | bin/sbang | 25 |
1 files changed, 18 insertions, 7 deletions
@@ -61,15 +61,23 @@ # Obviously, for this to work, `sbang` needs to have a short enough # path that *it* will run without hitting OS limits. # -# For Lua, scripts the second line can't start with #!, as # is not -# the comment character in lua (even though lua ignores #! on the -# *first* line of a script). So, instrument a lua script like this, -# using -- instead of # on the second line: +# For Lua, node, and php scripts, the second line can't start with #!, as +# # is not the comment character in these languages (though they all +# ignore #! on the *first* line of a script). So, instrument such scripts +# like this, using --, //, or <?php ... ?> instead of # on the second +# line, e.g.: # # 1 #!/bin/bash /path/to/sbang # 2 --!/long/path/to/lua with arguments -# 3 -# 4 print "success!" +# 3 print "success!" +# +# 1 #!/bin/bash /path/to/sbang +# 2 //!/long/path/to/node with arguments +# 3 print "success!" +# +# 1 #!/bin/bash /path/to/sbang +# 2 <?php #/long/path/to/php with arguments ?> +# 3 <?php echo "success!\n"; ?> # # How it works # ----------------------------- @@ -90,6 +98,9 @@ while read line && ((lines < 2)) ; do interpreter="${line#//!}" elif [[ "$line" = '--!'*lua* ]]; then interpreter="${line#--!}" + elif [[ "$line" = '<?php #!'*php* ]]; then + interpreter="${line#<?php\ \#!}" + interpreter="${interpreter%\ ?>}" fi lines=$((lines+1)) done < "$script" @@ -98,7 +109,7 @@ done < "$script" # #!/<spack-long-path>/perl -w # this is the interpreter line with all the parameters as a vector interpreter_v=(${interpreter}) -# this is the single interpreter path +# this is the single interpreter path interpreter_f="${interpreter_v[0]}" # Invoke any interpreter found, or raise an error if none was found. |