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>
This commit is contained in:

committed by
GitHub

parent
cb07d9ddb1
commit
bb00b1a7c9
@@ -64,6 +64,10 @@ def filter_shebang(path):
|
||||
if re.search(r'^#!(/[^/\n]*)*lua\b', original):
|
||||
original = re.sub(r'^#', '--', original)
|
||||
|
||||
# Use <?php #! instead of #! on second line for php.
|
||||
if re.search(r'^#!(/[^/\n]*)*php\b', original):
|
||||
original = re.sub(r'^#', '<?php #', original) + ' ?>'
|
||||
|
||||
# Use //! instead of #! on second line for node.js.
|
||||
if re.search(r'^#!(/[^/\n]*)*node\b', original):
|
||||
original = re.sub(r'^#', '//', original)
|
||||
|
@@ -30,6 +30,11 @@
|
||||
node_in_text = ("line\n") * 100 + "lua\n" + ("line\n" * 100)
|
||||
node_line_patched = "//!/this/" + ('x' * 200) + "/is/node\n"
|
||||
sbang_line = '#!/bin/bash %s/bin/sbang\n' % spack.store.layout.root
|
||||
php_line = "#!/this/" + ('x' * 200) + "/is/php\n"
|
||||
php_in_text = ("line\n") * 100 + "php\n" + ("line\n" * 100)
|
||||
php_line_patched = "<?php #!/this/" + ('x' * 200) + "/is/php\n"
|
||||
php_line_patched2 = "?>\n"
|
||||
sbang_line = '#!/bin/bash %s/bin/sbang\n' % spack.store.layout.root
|
||||
last_line = "last!\n"
|
||||
|
||||
|
||||
@@ -79,6 +84,19 @@ def __init__(self):
|
||||
f.write(node_in_text)
|
||||
f.write(last_line)
|
||||
|
||||
# php script with long shebang
|
||||
self.php_shebang = os.path.join(self.tempdir, 'php')
|
||||
with open(self.php_shebang, 'w') as f:
|
||||
f.write(php_line)
|
||||
f.write(last_line)
|
||||
|
||||
# php script with long shebang
|
||||
self.php_textbang = os.path.join(self.tempdir, 'php_in_text')
|
||||
with open(self.php_textbang, 'w') as f:
|
||||
f.write(short_line)
|
||||
f.write(php_in_text)
|
||||
f.write(last_line)
|
||||
|
||||
# Script already using sbang.
|
||||
self.has_sbang = os.path.join(self.tempdir, 'shebang')
|
||||
with open(self.has_sbang, 'w') as f:
|
||||
|
Reference in New Issue
Block a user