From 0cf8ec75470204b844e223f4e7144aa5c3cee284 Mon Sep 17 00:00:00 2001 From: Izaak Beekman Date: Thu, 23 May 2019 19:07:17 -0400 Subject: [PATCH] Allow Accelerate linkage, deny veclibfort & lapack - Accelerate provides more than just BLAS and LAPACK functionality, see https://developer.apple.com/documentation/accelerate - Veclibfort exists only to wrap Accelerate's BLAS/LAPACK - LAPACK is a slow, seldom updated reference implementation - Encourage usage of OpenBLAS - Reverts PR #6130 --- .../extend/os/mac/formula_cellar_checks.rb | 23 ------------------- Library/Homebrew/rubocops/text.rb | 4 ++++ 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb index b0bc68711f973..9f0805404afd2 100644 --- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb @@ -48,28 +48,6 @@ def check_openssl_links EOS end - def check_accelerate_framework_links - return unless @core_tap - return unless formula.prefix.directory? - return if formula.name == "veclibfort" # veclibfort exists to wrap accelerate - - keg = Keg.new(formula.prefix) - system_accelerate = keg.mach_o_files.select do |obj| - dlls = obj.dynamically_linked_libraries - dlls.any? { |dll| %r{^/System/Library/Frameworks/Accelerate.framework}.match dll } - end - return if system_accelerate.empty? - - <<~EOS - object files were linked against system Accelerate - These object files were linked against the outdated system Accelerate framework. - Core tap formulae should link against OpenBLAS instead. - Removing `depends_on "veclibfort" and/or adding `depends_on "openblas"` to the - formula may help. - #{system_accelerate * "\n "} - EOS - end - def check_python_framework_links(lib) python_modules = Pathname.glob lib/"python*/site-packages/**/*.so" framework_links = python_modules.select do |obj| @@ -117,7 +95,6 @@ def audit_installed generic_audit_installed problem_if_output(check_shadowed_headers) problem_if_output(check_openssl_links) - problem_if_output(check_accelerate_framework_links) problem_if_output(check_python_framework_links(formula.lib)) check_linkage end diff --git a/Library/Homebrew/rubocops/text.rb b/Library/Homebrew/rubocops/text.rb index 482c1a0aacc71..e328e63585d47 100644 --- a/Library/Homebrew/rubocops/text.rb +++ b/Library/Homebrew/rubocops/text.rb @@ -16,6 +16,10 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) problem "Formulae should not depend on both OpenSSL and LibreSSL (even optionally)." end + if depends_on?("veclibfort") || depends_on?("lapack") + problem "Formulae should use OpenBLAS as the default serial linear algebra library." + end + if method_called_ever?(body_node, :virtualenv_create) || method_called_ever?(body_node, :virtualenv_install_with_resources) find_method_with_args(body_node, :resource, "setuptools") do