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 b45a7a2
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 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,42 @@ def clean_dir(directory)
end
end

sig { void }
def rewrite_pkgconfig
basepath = @formula.prefix.realpath
pc_files = %w[lib share].flat_map do |subdir|
next [] unless (pc_dir = basepath/subdir/"pkgconfig").exist?
next [] if @formula.skip_clean?(basepath/subdir) || @formula.skip_clean?(pc_dir)

pc_dir.glob("*.pc").reject { |pc_file| @formula.skip_clean?(pc_file) }

Check warning on line 165 in Library/Homebrew/cleaner.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cleaner.rb#L165

Added line #L165 was not covered by tests
end
return if pc_files.empty?

keg_only_pc_files = @formula.deps
.reject { |d| d.build? || d.test? }

Check warning on line 170 in Library/Homebrew/cleaner.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cleaner.rb#L169-L170

Added lines #L169 - L170 were not covered by tests
.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("|")

Check warning on line 175 in Library/Homebrew/cleaner.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cleaner.rb#L173-L175

Added lines #L173 - L175 were not covered by tests

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?

Check warning on line 180 in Library/Homebrew/cleaner.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cleaner.rb#L177-L180

Added lines #L177 - L180 were not covered by tests
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

Check warning on line 185 in Library/Homebrew/cleaner.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cleaner.rb#L183-L185

Added lines #L183 - L185 were not covered by tests
end
end
next unless any_modification

pc_file.atomic_write(lines.join)

Check warning on line 190 in Library/Homebrew/cleaner.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cleaner.rb#L190

Added line #L190 was not covered by tests
end
end

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

0 comments on commit b45a7a2

Please sign in to comment.