110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Keg
 | |
|   PREFIX_PLACEHOLDER = "@@HOMEBREW_PREFIX@@".freeze
 | |
|   CELLAR_PLACEHOLDER = "@@HOMEBREW_CELLAR@@".freeze
 | |
| 
 | |
|   def fix_dynamic_linkage
 | |
|     symlink_files.each do |file|
 | |
|       link = file.readlink
 | |
|       # Don't fix relative symlinks
 | |
|       next unless link.absolute?
 | |
|       if link.to_s.start_with?(HOMEBREW_CELLAR.to_s) || link.to_s.start_with?(HOMEBREW_PREFIX.to_s)
 | |
|         FileUtils.ln_sf(link.relative_path_from(file.parent), file)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
|   alias generic_fix_dynamic_linkage fix_dynamic_linkage
 | |
| 
 | |
|   def relocate_dynamic_linkage(old_prefix, new_prefix, old_cellar, new_cellar)
 | |
|     []
 | |
|   end
 | |
| 
 | |
|   def relocate_text_files(old_prefix, new_prefix, old_cellar, new_cellar)
 | |
|     files = text_files | libtool_files
 | |
| 
 | |
|     files.group_by { |f| f.stat.ino }.each_value do |first, *rest|
 | |
|       s = first.open("rb", &:read)
 | |
|       changed = s.gsub!(old_cellar, new_cellar)
 | |
|       changed = s.gsub!(old_prefix, new_prefix) || changed
 | |
| 
 | |
|       next unless changed
 | |
| 
 | |
|       begin
 | |
|         first.atomic_write(s)
 | |
|       rescue SystemCallError
 | |
|         first.ensure_writable do
 | |
|           first.open("wb") { |f| f.write(s) }
 | |
|         end
 | |
|       else
 | |
|         rest.each { |file| FileUtils.ln(first, file, :force => true) }
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def detect_cxx_stdlibs(options = {})
 | |
|     []
 | |
|   end
 | |
| 
 | |
|   def each_unique_file_matching(string)
 | |
|     Utils.popen_read("/usr/bin/fgrep", "-lr", string, to_s) do |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 lib
 | |
|     path.join("lib")
 | |
|   end
 | |
| 
 | |
|   def text_files
 | |
|     text_files = []
 | |
|     return text_files unless File.exist?("/usr/bin/file")
 | |
| 
 | |
|     # file has known issues with reading files on other locales. Has
 | |
|     # been fixed upstream for some time, but a sufficiently new enough
 | |
|     # file with that fix is only available in macOS Sierra.
 | |
|     # http://bugs.gw.com/view.php?id=292
 | |
|     with_custom_locale("C") do
 | |
|       path.find do |pn|
 | |
|         next if pn.symlink? || pn.directory?
 | |
|         next if Metafiles::EXTENSIONS.include? pn.extname
 | |
|         if Utils.popen_read("/usr/bin/file", "--brief", pn).include?("text") ||
 | |
|            pn.text_executable?
 | |
|           text_files << pn
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     text_files
 | |
|   end
 | |
| 
 | |
|   def libtool_files
 | |
|     libtool_files = []
 | |
| 
 | |
|     path.find do |pn|
 | |
|       next if pn.symlink? || pn.directory? || pn.extname != ".la"
 | |
|       libtool_files << pn
 | |
|     end
 | |
|     libtool_files
 | |
|   end
 | |
| 
 | |
|   def symlink_files
 | |
|     symlink_files = []
 | |
|     path.find do |pn|
 | |
|       symlink_files << pn if pn.symlink?
 | |
|     end
 | |
| 
 | |
|     symlink_files
 | |
|   end
 | |
| 
 | |
|   def self.file_linked_libraries(file, string)
 | |
|     []
 | |
|   end
 | |
| end
 | |
| 
 | |
| require "extend/os/keg_relocate"
 | 
