diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 1df01f60a6..4da0e79b41 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -6,6 +6,7 @@ require "lock_file" require "formula_pin" require "hardware" require "utils/bottles" +require "utils/shebang" require "utils/shell" require "build_environment" require "build_options" @@ -50,6 +51,7 @@ require "find" class Formula include FileUtils include Utils::Inreplace + include Utils::Shebang include Utils::Shell extend Enumerable extend Forwardable diff --git a/Library/Homebrew/utils/shebang.rb b/Library/Homebrew/utils/shebang.rb new file mode 100644 index 0000000000..eda6eec190 --- /dev/null +++ b/Library/Homebrew/utils/shebang.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Utils + module Shebang + module_function + + class RewriteInfo + attr_reader :regex, :max_length, :replacement + + def initialize(regex, max_length, replacement) + @regex = regex + @max_length = max_length + @replacement = replacement + end + end + + def rewrite_shebang(rewrite_info, *paths) + paths.each do |f| + f = Pathname(f) + next unless f.file? + next unless rewrite_info.regex.match?(f.read(rewrite_info.max_length)) + + Utils::Inreplace.inreplace f.to_s, rewrite_info.regex, "#!#{rewrite_info.replacement}" + end + end + end +end