aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cleaner.rb
diff options
context:
space:
mode:
authorAdam Vandenberg2010-08-21 11:06:02 -0700
committerAdam Vandenberg2010-08-21 11:06:02 -0700
commit8ff8b84235d8c8b430608bddb85715469a3b3504 (patch)
treea454f014210c4c039605b0354852452620abb013 /Library/Homebrew/cleaner.rb
parent04c0342d96ebafeff7f830615f381e8a3e6059bd (diff)
downloadbrew-8ff8b84235d8c8b430608bddb85715469a3b3504.tar.bz2
Move cleaner to separate file
Diffstat (limited to 'Library/Homebrew/cleaner.rb')
-rw-r--r--Library/Homebrew/cleaner.rb63
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