From e31a2b8ed72c523c346f4c764c418c03dc9b5e5e Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Sun, 24 Mar 2024 19:46:57 -0400 Subject: [PATCH] formula_cellar_checks: add more types Signed-off-by: Michael Cho --- .../extend/os/mac/formula_cellar_checks.rb | 9 ++++++++- Library/Homebrew/formula_cellar_checks.rb | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb index 71913128cc..ff18605d42 100644 --- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb @@ -5,6 +5,7 @@ require "cache_store" require "linkage_checker" module FormulaCellarChecks + sig { returns(T.nilable(String)) } def check_shadowed_headers return if ["libtool", "subversion", "berkeley-db"].any? do |formula_name| formula.name.start_with?(formula_name) @@ -26,6 +27,7 @@ module FormulaCellarChecks EOS end + sig { returns(T.nilable(String)) } def check_openssl_links return unless formula.prefix.directory? @@ -45,6 +47,7 @@ module FormulaCellarChecks EOS end + sig { params(lib: Pathname).returns(T.nilable(String)) } def check_python_framework_links(lib) python_modules = Pathname.glob lib/"python*/site-packages/**/*.so" framework_links = python_modules.select do |obj| @@ -62,6 +65,7 @@ module FormulaCellarChecks EOS end + sig { returns(T.nilable(String)) } def check_linkage return unless formula.prefix.directory? @@ -88,9 +92,10 @@ module FormulaCellarChecks end end + sig { params(formula: Formula).returns(T.nilable(String)) } def check_flat_namespace(formula) return unless formula.prefix.directory? - return if formula.tap.present? && formula.tap.audit_exception(:flat_namespace_allowlist, formula.name) + return if formula.tap&.audit_exception(:flat_namespace_allowlist, formula.name) keg = Keg.new(formula.prefix) flat_namespace_files = keg.mach_o_files.reject do |file| @@ -113,6 +118,7 @@ module FormulaCellarChecks EOS end + sig { void } def audit_installed generic_audit_installed problem_if_output(check_shadowed_headers) @@ -122,6 +128,7 @@ module FormulaCellarChecks problem_if_output(check_flat_namespace(formula)) end + sig { params(filename: Pathname).returns(T::Boolean) } def valid_library_extension?(filename) macos_lib_extensions = %w[.dylib .framework] generic_valid_library_extension?(filename) || macos_lib_extensions.include?(filename.extname) diff --git a/Library/Homebrew/formula_cellar_checks.rb b/Library/Homebrew/formula_cellar_checks.rb index 160ee87beb..afcffb83c9 100644 --- a/Library/Homebrew/formula_cellar_checks.rb +++ b/Library/Homebrew/formula_cellar_checks.rb @@ -17,6 +17,7 @@ module FormulaCellarChecks sig { abstract.params(output: T.nilable(String)).void } def problem_if_output(output); end + sig { params(bin: Pathname).returns(T.nilable(String)) } def check_env_path(bin) return if Homebrew::EnvConfig.no_env_hints? @@ -36,6 +37,7 @@ module FormulaCellarChecks EOS end + sig { returns(T.nilable(String)) } def check_manpages # Check for man pages that aren't in share/man return unless (formula.prefix/"man").directory? @@ -47,6 +49,7 @@ module FormulaCellarChecks EOS end + sig { returns(T.nilable(String)) } def check_infopages # Check for info pages that aren't in share/info return unless (formula.prefix/"info").directory? @@ -58,6 +61,7 @@ module FormulaCellarChecks EOS end + sig { returns(T.nilable(String)) } def check_jars return unless formula.lib.directory? @@ -77,11 +81,13 @@ module FormulaCellarChecks VALID_LIBRARY_EXTENSIONS = %w[.a .jnilib .la .o .so .jar .prl .pm .sh].freeze + sig { params(filename: Pathname).returns(T::Boolean) } def valid_library_extension?(filename) VALID_LIBRARY_EXTENSIONS.include? filename.extname end alias generic_valid_library_extension? valid_library_extension? + sig { returns(T.nilable(String)) } def check_non_libraries return unless formula.lib.directory? @@ -100,6 +106,7 @@ module FormulaCellarChecks EOS end + sig { params(bin: Pathname).returns(T.nilable(String)) } def check_non_executables(bin) return unless bin.directory? @@ -113,6 +120,7 @@ module FormulaCellarChecks EOS end + sig { params(bin: Pathname).returns(T.nilable(String)) } def check_generic_executables(bin) return unless bin.directory? @@ -130,6 +138,7 @@ module FormulaCellarChecks EOS end + sig { params(lib: Pathname).returns(T.nilable(String)) } def check_easy_install_pth(lib) pth_found = Dir["#{lib}/python3*/site-packages/easy-install.pth"].map { |f| File.dirname(f) } return if pth_found.empty? @@ -143,6 +152,7 @@ module FormulaCellarChecks EOS end + sig { params(share: Pathname, name: String).returns(T.nilable(String)) } def check_elisp_dirname(share, name) return unless (share/"emacs/site-lisp").directory? # Emacs itself can do what it wants @@ -161,6 +171,7 @@ module FormulaCellarChecks EOS end + sig { params(share: Pathname, name: String).returns(T.nilable(String)) } def check_elisp_root(share, name) return unless (share/"emacs/site-lisp").directory? # Emacs itself can do what it wants @@ -216,6 +227,7 @@ module FormulaCellarChecks EOS end + sig { params(prefix: Pathname).returns(T.nilable(String)) } def check_shim_references(prefix) return unless prefix.directory? @@ -274,6 +286,7 @@ module FormulaCellarChecks EOS end + sig { params(name: String, keg_only: T::Boolean).returns(T.nilable(String)) } def check_python_symlinks(name, keg_only) return unless keg_only return unless name.start_with? "python" @@ -286,6 +299,7 @@ module FormulaCellarChecks "Python formulae that are keg-only should not create `pip3` and `wheel3` symlinks." end + sig { params(formula: Formula).returns(T.nilable(String)) } def check_service_command(formula) return unless formula.prefix.directory? return unless formula.service? @@ -294,6 +308,7 @@ module FormulaCellarChecks "Service command does not exist" unless File.exist?(formula.service.command.first) end + sig { params(formula: Formula).returns(T.nilable(String)) } def check_cpuid_instruction(formula) # Checking for `cpuid` only makes sense on Intel: # https://en.wikipedia.org/wiki/CPUID @@ -396,6 +411,7 @@ module FormulaCellarChecks s end + sig { void } def audit_installed @new_formula ||= false @@ -422,6 +438,7 @@ module FormulaCellarChecks private + sig { params(dir: T.any(Pathname, String), pattern: String).returns(T::Array[String]) } def relative_glob(dir, pattern) File.directory?(dir) ? Dir.chdir(dir) { Dir[pattern] } : [] end