diff options
| author | Adam Vandenberg | 2010-08-21 11:06:02 -0700 | 
|---|---|---|
| committer | Adam Vandenberg | 2010-08-21 11:06:02 -0700 | 
| commit | 8ff8b84235d8c8b430608bddb85715469a3b3504 (patch) | |
| tree | a454f014210c4c039605b0354852452620abb013 /Library/Homebrew/cleaner.rb | |
| parent | 04c0342d96ebafeff7f830615f381e8a3e6059bd (diff) | |
| download | brew-8ff8b84235d8c8b430608bddb85715469a3b3504.tar.bz2 | |
Move cleaner to separate file
Diffstat (limited to 'Library/Homebrew/cleaner.rb')
| -rw-r--r-- | Library/Homebrew/cleaner.rb | 63 | 
1 files changed, 63 insertions, 0 deletions
diff --git a/Library/Homebrew/cleaner.rb b/Library/Homebrew/cleaner.rb new file mode 100644 index 000000000..4c6786871 --- /dev/null +++ b/Library/Homebrew/cleaner.rb @@ -0,0 +1,63 @@ +class Cleaner +  def initialize f +    @f=f +    [f.bin, f.sbin, f.lib].select{|d|d.exist?}.each{|d|clean_dir d} +    # info pages suck +    info = f.share+'info' +    info.rmtree if info.directory? and not f.skip_clean? info +  end + +private +  def strip path, args='' +    return if @f.skip_clean? path +    puts "strip #{path}" if ARGV.verbose? +    path.chmod 0644 # so we can strip +    unless path.stat.nlink > 1 +      system "strip", *(args+path) +    else +      path = path.to_s.gsub ' ', '\\ ' + +      # strip unlinks the file and recreates it, thus breaking hard links! +      # is this expected behaviour? patch does it too… still, this fixes it +      tmp = `/usr/bin/mktemp -t homebrew_strip`.chomp +      begin +        `/usr/bin/strip #{args} -o #{tmp} #{path}` +        `/bin/cat #{tmp} > #{path}` +      ensure +        FileUtils.rm tmp +      end +    end +  end + +  def clean_file path +    perms=0444 +    case `file -h '#{path}'` +    when /Mach-O dynamically linked shared library/ +      # Stripping libraries is causing no end of trouble +      # Lets just give up, and try to do it manually in instances where it +      # makes sense +      #strip path, '-SxX' +    when /Mach-O [^ ]* ?executable/ +      strip path +      perms=0555 +    when /script text executable/ +      perms=0555 +    end +    path.chmod perms +  end + +  def clean_dir d +    d.find do |path| +      if path.directory? +        Find.prune if @f.skip_clean? path +      elsif not path.file? +        next +      elsif path.extname == '.la' and not @f.skip_clean? path +        # *.la files are stupid +        path.unlink +      elsif not path.symlink? +        clean_file path +      end +    end +  end +end  | 
