| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2024-08-20 19:10:14 +01:00
										 |  |  |       extend T::Helpers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       requires_ancestor { Formula } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							| 
									
										
										
										
											2025-06-23 20:32:55 +08:00
										 |  |  |       PERL_SHEBANG_REGEX = %r{\A#! ?(?:/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 |