2024-03-29 18:28:22 -04:00
|
|
|
# typed: strict
|
2020-03-26 18:29:21 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Language
|
2020-08-17 18:59:02 +02:00
|
|
|
# Helper functions for Perl formulae.
|
|
|
|
#
|
|
|
|
# @api public
|
2020-03-26 18:29:21 +00:00
|
|
|
module Perl
|
2020-08-17 18:59:02 +02:00
|
|
|
# Helper module for replacing `perl` shebangs.
|
2020-03-26 18:29:21 +00:00
|
|
|
module Shebang
|
2023-04-18 06:17:22 -07:00
|
|
|
module_function
|
|
|
|
|
2023-08-14 20:22:47 -04:00
|
|
|
# A regex to match potential shebang permutations.
|
2024-01-18 22:18:42 +00:00
|
|
|
PERL_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?perl( |$)}
|
2023-08-14 20:22:47 -04:00
|
|
|
|
|
|
|
# The length of the longest shebang matching `SHEBANG_REGEX`.
|
2024-03-29 18:28:22 -04:00
|
|
|
PERL_SHEBANG_MAX_LENGTH = T.let("#! /usr/bin/env perl ".length, Integer)
|
2023-08-14 20:22:47 -04:00
|
|
|
|
|
|
|
# @private
|
|
|
|
sig { params(perl_path: T.any(String, Pathname)).returns(Utils::Shebang::RewriteInfo) }
|
|
|
|
def perl_shebang_rewrite_info(perl_path)
|
|
|
|
Utils::Shebang::RewriteInfo.new(
|
|
|
|
PERL_SHEBANG_REGEX,
|
|
|
|
PERL_SHEBANG_MAX_LENGTH,
|
|
|
|
"#{perl_path}\\1",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2024-03-29 18:28:22 -04:00
|
|
|
sig { params(formula: Formula).returns(Utils::Shebang::RewriteInfo) }
|
|
|
|
def detected_perl_shebang(formula = T.cast(self, Formula))
|
2024-08-09 14:08:29 +01:00
|
|
|
perl_deps = formula.declared_deps.select { |dep| dep.required? && dep.name == "perl" }
|
2023-08-14 20:22:47 -04:00
|
|
|
raise ShebangDetectionError.new("Perl", "formula does not depend on Perl") if perl_deps.empty?
|
|
|
|
|
|
|
|
perl_path = if perl_deps.any? { |dep| !dep.uses_from_macos? || !dep.use_macos_install? }
|
|
|
|
Formula["perl"].opt_bin/"perl"
|
2020-03-26 18:29:21 +00:00
|
|
|
else
|
2023-08-14 20:22:47 -04:00
|
|
|
"/usr/bin/perl#{MacOS.preferred_perl_version}"
|
2020-03-26 18:29:21 +00:00
|
|
|
end
|
|
|
|
|
2023-08-14 20:22:47 -04:00
|
|
|
perl_shebang_rewrite_info(perl_path)
|
2020-03-26 18:29:21 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|