Skip to content

Commit

Permalink
cleaner: rewrite pkg-config file Cellar paths and keg-only
Browse files Browse the repository at this point in the history
  • Loading branch information
cho-m committed Sep 2, 2024
1 parent 1f9bd2d commit d7266a1
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions Library/Homebrew/cleaner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ def clean
observe_file_removal info_dir_file
end

# TODO: rewrite_config_scripts
rewrite_pkgconfig
rewrite_shebangs
clean_python_metadata

Expand Down Expand Up @@ -153,6 +155,40 @@ def clean_dir(directory)
end
end

sig { void }
def rewrite_pkgconfig
pc_files = [@formula.lib.realpath, @formula.share.realpath].flat_map do |d|
next [] if @formula.skip_clean?(d) || @formula.skip_clean?(d/"pkgconfig")

d.glob("pkgconfig/*")
end
return if pc_files.empty?

keg_only_pc_files = @formula.deps
.reject { |d| d.build? || d.test? }
.map(&:to_formula)
.select(&:keg_only?)
.flat_map { |f| f.prefix.glob("{lib,share}/pkgconfig/*.pc") }
.to_h { |pc_file| [pc_file.basename(".pc").to_s, pc_file.to_s] }
keg_only_modules_pattern = keg_only_pc_files.keys.map { |mod| Regexp.escape(mod) }.join("|")

pc_files.each do |pc_file|
any_modification = T.let(false, T::Boolean)
lines = pc_file.each_line.map do |line|
any_modification ||= line.gsub!(@formula.prefix.realpath.to_s, @formula.opt_prefix.to_s).present?
next line if keg_only_pc_files.empty? || !line.start_with?(/Requires(?:\.private)?:/)

line.gsub(/(?<=[:,\s])(#{keg_only_modules_pattern})(?=[<=>!,\s])/) do |match|
any_modification ||= keg_only_pc_files.include?(match)
keg_only_pc_files[match] || match
end
end
next unless any_modification

pc_file.atomic_write(lines.join)
end
end

sig { void }
def rewrite_shebangs
require "language/node"
Expand Down

0 comments on commit d7266a1

Please sign in to comment.