From 2a6575ad2831f00eccbf6c989cde26f0930dde45 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Mon, 28 May 2012 20:43:32 -0500 Subject: [PATCH] cleaner: use new Mach-O pathname methods in clean_file Signed-off-by: Jack Nagel --- Library/Homebrew/cleaner.rb | 7 +++-- Library/Homebrew/test/test_cleaner.rb | 38 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 Library/Homebrew/test/test_cleaner.rb 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