aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2012-06-28 12:49:54 -0500
committerJack Nagel2012-06-29 12:40:26 -0500
commit8f6ee310046589680962805f58bcc07b0a064095 (patch)
tree40c0a507e5920314aec514be979c0454edf6a10b /Library
parent60b518278bdf1fffb46dc70c328041324955b684 (diff)
downloadbrew-8f6ee310046589680962805f58bcc07b0a064095.tar.bz2
Add mdfind method to MacOS module
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/macos.rb74
1 files changed, 40 insertions, 34 deletions
diff --git a/Library/Homebrew/macos.rb b/Library/Homebrew/macos.rb
index b237ae94f..9c4851515 100644
--- a/Library/Homebrew/macos.rb
+++ b/Library/Homebrew/macos.rb
@@ -1,4 +1,11 @@
module MacOS extend self
+
+ MDITEM_BUNDLE_ID_KEY = "kMDItemCFBundleIdentifier"
+ XCODE_4_BUNDLE_ID = "com.apple.dt.Xcode"
+ XCODE_3_BUNDLE_ID = "com.apple.Xcode"
+ CLT_STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo"
+ CLT_FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI"
+
def version
MACOS_VERSION
end
@@ -32,15 +39,14 @@ module MacOS extend self
# Note, that different ways to install the CLTs lead to different
# version numbers.
@clt_version ||= begin
- # CLT installed via stand-alone website download
- clt_pkginfo_stand_alone = `pkgutil --pkg-info com.apple.pkg.DeveloperToolsCLILeo 2>/dev/null`.strip
- # CLT installed via preferences from within Xcode
- clt_pkginfo_from_xcode = `pkgutil --pkg-info com.apple.pkg.DeveloperToolsCLI 2>/dev/null`.strip
- if not clt_pkginfo_stand_alone.empty?
- clt_pkginfo_stand_alone =~ /version: (.*)$/
+ standalone = pkgutil_info(CLT_STANDALONE_PKG_ID)
+ from_xcode = pkgutil_info(CLT_FROM_XCODE_PKG_ID)
+
+ if not standalone.empty?
+ standalone =~ /version: (.*)$/
$1
- elsif not clt_pkginfo_from_xcode.empty?
- clt_pkginfo_from_xcode =~ /version: (.*)$/
+ elsif not from_xcode.empty?
+ from_xcode =~ /version: (.*)$/
$1
else
# We return "" instead of nil because we want clt_installed? to be true on older Macs.
@@ -191,16 +197,11 @@ module MacOS extend self
# Ask Spotlight where Xcode is. If the user didn't install the
# helper tools and installed Xcode in a non-conventional place, this
# is our only option. See: http://superuser.com/questions/390757
- path = `mdfind "kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'"`.strip
- if path.empty?
- # Xcode 3 had a different identifier
- path = `mdfind "kMDItemCFBundleIdentifier == 'com.apple.Xcode'"`.strip
- end
- path = "#{path}/Contents/Developer"
- if !path.empty? and File.executable? "#{path}/usr/bin/make"
- Pathname.new path
- else
- nil
+ path = app_with_bundle_id(XCODE_4_BUNDLE_ID) or app_with_bundle_id(XCODE_3_BUNDLE_ID)
+
+ unless path.nil?
+ path += "Contents/Developer"
+ path if File.executable? "#{path}/usr/bin/make"
end
end
end
@@ -208,24 +209,14 @@ module MacOS extend self
def xcode_installed?
# Telling us whether the Xcode.app is installed or not.
- @xcode_installed ||= begin
- if File.directory? '/Applications/Xcode.app'
- true
- elsif File.directory? '/Developer/Applications/Xcode.app' # old style
- true
- elsif not `mdfind "kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'"`.strip.empty?
- # Xcode 4
- true
- elsif not `mdfind "kMDItemCFBundleIdentifier == 'com.apple.Xcode'"`.strip.empty?
- # Xcode 3
- true
- else
- false
- end
- end
+ @xcode_installed ||= File.directory?('/Applications/Xcode.app') ||
+ File.directory?('/Developer/Applications/Xcode.app') ||
+ app_with_bundle_id(XCODE_4_BUNDLE_ID) ||
+ app_with_bundle_id(XCODE_3_BUNDLE_ID) ||
+ false
end
- def xcode_version
+ def xcode_version
# may return a version string
# that is guessed based on the compiler, so do not
# use it in order to check if Xcode is installed.
@@ -405,4 +396,19 @@ module MacOS extend self
StandardCompilers[xcode].all? {|k,v| MacOS.send(k) == v}
end
+
+ def app_with_bundle_id id
+ mdfind(MDITEM_BUNDLE_ID_KEY, id)
+ end
+
+ private
+
+ def mdfind attribute, id
+ path = `mdfind "#{attribute} == '#{id}'"`.strip
+ Pathname.new(path) unless path.empty?
+ end
+
+ def pkgutil_info id
+ `pkgutil --pkg-info #{id} 2>/dev/null`.strip
+ end
end