diff --git a/Library/Homebrew/extend/os/linux/formula.rb b/Library/Homebrew/extend/os/linux/formula.rb index fde9216664..da2d162bdf 100644 --- a/Library/Homebrew/extend/os/linux/formula.rb +++ b/Library/Homebrew/extend/os/linux/formula.rb @@ -4,7 +4,9 @@ class Formula undef shared_library undef rpath + undef deuniversalize_machos + sig { params(name: String, version: T.nilable(T.any(String, Integer))).returns(String) } def shared_library(name, version = nil) suffix = if version == "*" || (name == "*" && version.blank?) "{,.*}" @@ -14,10 +16,14 @@ class Formula "#{name}.so#{suffix}" end + sig { returns(String) } def rpath "'$ORIGIN/../lib'" end + sig { params(targets: T.nilable(T.any(Pathname, String))).void } + def deuniversalize_machos(*targets); end + class << self undef ignore_missing_libraries diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index a368b9a532..3ce605123b 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1582,6 +1582,21 @@ class Formula end end + sig { params(targets: T.nilable(T.any(Pathname, String))).void } + def deuniversalize_machos(*targets) + if targets.blank? + targets = any_installed_keg.mach_o_files.select do |file| + file.arch == :universal && file.archs.include?(Hardware::CPU.arch) + end + end + + targets.each do |t| + macho = MachO::FatFile.new(t) + native_slice = macho.extract(Hardware::CPU.arch) + native_slice.write t + end + end + # an array of all core {Formula} names # @private def self.core_names