diff --git a/Library/Homebrew/cleaner.rb b/Library/Homebrew/cleaner.rb index ea5ece779f..3950cd846f 100644 --- a/Library/Homebrew/cleaner.rb +++ b/Library/Homebrew/cleaner.rb @@ -55,15 +55,14 @@ class Cleaner def clean_file path perms = 0444 - case `/usr/bin/file -h '#{path}'` - when /Mach-O dynamically linked shared library/ + if path.dylib? # 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/ + elsif path.mach_o_executable? strip path perms = 0555 - when /text executable/ + elsif path.text_executable? perms = 0555 end path.chmod perms diff --git a/Library/Homebrew/test/test_cleaner.rb b/Library/Homebrew/test/test_cleaner.rb new file mode 100644 index 0000000000..e9e9c96ef6 --- /dev/null +++ b/Library/Homebrew/test/test_cleaner.rb @@ -0,0 +1,38 @@ +require 'testing_env' + +require 'extend/ARGV' # needs to be after test/unit to avoid conflict with OptionsParser +ARGV.extend(HomebrewArgvExtension) + +require 'cleaner' + +class CleanerTestBall < Formula + def initialize name=nil + @url="file:///#{TEST_FOLDER}/tarballs/testball-0.1.tbz" + @homepage = 'http://example.com/' + super "cleanertestball" + end + + def install + TEST_FOLDER.cd do + bin.mkpath + lib.mkpath + cp 'mach/a.out', bin + cp 'mach/fat.dylib', lib + cp 'mach/x86_64.dylib', lib + cp 'mach/i386.dylib', lib + end + end +end + +class CleanerTests < Test::Unit::TestCase + def test_clean_file + f = CleanerTestBall.new + nostdout { f.brew { f.install } } + + assert_nothing_raised { Cleaner.new f } + assert_equal 0100555, (f.bin/'a.out').stat.mode + assert_equal 0100444, (f.lib/'fat.dylib').stat.mode + assert_equal 0100444, (f.lib/'x86_64.dylib').stat.mode + assert_equal 0100444, (f.lib/'i386.dylib').stat.mode + end +end