diff --git a/Library/Homebrew/extend/os/mac/keg_relocate.rb b/Library/Homebrew/extend/os/mac/keg_relocate.rb index 60188596a3..282d9be933 100644 --- a/Library/Homebrew/extend/os/mac/keg_relocate.rb +++ b/Library/Homebrew/extend/os/mac/keg_relocate.rb @@ -183,14 +183,4 @@ class Keg # it's wrong. -O is a BSD-grep-only option. "-lrO" end - - def egrep_args - grep_bin = "egrep" - grep_args = recursive_fgrep_args - [grep_bin, grep_args] - end - - def codesign_patched_binary(binary_file) - apply_ad_hoc_signature(binary_file) - end end diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 424b95605f..f9dce3fbf5 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -1230,10 +1230,6 @@ class FormulaInstaller keg = Keg.new(formula.prefix) skip_linkage = formula.bottle_specification.skip_relocation? keg.replace_placeholders_with_locations tab.changed_files, skip_linkage: skip_linkage - - return if formula.bottle_specification.skip_prefix_relocation? - - keg.relocate_build_prefix(keg, Utils::Bottles.tag.default_prefix, HOMEBREW_PREFIX) end sig { params(output: T.nilable(String)).void } diff --git a/Library/Homebrew/keg_relocate.rb b/Library/Homebrew/keg_relocate.rb index b5fcd4d307..eaa3f3582b 100644 --- a/Library/Homebrew/keg_relocate.rb +++ b/Library/Homebrew/keg_relocate.rb @@ -8,7 +8,6 @@ class Keg LIBRARY_PLACEHOLDER = "@@HOMEBREW_LIBRARY@@" PERL_PLACEHOLDER = "@@HOMEBREW_PERL@@" JAVA_PLACEHOLDER = "@@HOMEBREW_JAVA@@" - BINARY_NULL_CHARACTER = "\x00" class Relocation extend T::Sig @@ -164,49 +163,6 @@ class Keg changed_files end - def relocate_build_prefix(keg, old_prefix, new_prefix) - # Find binaries which match prefix strings. - string_matches = Set.new - keg.each_unique_file_matching(old_prefix) do |file| - string_matches << file - end - - binary_string_matches = Set.new - keg.each_unique_binary_file do |file| - binary_string_matches << file if string_matches.include?(file) - end - - # Only consider string matches which are binary files with null bytes, and remove any - # matches which are sharballs found by text_files. - binary_string_matches -= text_files - - # Split binary by null characters into array and substitute new cellar for old cellar. - # Null padding is added if the new string is too short. - binary_string_matches.each do |binary_file| - binary_file.ensure_writable do - binary = File.binread binary_file - puts "Replacing build prefix in: #{binary_file}" - binary_strings = binary.split(BINARY_NULL_CHARACTER) - match_indices = binary_strings.each_index.select { |i| binary_strings[i].include?(old_prefix) } - - # Only perform substitution on strings which match prefix regex. - match_indices.each do |i| - s = binary_strings[i] - binary_strings[i] = s.gsub(old_prefix, new_prefix).ljust(s.size, BINARY_NULL_CHARACTER) - end - - # Add back null padding at the end of the binary if needed. - patched_binary = binary_strings.join(BINARY_NULL_CHARACTER).ljust(binary.size, BINARY_NULL_CHARACTER) - if patched_binary.size != binary.size - raise "Patching failed! Original and patched binary sizes do not match." - end - - binary_file.atomic_write patched_binary - end - codesign_patched_binary(binary_file) - end - end - def detect_cxx_stdlibs(_options = {}) [] end @@ -217,47 +173,19 @@ class Keg end alias generic_recursive_fgrep_args recursive_fgrep_args - def egrep_args - grep_bin = "grep" - grep_args = recursive_fgrep_args - grep_args += "Pa" - [grep_bin, grep_args] - end - alias generic_egrep_args egrep_args - - def each_unique_file(io) - hardlinks = Set.new - - until io.eof? - file = Pathname.new(io.readline.chomp) - # Don't yield symlinks - next if file.symlink? - - # Only yield a file if it has a unique inode. - # This makes sure we don't yield hardlinks. - yield file if hardlinks.add? file.stat.ino - end - end - def each_unique_file_matching(string) Utils.popen_read("fgrep", recursive_fgrep_args, string, to_s) do |io| - each_unique_file(io) + hardlinks = Set.new + + until io.eof? + file = Pathname.new(io.readline.chomp) + next if file.symlink? + + yield file if hardlinks.add? file.stat.ino + end end end - def each_unique_binary_file - grep_bin, grep_args = egrep_args - - # An extra \ is needed for the null character when calling grep - Utils.popen_read(grep_bin, grep_args, "\#{BINARY_NULL_CHARACTER}", to_s) do |io| - each_unique_file(io) - end - end - - def codesign_patched_binary(_binary_file) - [] - end - def lib path/"lib" end diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index e7270754de..85012c9b4f 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -347,11 +347,6 @@ class Bottle @spec.compatible_locations?(tag: @tag) end - # Should the build prefix be relocated? - def skip_prefix_relocation? - @spec.skip_prefix_relocation?(tag: @tag) - end - # Does the bottle need to be relocated? def skip_relocation? @spec.skip_relocation?(tag: @tag) @@ -478,8 +473,6 @@ class Bottle end class BottleSpecification - RELOCATABLE_CELLARS = [:any, :any_skip_relocation].freeze - extend T::Sig attr_rw :rebuild @@ -520,30 +513,7 @@ class BottleSpecification tag.default_cellar end - return true if RELOCATABLE_CELLARS.include?(cellar) - - prefix = Pathname(cellar).parent.to_s - - cellar_relocatable = cellar.size >= HOMEBREW_CELLAR.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"] - prefix_relocatable = prefix.size >= HOMEBREW_PREFIX.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"] - - compatible_cellar = cellar == HOMEBREW_CELLAR.to_s || cellar_relocatable - compatible_prefix = prefix == HOMEBREW_PREFIX.to_s || prefix_relocatable - - compatible_cellar && compatible_prefix - end - - # Should the build prefix for the {Bottle} this {BottleSpecification} belongs to be relocated? - sig { params(tag: Utils::Bottles::Tag).returns(T::Boolean) } - def skip_prefix_relocation?(tag: Utils::Bottles.tag) - spec = collector.specification_for(tag) - cellar = if spec.present? - spec.cellar - else - tag.default_cellar - end - - return true if RELOCATABLE_CELLARS.include?(cellar) + return true if [:any, :any_skip_relocation].include?(cellar) prefix = Pathname(cellar).parent.to_s